Add set fee to tests + add some sanity checks (#350)

* Add set fee to tests + add some sanity checks

* Add fee to evm relayer
This commit is contained in:
Ali Behjati 2022-10-18 19:07:37 +02:00 committed by GitHub
parent e4160b2f08
commit d3d10f2ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 27 deletions

View File

@ -1,3 +1,8 @@
const { assert } = require("chai");
const governance = require("@pythnetwork/xc-governance-sdk");
const assertVaaPayloadEquals = require("../../scripts/assertVaaPayloadEquals");
const { assert } = require("chai");
const loadEnv = require("../../scripts/loadEnv"); const loadEnv = require("../../scripts/loadEnv");
loadEnv("../../"); loadEnv("../../");
@ -13,5 +18,18 @@ const PythUpgradable = artifacts.require("PythUpgradable");
*/ */
module.exports = async function (_deployer) { module.exports = async function (_deployer) {
const proxy = await PythUpgradable.deployed(); const proxy = await PythUpgradable.deployed();
const setFeeInstruction = new governance.SetFeeInstruction(
governance.CHAINS.unset, // All the chains
BigInt(1),
BigInt(0),
).serialize();
console.log("SetFeeInstruction: 0x", setFeeInstruction.toString('hex'));
assertVaaPayloadEquals(setFeeVaa, setFeeInstruction);
await proxy.executeGovernanceInstruction(setFeeVaa); await proxy.executeGovernanceInstruction(setFeeVaa);
assert.equal((await proxy.singleUpdateFeeInWei()).toString(), "1");
} }

View File

@ -0,0 +1,37 @@
const createLocalnetGovernanceVaa = require("../../scripts/createLocalnetGovernanceVaa");
const assertVaaPayloadEquals = require("../../scripts/assertVaaPayloadEquals");
const governance = require("@pythnetwork/xc-governance-sdk");
const { assert } = require("chai");
const loadEnv = require("../../scripts/loadEnv");
loadEnv("../../");
const PythUpgradable = artifacts.require("PythUpgradable");
/**
*
* This change:
* - Executes the VAA to set the fee to 1 wei
*/
module.exports = async function (_deployer) {
const setFeeInstruction = new governance.SetFeeInstruction(
governance.CHAINS.unset, // All the chains
BigInt(1),
BigInt(0),
).serialize();
console.log("SetFeeInstruction: 0x", setFeeInstruction.toString('hex'));
const setFeeVaa = createLocalnetGovernanceVaa(
setFeeInstruction,
2
);
assertVaaPayloadEquals(setFeeVaa, setFeeInstruction);
const proxy = await PythUpgradable.deployed();
await proxy.executeGovernanceInstruction(setFeeVaa);
assert.equal((await proxy.singleUpdateFeeInWei()).toString(), "1");
}

View File

@ -9,6 +9,7 @@
"version": "1.1.0", "version": "1.1.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@certusone/wormhole-sdk-wasm": "^0.0.1",
"@openzeppelin/contracts": "^4.5.0", "@openzeppelin/contracts": "^4.5.0",
"@openzeppelin/contracts-upgradeable": "^4.5.2", "@openzeppelin/contracts-upgradeable": "^4.5.2",
"@pythnetwork/pyth-sdk-solidity": "^1.0.1", "@pythnetwork/pyth-sdk-solidity": "^1.0.1",
@ -419,6 +420,15 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@certusone/wormhole-sdk-wasm": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
"integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
"dependencies": {
"@types/long": "^4.0.2",
"@types/node": "^18.0.3"
}
},
"node_modules/@chainsafe/truffle-plugin-abigen": { "node_modules/@chainsafe/truffle-plugin-abigen": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/@chainsafe/truffle-plugin-abigen/-/truffle-plugin-abigen-0.0.1.tgz", "resolved": "https://registry.npmjs.org/@chainsafe/truffle-plugin-abigen/-/truffle-plugin-abigen-0.0.1.tgz",
@ -8121,10 +8131,9 @@
"optional": true "optional": true
}, },
"node_modules/@types/long": { "node_modules/@types/long": {
"version": "4.0.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
"dev": true
}, },
"node_modules/@types/mime": { "node_modules/@types/mime": {
"version": "1.3.2", "version": "1.3.2",
@ -8149,9 +8158,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "17.0.21", "version": "18.11.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz",
"integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" "integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w=="
}, },
"node_modules/@types/npm": { "node_modules/@types/npm": {
"version": "2.0.32", "version": "2.0.32",
@ -14358,12 +14367,6 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/ganache-core/node_modules/@types/node": {
"version": "14.14.20",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz",
"integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==",
"dev": true
},
"node_modules/ganache-core/node_modules/@types/pbkdf2": { "node_modules/ganache-core/node_modules/@types/pbkdf2": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
@ -36710,6 +36713,15 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@certusone/wormhole-sdk-wasm": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-wasm/-/wormhole-sdk-wasm-0.0.1.tgz",
"integrity": "sha512-LdIwLhOyr4pPs2jqYubqC7d4UkqYBX0EG/ppspQlW3qlVE0LZRMrH6oVzzLMyHtV0Rw7O9sIKzORW/T3mrJv2w==",
"requires": {
"@types/long": "^4.0.2",
"@types/node": "^18.0.3"
}
},
"@chainsafe/truffle-plugin-abigen": { "@chainsafe/truffle-plugin-abigen": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/@chainsafe/truffle-plugin-abigen/-/truffle-plugin-abigen-0.0.1.tgz", "resolved": "https://registry.npmjs.org/@chainsafe/truffle-plugin-abigen/-/truffle-plugin-abigen-0.0.1.tgz",
@ -43715,10 +43727,9 @@
"optional": true "optional": true
}, },
"@types/long": { "@types/long": {
"version": "4.0.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
"dev": true
}, },
"@types/mime": { "@types/mime": {
"version": "1.3.2", "version": "1.3.2",
@ -43743,9 +43754,9 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "17.0.21", "version": "18.11.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz",
"integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" "integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w=="
}, },
"@types/npm": { "@types/npm": {
"version": "2.0.32", "version": "2.0.32",
@ -49105,12 +49116,6 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/node": {
"version": "14.14.20",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz",
"integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==",
"dev": true
},
"@types/pbkdf2": { "@types/pbkdf2": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",

View File

@ -27,6 +27,7 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@certusone/wormhole-sdk-wasm": "^0.0.1",
"@openzeppelin/contracts": "^4.5.0", "@openzeppelin/contracts": "^4.5.0",
"@openzeppelin/contracts-upgradeable": "^4.5.2", "@openzeppelin/contracts-upgradeable": "^4.5.2",
"@pythnetwork/pyth-sdk-solidity": "^1.0.1", "@pythnetwork/pyth-sdk-solidity": "^1.0.1",

View File

@ -0,0 +1,16 @@
const { importCoreWasm, setDefaultWasm } = require("@certusone/wormhole-sdk-wasm");
setDefaultWasm("node");
const { assert } = require("chai");
module.exports = async function assertVaaPayloadEquals(vaaHexString, expectedPayloadBuffer) {
const { parse_vaa } = await importCoreWasm();
if (vaaHexString.startsWith("0x")) {
vaaHexString = vaaHexString.substring(2);
}
const vaaPayload = Buffer.from(parse_vaa(Buffer.from(vaaHexString, 'hex')).payload);
assert(expectedPayloadBuffer.equals(vaaPayload), "The VAA payload is not equal to the expected payload");
}

View File

@ -45,8 +45,10 @@ export class EvmRelay implements Relay {
? await this.queryMany(priceIds) ? await this.queryMany(priceIds)
: null; : null;
const updateFee = await this.p2wContract.getUpdateFee(1);
let tx = this.p2wContract let tx = this.p2wContract
.updatePriceFeeds(["0x" + signedVAAs[i]], { gasLimit: 2000000 }) .updatePriceFeeds(["0x" + signedVAAs[i]], { gasLimit: 2000000, value: updateFee })
.then(async (pending) => { .then(async (pending) => {
let receipt = await pending.wait(); let receipt = await pending.wait();
logger.info( logger.info(