sdk/js: Update relayer testing on mainnet (#3164)

This commit is contained in:
derpy-duck 2023-07-13 10:10:23 -04:00 committed by GitHub
parent 70dd001ba3
commit 575d2fe9a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 130 additions and 56 deletions

View File

@ -20,6 +20,8 @@
"docs": "typedoc src/index.ts", "docs": "typedoc src/index.ts",
"test": "DEV=true NETWORK=DEVNET jest --config jestconfig.json --verbose", "test": "DEV=true NETWORK=DEVNET jest --config jestconfig.json --verbose",
"test-ci": "NETWORK=DEVNET NEAR_NO_LOGS=true jest --config jestconfig.json --verbose --setupFiles ./ci-config.js --forceExit", "test-ci": "NETWORK=DEVNET NEAR_NO_LOGS=true jest --config jestconfig.json --verbose --setupFiles ./ci-config.js --forceExit",
"test-relayer-mainnet": "ENV=mainnet NETWORK=MAINNET npx jest --config jestconfig.json --verbose ./src/relayer/",
"test-relayer-testnet": "ENV=testnet NETWORK=TESTNET npx jest --config jestconfig.json --verbose ./src/relayer/",
"build": "npm run build-all", "build": "npm run build-all",
"format": "echo \"disabled: prettier --write \"src/**/*.ts\"\"", "format": "echo \"disabled: prettier --write \"src/**/*.ts\"\"",
"lint": "tslint -p tsconfig.json", "lint": "tslint -p tsconfig.json",

View File

@ -16,6 +16,8 @@ import { getNetwork, PRIVATE_KEY, isCI } from "./utils/utils";
const network: Network = getNetwork(); const network: Network = getNetwork();
const ci: boolean = isCI(); const ci: boolean = isCI();
const testIfDevnet = () => (network == "DEVNET" ? test : test.skip);
const sourceChain = network == "DEVNET" ? "ethereum" : "avalanche"; const sourceChain = network == "DEVNET" ? "ethereum" : "avalanche";
const targetChain = network == "DEVNET" ? "bsc" : "celo"; const targetChain = network == "DEVNET" ? "bsc" : "celo";
@ -24,11 +26,15 @@ const targetChainId = CHAINS[targetChain];
describe("Relay Provider Test", () => { describe("Relay Provider Test", () => {
const addressInfo = getAddressInfo(sourceChain, network); const addressInfo = getAddressInfo(sourceChain, network);
if (network == "MAINNET")
addressInfo.mockDeliveryProviderAddress =
"0x7A0a53847776f7e94Cc35742971aCb2217b0Db81";
const provider = getDefaultProvider(network, sourceChain, ci); const provider = getDefaultProvider(network, sourceChain, ci);
// signers // signers
const oracleDeployer = new ethers.Wallet(PRIVATE_KEY, provider); const oracleDeployer = new ethers.Wallet(PRIVATE_KEY, provider);
const deliveryProviderAddress = addressInfo.mockDeliveryProviderAddress; const deliveryProviderAddress = addressInfo.mockDeliveryProviderAddress;
if (!deliveryProviderAddress) throw Error("No relay provider address"); if (!deliveryProviderAddress) throw Error("No relay provider address");
const deliveryProvider = DeliveryProvider__factory.connect( const deliveryProvider = DeliveryProvider__factory.connect(
deliveryProviderAddress, deliveryProviderAddress,
@ -36,7 +42,7 @@ describe("Relay Provider Test", () => {
); );
describe("Read Prices Correctly", () => { describe("Read Prices Correctly", () => {
test("readPrices", async () => { testIfDevnet()("readPrices", async () => {
const tokenPrice = ethers.BigNumber.from("100000"); const tokenPrice = ethers.BigNumber.from("100000");
const gasPrice = ethers.utils.parseUnits("300", "gwei"); const gasPrice = ethers.utils.parseUnits("300", "gwei");

View File

@ -6,7 +6,7 @@ import {
Environment, Environment,
} from "../../../token_bridge/__tests__/utils/consts"; } from "../../../token_bridge/__tests__/utils/consts";
const SAFE_RELAY_DELAY = 10000; const SAFE_RELAY_DELAY = 15000;
const characters = const characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

View File

@ -49,8 +49,10 @@ import { getSignedVAAWithRetry } from "../../rpc";
const network: Network = getNetwork(); const network: Network = getNetwork();
const ci: boolean = isCI(); const ci: boolean = isCI();
const sourceChain = network == "DEVNET" ? "ethereum" : "avalanche"; const sourceChain = network == "DEVNET" ? "ethereum" : "celo";
const targetChain = network == "DEVNET" ? "bsc" : "celo"; const targetChain = network == "DEVNET" ? "bsc" : "avalanche";
const testIfDevnet = () => (network == "DEVNET" ? test : test.skip);
type TestChain = { type TestChain = {
chainId: ChainId; chainId: ChainId;
@ -71,6 +73,13 @@ const createTestChain = (name: ChainName) => {
addressInfo.wormholeRelayerAddress = addressInfo.wormholeRelayerAddress =
"0x53855d4b64E9A3CF59A84bc768adA716B5536BC5"; "0x53855d4b64E9A3CF59A84bc768adA716B5536BC5";
} }
if (network == "MAINNET")
addressInfo.mockIntegrationAddress =
"0xa507Ff8D183D2BEcc9Ff9F82DFeF4b074e1d0E05";
if (network == "MAINNET")
addressInfo.mockDeliveryProviderAddress =
"0x7A0a53847776f7e94Cc35742971aCb2217b0Db81";
if (!addressInfo.wormholeRelayerAddress) if (!addressInfo.wormholeRelayerAddress)
throw Error(`No core relayer address for ${name}`); throw Error(`No core relayer address for ${name}`);
if (!addressInfo.mockIntegrationAddress) if (!addressInfo.mockIntegrationAddress)
@ -169,7 +178,7 @@ const testSend = async (
0, 0,
{ value, gasLimit: REASONABLE_GAS_LIMIT } { value, gasLimit: REASONABLE_GAS_LIMIT }
); );
console.log("Sent delivery request!"); console.log(`Sent delivery request! Transaction hash ${tx.hash}`);
await tx.wait(); await tx.wait();
console.log("Message confirmed!"); console.log("Message confirmed!");
@ -205,7 +214,7 @@ const testForward = async (
valueNeededOnTargetChain, valueNeededOnTargetChain,
{ value: value, gasLimit: REASONABLE_GAS_LIMIT } { value: value, gasLimit: REASONABLE_GAS_LIMIT }
); );
console.log("Sent delivery request!"); console.log(`Sent delivery request! Transaction hash ${tx.hash}`);
await tx.wait(); await tx.wait();
console.log("Message confirmed!"); console.log("Message confirmed!");
@ -230,6 +239,58 @@ describe("Wormhole Relayer Tests", () => {
expect(message).toBe(arbitraryPayload); expect(message).toBe(arbitraryPayload);
}); });
test("Executes a Delivery Success With Additional VAAs", async () => {
const arbitraryPayload = getArbitraryBytes32();
console.log(`Sent message: ${arbitraryPayload}`);
const wormhole = Implementation__factory.connect(
CONTRACTS[network][sourceChain].core || "",
source.wallet
);
const deliverySeq = await wormhole.nextSequence(source.wallet.address);
const msgTx = await wormhole.publishMessage(0, arbitraryPayload, 200);
await msgTx.wait();
const value = await relayer.getPrice(
sourceChain,
targetChain,
REASONABLE_GAS_LIMIT * 2,
optionalParams
);
console.log(`Quoted gas delivery fee: ${value}`);
const tx = await source.mockIntegration.sendMessageWithAdditionalVaas(
[],
target.chainId,
REASONABLE_GAS_LIMIT * 2,
0,
[
relayer.createVaaKey(
source.chainId,
Buffer.from(tryNativeToUint8Array(source.wallet.address, "ethereum")),
deliverySeq
),
],
{ value }
);
console.log(`Sent tx hash: ${tx.hash}`);
const rx = await tx.wait();
await waitForRelay();
console.log("Checking status using SDK");
const status = await getStatus(tx.hash);
expect(status).toBe("Delivery Success");
console.log("Checking if message was relayed");
const message = (await target.mockIntegration.getDeliveryData())
.additionalVaas[0];
const parsedMessage = await wormhole.parseVM(message);
expect(parsedMessage.payload).toBe(arbitraryPayload);
});
test("Executes a Delivery Success with manual delivery", async () => { test("Executes a Delivery Success with manual delivery", async () => {
const arbitraryPayload = getArbitraryBytes32(); const arbitraryPayload = getArbitraryBytes32();
console.log(`Sent message: ${arbitraryPayload}`); console.log(`Sent message: ${arbitraryPayload}`);
@ -356,7 +417,7 @@ describe("Wormhole Relayer Tests", () => {
expect(message2).toBe(arbitraryPayload2); expect(message2).toBe(arbitraryPayload2);
}); });
test("Executes a Forward Request Failure", async () => { testIfDevnet()("Executes a Forward Request Failure", async () => {
const arbitraryPayload1 = getArbitraryBytes32(); const arbitraryPayload1 = getArbitraryBytes32();
const arbitraryPayload2 = getArbitraryBytes32(); const arbitraryPayload2 = getArbitraryBytes32();
console.log( console.log(
@ -381,7 +442,7 @@ describe("Wormhole Relayer Tests", () => {
expect(message2).not.toBe(arbitraryPayload2); expect(message2).not.toBe(arbitraryPayload2);
}); });
test("Test getPrice in Typescript SDK", async () => { testIfDevnet()("Test getPrice in Typescript SDK", async () => {
const price = await relayer.getPrice( const price = await relayer.getPrice(
sourceChain, sourceChain,
targetChain, targetChain,
@ -541,7 +602,7 @@ describe("Wormhole Relayer Tests", () => {
// GOVERNANCE TESTS // GOVERNANCE TESTS
test("Governance: Test Registering Chain", async () => { testIfDevnet()("Governance: Test Registering Chain", async () => {
const chain = 24; const chain = 24;
const currentAddress = const currentAddress =
@ -578,63 +639,68 @@ describe("Wormhole Relayer Tests", () => {
expect(newRegisteredAddress).toBe(expectedNewRegisteredAddress); expect(newRegisteredAddress).toBe(expectedNewRegisteredAddress);
}); });
test("Governance: Test Setting Default Relay Provider", async () => { testIfDevnet()(
const currentAddress = "Governance: Test Setting Default Relay Provider",
await source.wormholeRelayer.getDefaultDeliveryProvider(); async () => {
console.log( const currentAddress =
`For Chain ${source.chainId}, default relay provider: ${currentAddress}` await source.wormholeRelayer.getDefaultDeliveryProvider();
); console.log(
`For Chain ${source.chainId}, default relay provider: ${currentAddress}`
);
const expectedNewDefaultDeliveryProvider = const expectedNewDefaultDeliveryProvider =
"0x1234567890123456789012345678901234567892"; "0x1234567890123456789012345678901234567892";
const timestamp = (await source.wallet.provider.getBlock("latest")) const timestamp = (await source.wallet.provider.getBlock("latest"))
.timestamp; .timestamp;
const chain = source.chainId; const chain = source.chainId;
const firstMessage = const firstMessage =
governance.publishWormholeRelayerSetDefaultDeliveryProvider( governance.publishWormholeRelayerSetDefaultDeliveryProvider(
timestamp, timestamp,
chain, chain,
expectedNewDefaultDeliveryProvider
);
const firstSignedVaa = guardians.addSignatures(
firstMessage,
guardianIndices
);
let tx = await source.wormholeRelayer.setDefaultDeliveryProvider(
firstSignedVaa
);
await tx.wait();
const newDefaultDeliveryProvider =
await source.wormholeRelayer.getDefaultDeliveryProvider();
expect(newDefaultDeliveryProvider).toBe(
expectedNewDefaultDeliveryProvider expectedNewDefaultDeliveryProvider
); );
const firstSignedVaa = guardians.addSignatures(
firstMessage,
guardianIndices
);
let tx = await source.wormholeRelayer.setDefaultDeliveryProvider( const inverseFirstMessage =
firstSignedVaa governance.publishWormholeRelayerSetDefaultDeliveryProvider(
); timestamp,
await tx.wait(); chain,
currentAddress
const newDefaultDeliveryProvider = );
await source.wormholeRelayer.getDefaultDeliveryProvider(); const inverseFirstSignedVaa = guardians.addSignatures(
inverseFirstMessage,
expect(newDefaultDeliveryProvider).toBe(expectedNewDefaultDeliveryProvider); guardianIndices
const inverseFirstMessage =
governance.publishWormholeRelayerSetDefaultDeliveryProvider(
timestamp,
chain,
currentAddress
); );
const inverseFirstSignedVaa = guardians.addSignatures(
inverseFirstMessage,
guardianIndices
);
tx = await source.wormholeRelayer.setDefaultDeliveryProvider( tx = await source.wormholeRelayer.setDefaultDeliveryProvider(
inverseFirstSignedVaa inverseFirstSignedVaa
); );
await tx.wait(); await tx.wait();
const originalDefaultDeliveryProvider = const originalDefaultDeliveryProvider =
await source.wormholeRelayer.getDefaultDeliveryProvider(); await source.wormholeRelayer.getDefaultDeliveryProvider();
expect(originalDefaultDeliveryProvider).toBe(currentAddress); expect(originalDefaultDeliveryProvider).toBe(currentAddress);
}); }
);
test("Governance: Test Upgrading Contract", async () => { testIfDevnet()("Governance: Test Upgrading Contract", async () => {
const IMPLEMENTATION_STORAGE_SLOT = const IMPLEMENTATION_STORAGE_SLOT =
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";