const BiDirectionalPaymentChannel = artifacts.require("BiDirectionalPaymentChannel"); contract("BiDirectionalPaymentChannel", (accounts) => { let contractInstance; const users = [accounts[0], accounts[1]]; const balances = [10, 20]; const expiresAt = Math.floor(Date.now() / 1000) + 60; // Expires 60 seconds from now const challengePeriod = 120; beforeEach(async () => { contractInstance = await BiDirectionalPaymentChannel.new( users, balances, expiresAt, challengePeriod, { from: accounts[2], value: 30 } ); }); it("should set the initial contract state", async () => { const balance0 = await contractInstance.balances.call(users[0]); const balance1 = await contractInstance.balances.call(users[1]); const challengePeriodResult = await contractInstance.challengePeriod.call(); const expiresAtResult = await contractInstance.expiresAt.call(); assert.equal(balance0.toNumber(), balances[0], "Incorrect initial balance for user 0"); assert.equal(balance1.toNumber(), balances[1], "Incorrect initial balance for user 1"); assert.equal(challengePeriodResult.toNumber(), challengePeriod, "Incorrect challenge period"); assert.equal(expiresAtResult.toNumber(), expiresAt, "Incorrect expiry time"); }); it("should allow users to sign the initial balances", async () => { const balances = [5, 25]; const nonce = 0; const signature0 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), users[0]); const signature1 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), users[1]); await contractInstance.challengeExit(balances, nonce, [signature0, signature1], { from: users[0] }); const balance0 = await contractInstance.balances.call(users[0]); const balance1 = await contractInstance.balances.call(users[1]); assert.equal(balance0.toNumber(), balances[0], "Incorrect balance for user 0"); assert.equal(balance1.toNumber(), balances[1], "Incorrect balance for user 1"); }); it("should not allow non-users to call challengeExit", async () => { const balances = [5, 25]; const nonce = 0; const signature0 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), users[0]); const signature1 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), users[1]); try { await contractInstance.challengeExit(balances, nonce, [signature0, signature1], { from: accounts[2] }); assert.fail("Expected an error but did not get one"); } catch (error) { assert(error.message.includes("Not user"), "Unexpected error message"); } }); it("should not allow invalid signatures", async () => { const balances = [5, 25]; const nonce = 0; const signature0 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), users[0]); const signature1 = web3.eth.sign(web3.utils.keccak256(contractInstance.address, balances, nonce), accounts[3]); try { await contractInstance.challengeExit(balances, ) } }) } } }) }) }) ) }) })
0.4.18