Add correct address test (#66)

This commit is contained in:
Szymon Szlachtowicz 2021-09-14 09:59:41 +02:00 committed by GitHub
parent 8575e7de55
commit 1b7d6a9c4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 3 deletions

View File

@ -59,7 +59,6 @@ const getSignedMessages = async (
sessionID: 0, sessionID: 0,
}, },
] ]
const types = ['address', 'uint256', 'uint256']
const messages = votes.map((vote) => { const messages = votes.map((vote) => {
return [vote.voter.address, BigNumber.from(vote.sessionID).mul(2).add(vote.vote), vote.tokenAmount] as [ return [vote.voter.address, BigNumber.from(vote.sessionID).mul(2).add(vote.vote), vote.tokenAmount] as [
string, string,
@ -86,11 +85,12 @@ async function fixture([alice, firstAddress, secondAddress, noTokensAddress]: an
await erc20.transfer(firstAddress.address, 10000) await erc20.transfer(firstAddress.address, 10000)
await erc20.transfer(secondAddress.address, 10000) await erc20.transfer(secondAddress.address, 10000)
const contract = await deployContract(alice, VotingContract, [erc20.address, 1000]) const contract = await deployContract(alice, VotingContract, [erc20.address, 1000])
return { contract, alice, firstAddress, secondAddress, provider, noTokensAddress } const secondContract = await deployContract(alice, VotingContract, [erc20.address, 1000])
return { contract, secondContract, alice, firstAddress, secondAddress, provider, noTokensAddress }
} }
before(async function () { before(async function () {
this.timeout(10000) this.timeout(20000)
const { contract } = await loadFixture(fixture) const { contract } = await loadFixture(fixture)
typedData.domain.chainId = 1 typedData.domain.chainId = 1
typedData.domain.verifyingContract = contract.address typedData.domain.verifyingContract = contract.address
@ -315,5 +315,34 @@ describe('Contract', () => {
await expect(contract.castVotes(signedMessages)).to.be.revertedWith('vote has wrong signature') await expect(contract.castVotes(signedMessages)).to.be.revertedWith('vote has wrong signature')
}) })
it("vote can't be reused", async () => {
const createMessage = (voter: any, domainSeparator: any) => {
const correctMessageParams = [voter.address, BigNumber.from(0).mul(2).add(0), BigNumber.from(10)]
const correctMessageData: TypedMessage<MessageTypes> = {
...domainSeparator,
message: {
roomIdAndType: correctMessageParams[1].toHexString(),
tokenAmount: correctMessageParams[2].toHexString(),
voter: correctMessageParams[0],
},
}
const correctSig = utils.splitSignature(
signTypedMessage(Buffer.from(utils.arrayify(voter.privateKey)), { data: correctMessageData }, 'V3')
)
return [...correctMessageParams, correctSig.r, correctSig._vs]
}
const { contract, secondContract, firstAddress } = await loadFixture(fixture)
await contract.initializeVotingRoom('test', '', BigNumber.from(100))
await secondContract.initializeVotingRoom('test', '', BigNumber.from(100))
const correctAddress = createMessage(firstAddress, typedData)
await expect(contract.castVotes([correctAddress])).not.to.be.reverted
await expect(secondContract.castVotes([correctAddress])).to.be.revertedWith('vote has wrong signature')
})
}) })
}) })