Fix tests and add double hashing

Change-Id: I9676e8dd8d25f44c43ef10462493f20d1caff724
This commit is contained in:
Hendrik Hofstadt 2021-07-20 09:51:53 +02:00
parent 1cc90e54db
commit 227445cd76
3 changed files with 41 additions and 21 deletions

View File

@ -9,14 +9,14 @@ import "./Governance.sol";
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol"; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol";
contract Implementation is Governance { contract Implementation is Governance {
event LogMessagePublished(address indexed sender, uint64 sequence, uint32 nonce, bytes payload, bool persistMessage, uint8 consistency_level); event LogMessagePublished(address indexed sender, uint64 sequence, uint32 nonce, bytes payload, bool persistMessage, uint8 consistencyLevel);
// Publish a message to be attested by the Wormhole network // Publish a message to be attested by the Wormhole network
function publishMessage( function publishMessage(
uint32 nonce, uint32 nonce,
bytes memory payload, bytes memory payload,
bool persistMessage, bool persistMessage,
uint8 consistency_level uint8 consistencyLevel
) public payable { ) public payable {
// check fee // check fee
if( persistMessage ) { if( persistMessage ) {
@ -26,7 +26,7 @@ contract Implementation is Governance {
} }
// emit log // emit log
emit LogMessagePublished(msg.sender, useSequence(msg.sender), nonce, payload, persistMessage, consistency_level); emit LogMessagePublished(msg.sender, useSequence(msg.sender), nonce, payload, persistMessage, consistencyLevel);
} }
function useSequence(address emitter) internal returns (uint64 sequence) { function useSequence(address emitter) internal returns (uint64 sequence) {

View File

@ -83,7 +83,7 @@ contract Messages is Getters {
// Hash the body // Hash the body
bytes memory body = encodedVM.slice(index, encodedVM.length - index); bytes memory body = encodedVM.slice(index, encodedVM.length - index);
vm.hash = keccak256(body); vm.hash = keccak256(abi.encodePacked(keccak256(body)));
// Parse the body // Parse the body
vm.timestamp = encodedVM.toUint32(index); vm.timestamp = encodedVM.toUint32(index);

View File

@ -107,7 +107,8 @@ contract("Wormhole", function () {
const log = await initialized.methods.publishMessage( const log = await initialized.methods.publishMessage(
"0x123", "0x123",
"0x123321", "0x123321",
false false,
32
).send({ ).send({
value: 0, // fees are set to 0 initially value: 0, // fees are set to 0 initially
from: accounts[0] from: accounts[0]
@ -117,6 +118,8 @@ contract("Wormhole", function () {
assert.equal(log.events.LogMessagePublished.returnValues.sequence.toString(), "0"); assert.equal(log.events.LogMessagePublished.returnValues.sequence.toString(), "0");
assert.equal(log.events.LogMessagePublished.returnValues.nonce, 291); assert.equal(log.events.LogMessagePublished.returnValues.nonce, 291);
assert.equal(log.events.LogMessagePublished.returnValues.payload.toString(), "0x123321"); assert.equal(log.events.LogMessagePublished.returnValues.payload.toString(), "0x123321");
assert.equal(log.events.LogMessagePublished.returnValues.consistencyLevel, 32);
assert.equal(log.events.LogMessagePublished.returnValues.persistMessage, false);
}) })
it("should increase the sequence for an account", async function () { it("should increase the sequence for an account", async function () {
@ -126,7 +129,8 @@ contract("Wormhole", function () {
const log = await initialized.methods.publishMessage( const log = await initialized.methods.publishMessage(
"0x1", "0x1",
"0x1", "0x1",
false false,
32
).send({ ).send({
value: 0, // fees are set to 0 initially value: 0, // fees are set to 0 initially
from: accounts[0] from: accounts[0]
@ -154,7 +158,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
let result let result
@ -173,6 +178,7 @@ contract("Wormhole", function () {
assert.equal(result.vm.payload, data); assert.equal(result.vm.payload, data);
assert.equal(result.vm.guardianSetIndex, 0); assert.equal(result.vm.guardianSetIndex, 0);
assert.equal(result.vm.sequence, 1337); assert.equal(result.vm.sequence, 1337);
assert.equal(result.vm.consistencyLevel, 2);
assert.equal(result.valid, true); assert.equal(result.valid, true);
@ -205,7 +211,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
@ -226,7 +233,8 @@ contract("Wormhole", function () {
await initialized.methods.publishMessage( await initialized.methods.publishMessage(
"0x123", "0x123",
"0x123321", "0x123321",
false false,
32
).send({ ).send({
from: accounts[0], from: accounts[0],
value: 1111 value: 1111
@ -235,7 +243,8 @@ contract("Wormhole", function () {
await initialized.methods.publishMessage( await initialized.methods.publishMessage(
"0x123", "0x123",
"0x123321", "0x123321",
true true,
32
).send({ ).send({
from: accounts[0], from: accounts[0],
value: 2222 value: 2222
@ -246,7 +255,8 @@ contract("Wormhole", function () {
await initialized.methods.publishMessage( await initialized.methods.publishMessage(
"0x123", "0x123",
"0x123321", "0x123321",
false false,
32
).send({ ).send({
value: 1110, value: 1110,
from: accounts[0] from: accounts[0]
@ -286,7 +296,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
let WHBefore = await web3.eth.getBalance(Wormhole.address); let WHBefore = await web3.eth.getBalance(Wormhole.address);
@ -336,7 +347,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
let set = await initialized.methods.submitNewGuardianSet("0x" + vm).send({ let set = await initialized.methods.submitNewGuardianSet("0x" + vm).send({
@ -400,7 +412,8 @@ contract("Wormhole", function () {
testSigner2PK, testSigner2PK,
testSigner3PK testSigner3PK
], ],
1 1,
2
); );
let before = await web3.eth.getStorageAt(Wormhole.address, "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"); let before = await web3.eth.getStorageAt(Wormhole.address, "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc");
@ -445,7 +458,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
let failed = false; let failed = false;
@ -480,7 +494,8 @@ contract("Wormhole", function () {
[ [
testSigner1PK, testSigner1PK,
], ],
0 0,
2
); );
// this should pass // this should pass
@ -518,7 +533,8 @@ contract("Wormhole", function () {
testSigner2PK, testSigner2PK,
testSigner3PK, testSigner3PK,
], ],
1 1,
2
); );
try { try {
@ -556,7 +572,8 @@ contract("Wormhole", function () {
testSigner2PK, testSigner2PK,
testSigner3PK, testSigner3PK,
], ],
1 1,
2
); );
try { try {
@ -594,7 +611,8 @@ contract("Wormhole", function () {
testSigner2PK, testSigner2PK,
testSigner3PK, testSigner3PK,
], ],
1 1,
2
); );
await initialized.methods.submitTransferFees("0x" + vm).send({ await initialized.methods.submitTransferFees("0x" + vm).send({
@ -625,7 +643,8 @@ const signAndEncodeVM = async function (
sequence, sequence,
data, data,
signers, signers,
guardianSetIndex guardianSetIndex,
consistencyLevel
) { ) {
const body = [ const body = [
web3.eth.abi.encodeParameter("uint32", timestamp).substring(2 + (64 - 8)), web3.eth.abi.encodeParameter("uint32", timestamp).substring(2 + (64 - 8)),
@ -633,10 +652,11 @@ const signAndEncodeVM = async function (
web3.eth.abi.encodeParameter("uint16", emitterChainId).substring(2 + (64 - 4)), web3.eth.abi.encodeParameter("uint16", emitterChainId).substring(2 + (64 - 4)),
web3.eth.abi.encodeParameter("bytes32", emitterAddress).substring(2), web3.eth.abi.encodeParameter("bytes32", emitterAddress).substring(2),
web3.eth.abi.encodeParameter("uint64", sequence).substring(2 + (64 - 16)), web3.eth.abi.encodeParameter("uint64", sequence).substring(2 + (64 - 16)),
web3.eth.abi.encodeParameter("uint8", consistencyLevel).substring(2 + (64 - 2)),
data.substr(2) data.substr(2)
] ]
const hash = web3.utils.soliditySha3("0x" + body.join("")) const hash = web3.utils.soliditySha3(web3.utils.soliditySha3("0x" + body.join("")))
let signatures = ""; let signatures = "";