Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ contract MultipleArbitrableTokenTransaction is IArbitrable {
*/
event Ruling(Arbitrator indexed _arbitrator, uint indexed _disputeID, uint _ruling);

/** @dev Emitted when a transaction is created.
* @param _transactionID The index of the transaction.
* @param _sender The address of the sender.
* @param _receiver The address of the receiver.
* @param _token The token address.
* @param _amount The initial amount of the token.
*/
event TransactionCreated(uint _transactionID, address indexed _sender, address indexed _receiver, ERC20 _token, uint _amount);

// **************************** //
// * Arbitrable functions * //
// * Modifying the state * //
Expand Down Expand Up @@ -126,6 +135,7 @@ contract MultipleArbitrableTokenTransaction is IArbitrable {
status: Status.NoDispute
}));
emit MetaEvidence(transactions.length - 1, _metaEvidence);
emit TransactionCreated(transactions.length - 1, msg.sender, _receiver, _token, _amount);

return transactions.length - 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ contract MultipleArbitrableTransaction is IArbitrable {
*/
event Ruling(Arbitrator indexed _arbitrator, uint indexed _disputeID, uint _ruling);

/** @dev Emitted when a transaction is created.
* @param _transactionID The index of the transaction.
* @param _sender The address of the sender.
* @param _receiver The address of the receiver.
* @param _amount The initial amount in the transaction.
*/
event TransactionCreated(uint _transactionID, address indexed _sender, address indexed _receiver, uint _amount);

// **************************** //
// * Arbitrable functions * //
// * Modifying the state * //
Expand Down Expand Up @@ -111,6 +119,7 @@ contract MultipleArbitrableTransaction is IArbitrable {
status: Status.NoDispute
}));
emit MetaEvidence(transactions.length - 1, _metaEvidence);
emit TransactionCreated(transactions.length - 1, msg.sender, _receiver, msg.value);

return transactions.length - 1;
}
Expand Down
114 changes: 72 additions & 42 deletions test/multiple-arbitrable-token-transaction.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
const timeoutPayment = 100
const gasPrice = 5000000000
const metaEvidenceUri = 'https://kleros.io'
const amount = 42

beforeEach(async () => {
this.token = await ERC20Mock.new(sender, 100)
Expand Down Expand Up @@ -74,12 +75,12 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
* @returns {object} lastTransaction, arbitrableTransactionId
*/
async function createTestTransaction(maContract) {
await this.token.approve(maContract.address, 42, {
await this.token.approve(maContract.address, amount, {
from: sender
})
const lastTransaction = await getLastTransaction(maContract, async () => {
await maContract.createTransaction(
42,
amount,
this.token.address,
timeoutPayment,
receiver,
Expand Down Expand Up @@ -187,14 +188,14 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
)
assert.equal(
oldAmount.toNumber(),
42,
amount,
"The contract hasn't updated its amount correctly."
)

await executeActionAndCompareBalances(
async () => {
let senderTotalTxCost = 0
const tx = await maContract.pay(arbitrableTransactionId, 42, {
const tx = await maContract.pay(arbitrableTransactionId, amount, {
from: sender,
gasPrice
})
Expand All @@ -206,9 +207,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
{
maContract,
receiver: {
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)

Expand All @@ -219,6 +220,31 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
assert.equal(newAmount.toNumber(), 0, 'Amount not updated correctly')
})

it('Should emit TransactionCreated', async () => {
const { maContract } = await setupContracts()
const { arbitrableTransactionId } = await createTestTransaction(maContract)

const eventResult = await new Promise((resolve, reject) => {
maContract
.TransactionCreated({}, { fromBlock: 0, toBlock: 'latest' })
.get((error, eventResult) => {
if (error)
reject(new Error('Could not lookup TransactionCreated event log'))
else resolve(eventResult)
})
})

assert.equal(eventResult.length, 1)
assert.equal(
eventResult[0].args._transactionID.toNumber(),
arbitrableTransactionId
)
assert.equal(eventResult[0].args._sender, sender)
assert.equal(eventResult[0].args._receiver, receiver)
assert.equal(eventResult[0].args._token, this.token.address)
assert.equal(eventResult[0].args._amount, amount)
})

it('Should handle 1 transaction for reimburse', async () => {
const { maContract } = await setupContracts()
const { arbitrableTransactionId } = await createTestTransaction(maContract)
Expand All @@ -229,14 +255,14 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
)
assert.equal(
oldAmount.toNumber(),
42,
amount,
"The contract hasn't updated its amount correctly."
)

await executeActionAndCompareBalances(
async () => {
let receiverTotalTxCost = 0
const tx = await maContract.reimburse(arbitrableTransactionId, 42, {
const tx = await maContract.reimburse(arbitrableTransactionId, amount, {
from: receiver,
gasPrice
})
Expand All @@ -248,9 +274,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
{
maContract,
sender: {
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)

Expand All @@ -271,10 +297,14 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
await executeActionAndCompareBalances(
async () => {
let receiverTotalTxCost = 0
const tx = await maContract.reimburse(arbitrableTransactionId, 42, {
from: receiver,
gasPrice
})
const tx = await maContract.reimburse(
arbitrableTransactionId,
amount,
{
from: receiver,
gasPrice
}
)
receiverTotalTxCost += tx.receipt.gasUsed * gasPrice
return {
receiverTotalTxCost
Expand All @@ -283,17 +313,17 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
{
maContract,
sender: {
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)

const amount = await getTransactionAmount(
const newAmount = await getTransactionAmount(
maContract,
arbitrableTransactionId
)
assert.equal(amount.toNumber(), 0, 'Amount not updated correctly')
assert.equal(newAmount.toNumber(), 0, 'Amount not updated correctly')
}
})

Expand All @@ -303,7 +333,7 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
await shouldFail.reverting(
getLastTransaction(maContract, async () => {
await maContract.createTransaction(
42,
amount,
this.token.address,
timeoutPayment,
receiver,
Expand Down Expand Up @@ -385,9 +415,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
{
maContract,
receiver: {
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand Down Expand Up @@ -417,14 +447,14 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
})

await shouldFail.reverting(
maContract.pay(arbitrableTransactionId, 42, {
maContract.pay(arbitrableTransactionId, amount, {
from: sender,
gasPrice
})
)

await shouldFail.reverting(
maContract.reimburse(arbitrableTransactionId, 42, {
maContract.reimburse(arbitrableTransactionId, amount, {
from: receiver,
gasPrice
})
Expand Down Expand Up @@ -452,9 +482,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
sender: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand All @@ -480,9 +510,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
receiver: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand Down Expand Up @@ -514,7 +544,7 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
etherDelta: 10,
tokenDelta: 21
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand All @@ -538,13 +568,13 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
'The transaction did not change correctly to new status: `Status.WaitingSender`'
)

await centralizedArbitrator.setArbitrationPrice(arbitrationFee + 42, {
await centralizedArbitrator.setArbitrationPrice(arbitrationFee + amount, {
from: arbitrator
})

await maContract.payArbitrationFeeBySender(arbitrableTransactionId, {
from: sender,
value: arbitrationFee + 42
value: arbitrationFee + amount
})

arbitrableTransactionStatus = (await maContract.transactions(
Expand All @@ -567,18 +597,18 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
value: arbitrationFee
})

await centralizedArbitrator.setArbitrationPrice(arbitrationFee + 42, {
await centralizedArbitrator.setArbitrationPrice(arbitrationFee + amount, {
from: arbitrator
})

await maContract.payArbitrationFeeBySender(arbitrableTransactionId, {
from: sender,
value: arbitrationFee + 42
value: arbitrationFee + amount
})

await maContract.payArbitrationFeeByReceiver(arbitrableTransactionId, {
from: receiver,
value: 42 // Pay the rest of arbitration fee with an extra to test also the refund in this case
value: amount // Pay the rest of arbitration fee with an extra to test also the refund in this case
})

arbitrableTransaction = await maContract.transactions(
Expand Down Expand Up @@ -644,9 +674,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
sender: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand Down Expand Up @@ -699,9 +729,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
receiver: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand Down Expand Up @@ -800,7 +830,7 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
it('Should handle multiple transactions concurrently', async () => {
const { centralizedArbitrator, maContract } = await setupContracts()

await this.token.approve(maContract.address, 42 * 2, {
await this.token.approve(maContract.address, amount * 2, {
from: sender
})

Expand Down Expand Up @@ -837,9 +867,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
sender: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)

Expand All @@ -851,9 +881,9 @@ contract('MultipleArbitrableTokenTransaction', function(accounts) {
maContract,
receiver: {
etherDelta: 20,
tokenDelta: 42
tokenDelta: amount
},
contractTokenDelta: -42
contractTokenDelta: -amount
}
)
})
Expand Down
Loading