wormhole/testing/weth-switch/test.js

63 lines
2.2 KiB
JavaScript

// This test is intended to be run on devnet without an active eth miner
// see https://github.com/trufflesuite/ganache-cli-archive#custom-methods
const {
NodeHttpTransport,
} = require("@improbable-eng/grpc-web-node-http-transport");
const { ethers } = require("ethers");
const { parseUnits } = require("ethers/lib/utils");
const {
approveEth,
transferFromEth,
CHAIN_ID_BSC,
CHAIN_ID_ETH,
hexToUint8Array,
nativeToHexString,
parseSequenceFromLogEth,
getEmitterAddressEth,
getSignedVAA,
BridgeImplementation__factory,
} = require("@certusone/wormhole-sdk");
const BSC_NODE_URL = "ws://localhost:8546";
const ETH_NODE_URL = "ws://localhost:8545";
const ETH_PRIVATE_KEY =
"0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d";
const ETH_TOKEN_BRIDGE_ADDRESS = "0x0290FB167208Af455bB137780163b7B7a9a10C16";
// see https://eips.ethereum.org/EIPS/eip-1967#logic-contract-address
const LOGIC_CONTRACT_STORAGE =
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";
const SIGNED_VAA =
"010000000001003fd2219eed5b1a433120cf3edc37ab6c28f86222aa552e294e175e7e42ff32301c5c936b16ae6470bdfedbe9d7cdb50e664aac1e19da8489a7369caa7e1b5439010000000100000001000100000000000000000000000000000000000000000000000000000000000000040000000002a0518100000000000000000000000000000000000000000000546f6b656e427269646765020002000000000000000000000000daa71fbba28c946258dd3d5fcc9001401f72270f";
(async () => {
// create a signer for Eth
const provider = new ethers.providers.WebSocketProvider(ETH_NODE_URL);
const signer = new ethers.Wallet(ETH_PRIVATE_KEY, provider);
const tokenBridge = BridgeImplementation__factory.connect(
ETH_TOKEN_BRIDGE_ADDRESS,
signer
);
console.log(
"OLD IMPL",
await provider.getStorageAt(
ETH_TOKEN_BRIDGE_ADDRESS,
LOGIC_CONTRACT_STORAGE
)
);
console.log("OLD WETH", await tokenBridge.WETH());
console.log("UPGRADING...");
await tokenBridge.upgrade("0x" + SIGNED_VAA);
console.log("SUCCESS!");
console.log(
"NEW IMPL",
await provider.getStorageAt(
ETH_TOKEN_BRIDGE_ADDRESS,
LOGIC_CONTRACT_STORAGE
)
);
console.log("NEW WETH", await tokenBridge.WETH());
provider.destroy();
})();