173 lines
4.5 KiB
TypeScript
173 lines
4.5 KiB
TypeScript
const nearAPI = require("near-api-js");
|
|
const BN = require("bn.js");
|
|
const bs58 = require("bs58");
|
|
const fs = require("fs");
|
|
const fetch = require("node-fetch");
|
|
import { NodeHttpTransport } from "@improbable-eng/grpc-web-node-http-transport";
|
|
const { createHash } = require('crypto');
|
|
import { TestLib } from "./testlib";
|
|
|
|
|
|
import {
|
|
ChainId,
|
|
CHAIN_ID_NEAR,
|
|
} from "@certusone/wormhole-sdk/lib/cjs/utils";
|
|
|
|
function getConfig(env: any) {
|
|
switch (env) {
|
|
case "sandbox":
|
|
case "local":
|
|
return {
|
|
networkId: "sandbox",
|
|
nodeUrl: "http://localhost:3030",
|
|
masterAccount: "test.near",
|
|
wormholeAccount: "wormhole.test.near",
|
|
tokenAccount: "token.test.near",
|
|
userAccount:
|
|
Math.floor(Math.random() * 10000).toString() + "user.test.near",
|
|
};
|
|
}
|
|
return {};
|
|
}
|
|
|
|
function hash(string: any) {
|
|
return createHash('sha256').update(string).digest('hex');
|
|
}
|
|
|
|
async function testDeploy() {
|
|
let config = getConfig(process.env.NEAR_ENV || "sandbox");
|
|
|
|
// Retrieve the validator key directly in the Tilt environment
|
|
const response = await fetch("http://localhost:3031/validator_key.json");
|
|
|
|
const keyFile = await response.json();
|
|
|
|
let masterKey = nearAPI.utils.KeyPair.fromString(
|
|
keyFile.secret_key || keyFile.private_key
|
|
);
|
|
let masterPubKey = masterKey.getPublicKey();
|
|
|
|
let keyStore = new nearAPI.keyStores.InMemoryKeyStore();
|
|
keyStore.setKey(config.networkId, config.masterAccount, masterKey);
|
|
|
|
let near = await nearAPI.connect({
|
|
deps: {
|
|
keyStore,
|
|
},
|
|
networkId: config.networkId,
|
|
nodeUrl: config.nodeUrl,
|
|
});
|
|
let masterAccount = new nearAPI.Account(
|
|
near.connection,
|
|
config.masterAccount
|
|
);
|
|
|
|
console.log(
|
|
"Finish init NEAR masterAccount: " +
|
|
JSON.stringify(await masterAccount.getAccountBalance())
|
|
);
|
|
|
|
let userKey = nearAPI.utils.KeyPair.fromRandom("ed25519");
|
|
|
|
console.log(
|
|
"creating a user account: " +
|
|
config.userAccount +
|
|
" with key " +
|
|
userKey.getPublicKey()
|
|
);
|
|
|
|
await masterAccount.createAccount(
|
|
config.userAccount,
|
|
userKey.getPublicKey(),
|
|
new BN(10).pow(new BN(27))
|
|
);
|
|
|
|
// A whole new world...
|
|
keyStore = new nearAPI.keyStores.InMemoryKeyStore();
|
|
keyStore.setKey(config.networkId, config.userAccount, userKey);
|
|
|
|
near = await nearAPI.connect({
|
|
deps: {
|
|
keyStore,
|
|
},
|
|
networkId: config.networkId,
|
|
nodeUrl: config.nodeUrl,
|
|
});
|
|
|
|
const userAccount = new nearAPI.Account(near.connection, config.userAccount);
|
|
|
|
const wormholeContract = await fs.readFileSync(
|
|
"../contracts/wormhole/target/wasm32-unknown-unknown/release/near_wormhole.wasm"
|
|
);
|
|
|
|
let h = hash(wormholeContract);
|
|
|
|
let ts = new TestLib();
|
|
let seq = 1;
|
|
let vaa = ts.genCoreUpdate(ts.singleGuardianPrivKey, 0, 0, seq, CHAIN_ID_NEAR, h);
|
|
|
|
let wormholeAccount = new nearAPI.Account(
|
|
near.connection,
|
|
config.wormholeAccount
|
|
);
|
|
|
|
console.log("submitting vaa");
|
|
let result = await userAccount.functionCall({
|
|
contractId: config.wormholeAccount,
|
|
methodName: "submit_vaa",
|
|
args: { vaa: vaa },
|
|
attachedDeposit: "12500000000000000000000",
|
|
gas: new BN("150000000000000"),
|
|
});
|
|
|
|
console.log("calling upgradeContract");
|
|
|
|
result = await userAccount.functionCall({
|
|
contractId: config.wormholeAccount,
|
|
methodName: "update_contract",
|
|
args: wormholeContract,
|
|
attachedDeposit: "5279790000000000000000000",
|
|
gas: 300000000000000,
|
|
});
|
|
console.log("done");
|
|
|
|
const tokenContract = await fs.readFileSync(
|
|
"../contracts/token-bridge/target/wasm32-unknown-unknown/release/near_token_bridge.wasm"
|
|
);
|
|
|
|
h = hash(tokenContract);
|
|
seq = seq + 1
|
|
vaa = ts.genTokenUpdate(ts.singleGuardianPrivKey, 0, 0, seq, CHAIN_ID_NEAR, h);
|
|
|
|
console.log("submitting vaa");
|
|
result = await userAccount.functionCall({
|
|
contractId: config.tokenAccount,
|
|
methodName: "submit_vaa",
|
|
args: { vaa: vaa },
|
|
attachedDeposit: "12500000000000000000000",
|
|
gas: new BN("150000000000000"),
|
|
});
|
|
|
|
console.log("submitting vaa again");
|
|
result = await userAccount.functionCall({
|
|
contractId: config.tokenAccount,
|
|
methodName: "submit_vaa",
|
|
args: { vaa: vaa },
|
|
attachedDeposit: "12500000000000000000000",
|
|
gas: new BN("150000000000000"),
|
|
});
|
|
|
|
console.log("calling upgradeContract on the token bridge");
|
|
|
|
result = await userAccount.functionCall({
|
|
contractId: config.tokenAccount,
|
|
methodName: "update_contract",
|
|
args: tokenContract,
|
|
attachedDeposit: "22797900000000000000000000",
|
|
gas: 300000000000000,
|
|
});
|
|
|
|
}
|
|
|
|
testDeploy();
|