69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
|
import fs from 'fs';
|
||
|
import ethers from 'ethers';
|
||
|
import { promisify } from "util";
|
||
|
const exec = promisify(require("child_process").exec);
|
||
|
|
||
|
export class EVMMessenger{
|
||
|
rpc:string;
|
||
|
coreBridge:string;
|
||
|
deployedAddress: string;
|
||
|
|
||
|
constructor(nodeUrl:string, wormholeCoreBridge:string, deployedAddress?:string) {
|
||
|
this.rpc = nodeUrl;
|
||
|
this.coreBridge = wormholeCoreBridge;
|
||
|
this.deployedAddress = deployedAddress as string;
|
||
|
}
|
||
|
|
||
|
public async deploy(networkName:string, privateKey:string) {
|
||
|
let cmd = `cd chains/evm && forge build && forge create --legacy --rpc-url ${this.rpc} --private-key ${privateKey} src/Messenger.sol:Messenger --constructor-args ${this.coreBridge} && exit`;
|
||
|
const { stdout, stderr } = await exec(cmd);
|
||
|
console.log(stdout);
|
||
|
|
||
|
const deploymentAddress = stdout
|
||
|
.split("Deployed to: ")[1]
|
||
|
.split("\n")[0]
|
||
|
.trim();
|
||
|
|
||
|
let config = JSON.parse(fs.readFileSync('./xdapp.config.json').toString());
|
||
|
config.networks[networkName].deployedAddress = deploymentAddress;
|
||
|
fs.writeFileSync('./xdapp.config.json', JSON.stringify(config, null, 2));
|
||
|
this.deployedAddress = deploymentAddress;
|
||
|
}
|
||
|
|
||
|
public getContract(): ethers.Contract {
|
||
|
const messenger = new ethers.Contract(
|
||
|
this.deployedAddress,
|
||
|
JSON.parse(
|
||
|
fs.readFileSync("./chains/evm/out/Messenger.sol/Messenger.json").toString()
|
||
|
).abi,
|
||
|
)
|
||
|
|
||
|
// let tx = messenger.registerApplicationContracts(
|
||
|
// chainID,
|
||
|
// foreignAddress
|
||
|
// );
|
||
|
|
||
|
return messenger;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
const signer = new ethers.Wallet(srcNetwork.privateKey).connect(
|
||
|
new ethers.providers.JsonRpcProvider(srcNetwork.rpc)
|
||
|
);
|
||
|
const messenger = new ethers.Contract(
|
||
|
srcDeploymentInfo.address,
|
||
|
JSON.parse(
|
||
|
fs
|
||
|
.readFileSync(
|
||
|
"./chains/evm/out/Messenger.sol/Messenger.json"
|
||
|
)
|
||
|
.toString()
|
||
|
).abi,
|
||
|
signer
|
||
|
);
|
||
|
const tx = await messenger.registerApplicationContracts(
|
||
|
targetNetwork.wormholeChainId,
|
||
|
emitterBuffer
|
||
|
); */
|