Skip to content

Commit

Permalink
Chore(entropy) deploy on abstract (#2056)
Browse files Browse the repository at this point in the history
* initial commit

* Deployed cronos zk testnet

* udpated scripts

* chore(entropy) Deploy on abstract

* requested changes
  • Loading branch information
aditya520 authored Oct 25, 2024
1 parent 9487848 commit ed31243
Show file tree
Hide file tree
Showing 9 changed files with 266 additions and 48 deletions.
2 changes: 1 addition & 1 deletion contract_manager/store/chains/EvmChains.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@
- id: cronos_zkevm_testnet
mainnet: false
rpcUrl: https://testnet.zkevm.cronos.org
networkId: 282
networkId: 240
type: EvmChain
- id: reya_testnet
mainnet: false
Expand Down
3 changes: 3 additions & 0 deletions contract_manager/store/contracts/EvmEntropyContracts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,6 @@
- chain: sanko_testnet
address: "0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb"
type: EvmEntropyContract
- chain: abstract_testnet
address: "0x858687fD592112f7046E394A3Bf10D0C11fF9e63"
type: EvmEntropyContract
6 changes: 3 additions & 3 deletions contract_manager/store/contracts/EvmPriceFeedContracts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -361,15 +361,15 @@
- chain: kinto
address: "0x2880aB155794e7179c9eE2e38200202908C17B43"
type: EvmPriceFeedContract
- chain: cronos_zkevm_testnet
address: "0x67DFF3D12dFDCeC9f85fd86f4cBDb0a111fF721A"
type: EvmPriceFeedContract
- chain: reya_testnet
address: "0x2880aB155794e7179c9eE2e38200202908C17B43"
type: EvmPriceFeedContract
- chain: cronos_zkevm_mainnet
address: "0x056f829183Ec806A78c26C98961678c24faB71af"
type: EvmPriceFeedContract
- chain: cronos_zkevm_testnet
address: "0xB1DB1498902F08E16E11F1a423ec9CCB9537E1D6"
type: EvmPriceFeedContract
- chain: movement_evm_devnet_imola
address: "0x2880aB155794e7179c9eE2e38200202908C17B43"
type: EvmPriceFeedContract
Expand Down
6 changes: 3 additions & 3 deletions contract_manager/store/contracts/EvmWormholeContracts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -349,9 +349,6 @@
- chain: kinto
address: "0xb27e5ca259702f209a29225d0eDdC131039C9933"
type: EvmWormholeContract
- chain: cronos_zkevm_testnet
address: "0x3f5bB93eEC6E3D6784274291A5816Bc34E851dc8"
type: EvmWormholeContract
- chain: reya_testnet
address: "0xb27e5ca259702f209a29225d0eDdC131039C9933"
type: EvmWormholeContract
Expand All @@ -361,6 +358,9 @@
- chain: cronos_zkevm_mainnet
address: "0xc10F5BE78E464BB0E1f534D66E5A6ecaB150aEFa"
type: EvmWormholeContract
- chain: cronos_zkevm_testnet
address: "0x470d1c91b1b1d9295815A2357FB0D20E7350ab71"
type: EvmWormholeContract
- chain: movement_evm_devnet_imola
address: "0xb27e5ca259702f209a29225d0eDdC131039C9933"
type: EvmWormholeContract
Expand Down
2 changes: 1 addition & 1 deletion target_chains/ethereum/contracts/.env.template
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Network Config
MIGRATIONS_DIR= # ./migrations/prod-receiver
MIGRATIONS_NETWORK= # xyz

MAINNET=

# The duration that a price feed stored in the contract is considered to be
# valid, after this duration, the price feed is stale and will be invalid.
Expand Down
166 changes: 166 additions & 0 deletions target_chains/ethereum/contracts/deploy/zkSyncDeployEntropy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
require("dotenv").config({ path: ".env" });
import { utils, Wallet } from "zksync-web3";
import { HardhatRuntimeEnvironment } from "hardhat/types";
import { Deployer } from "@matterlabs/hardhat-zksync-deploy";
import { CHAINS } from "@pythnetwork/xc-admin-common";
import { assert } from "chai";
import {
DefaultStore,
EvmChain,
EvmEntropyContract,
EvmWormholeContract,
ENTROPY_DEFAULT_PROVIDER,
} from "@pythnetwork/contract-manager";
import {
findWormholeContract,
deployWormholeContract,
} from "./zkSyncDeployWormhole";

// import {Wallet as ZkWallet} from "zksync-ethers"; // Use These packages if "zksync-web3" doesn't work
// import { Deployer as ZkDeployer } from "@matterlabs/hardhat-zksync";

const { getDefaultConfig } = require("../scripts/contractManagerConfig");

function envOrErr(name: string): string {
const res = process.env[name];
if (res === undefined) {
throw new Error(`${name} environment variable is not set.`);
}
return res;
}

export default async function (hre: HardhatRuntimeEnvironment) {
// Initialize the wallet.
const wallet = Wallet.fromMnemonic(envOrErr("MNEMONIC"));
const isMainnet = envOrErr("MAINNET") === "true";

// Create deployer object and load the artifact of the contract we want to deploy.
const deployer = new Deployer(hre, wallet);

const {
wormholeGovernanceChainId,
wormholeGovernanceContract,
wormholeInitialSigners,
governanceEmitter,
governanceChainId,
chainName,
} = getDefaultConfig(envOrErr("MIGRATIONS_NETWORK"));

const wormholeReceiverChainId = CHAINS[chainName];
assert(wormholeReceiverChainId !== undefined);

let wormholeReceiverContractAddress = await findWormholeContract(chainName);
if (!wormholeReceiverContractAddress) {
console.log(`Wormhole contract not found for chain ${chainName}`);
console.log("Deploying Wormhole contract...");
wormholeReceiverContractAddress = await deployWormholeContract(
deployer,
chainName,
wormholeGovernanceChainId,
wormholeGovernanceContract,
wormholeInitialSigners,
wormholeReceiverChainId
);
}

console.log(
"WormholeReceiver contract address:",
wormholeReceiverContractAddress
);

// // TODO: Top up accounts if necessary

const executorContractAddress = await deployExecutorContract(
deployer,
wormholeReceiverContractAddress,
wormholeReceiverChainId,
governanceChainId,
governanceEmitter
);

console.log("Executor contract address:", executorContractAddress);

const entropyContractAddress = await deployEntropyContract(
deployer,
executorContractAddress,
wormholeReceiverChainId,
isMainnet
);

console.log("Entropy contract address:", entropyContractAddress);

console.log("Saving the contract in the store...");
const contract = new EvmEntropyContract(chainName, entropyContractAddress);
DefaultStore.entropy_contracts[contract.getId()] = contract;
DefaultStore.saveAllContracts();
}

async function deployExecutorContract(
deployer: Deployer,
wormholeReceiverContractAddress: string,
wormholeReceiverChainId: number,
governanceChainId: string,
governanceEmitter: string
) {
const executorImplArtifact = await deployer.loadArtifact(
"ExecutorUpgradable"
);
const executorImplContract = await deployer.deploy(executorImplArtifact);
console.log(
"Deployed ExecutorImpl contract on",
executorImplContract.address
);

const executorInitData = executorImplContract.interface.encodeFunctionData(
"initialize",
[
wormholeReceiverContractAddress,
0, // lastExecutedSequence,
wormholeReceiverChainId,
governanceChainId,
governanceEmitter,
]
);

const executorProxyArtifact = await deployer.loadArtifact("ERC1967Proxy");

const executorProxyContract = await deployer.deploy(executorProxyArtifact, [
executorImplContract.address,
executorInitData,
]);

console.log(`Deployed Executor contract on ${executorProxyContract.address}`);

return executorProxyContract.address;
}

async function deployEntropyContract(
deployer: Deployer,
executorContractAddress: string,
chainId: number,
isMainnet: boolean
) {
const entropyImplArtifact = await deployer.loadArtifact("EntropyUpgradable");
const entropyImplContract = await deployer.deploy(entropyImplArtifact);

const entropyInitData = entropyImplContract.interface.encodeFunctionData(
"initialize",
[
executorContractAddress,
executorContractAddress,
1, // pythFeeInWei
isMainnet
? ENTROPY_DEFAULT_PROVIDER.mainnet
: ENTROPY_DEFAULT_PROVIDER.testnet,
true,
]
);

const entropyProxyArtifact = await deployer.loadArtifact("ERC1967Proxy");
const entropyProxyContract = await deployer.deploy(entropyProxyArtifact, [
entropyImplContract.address,
entropyInitData,
]);

return entropyProxyContract.address;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import { Deployer } from "@matterlabs/hardhat-zksync-deploy";
import { CHAINS } from "@pythnetwork/xc-admin-common";
import { assert } from "chai";
import { writeFileSync } from "fs";
import {
deployWormholeContract,
findWormholeContract,
} from "./zkSyncDeployWormhole";
// import {Wallet as ZkWallet} from "zksync-ethers"; // Use These packages if "zksync-web3" doesn't work
// import { Deployer as ZkDeployer } from "@matterlabs/hardhat-zksync";

Expand Down Expand Up @@ -49,50 +53,23 @@ export default async function (hre: HardhatRuntimeEnvironment) {
emitterChainIds,
} = getDefaultConfig(envOrErr("MIGRATIONS_NETWORK"));
const chainName = envOrErr("MIGRATIONS_NETWORK");

const wormholeReceiverChainId = CHAINS[chainName];
assert(wormholeReceiverChainId !== undefined);

const receiverSetupArtifact = await deployer.loadArtifact("ReceiverSetup");
const receiverImplArtifact = await deployer.loadArtifact(
"ReceiverImplementation"
);
const wormholeReceiverArtifact = await deployer.loadArtifact(
"WormholeReceiver"
);

console.log("Deploying WormholeReceiver contract...");
const receiverSetupContract = await deployer.deploy(receiverSetupArtifact);
console.log("Deployed ReceiverSetup on", receiverSetupContract.address);

console.log("Deploying ReceiverImplementation contract...");
// deploy implementation
const receiverImplContract = await deployer.deploy(receiverImplArtifact);
console.log(
"Deployed ReceiverImplementation on",
receiverImplContract.address
);

// encode initialisation data
const whInitData = receiverSetupContract.interface.encodeFunctionData(
"setup",
[
receiverImplContract.address,
wormholeInitialSigners,
let wormholeReceiverContractAddress = await findWormholeContract(chainName);
if (!wormholeReceiverContractAddress) {
console.log(`Wormhole contract not found for chain ${chainName}`);
console.log("Deploying Wormhole contract...");
wormholeReceiverContractAddress = await deployWormholeContract(
deployer,
chainName,
wormholeReceiverChainId,
wormholeGovernanceChainId,
wormholeGovernanceContract,
]
);

// deploy proxy
const wormholeReceiverContract = await deployer.deploy(
wormholeReceiverArtifact,
[receiverSetupContract.address, whInitData]
);

console.log(
`Deployed WormholeReceiver on ${wormholeReceiverContract.address}`
);
wormholeInitialSigners
);
}

// Hardcoding the initial sequence number for governance messages.
const governanceInitialSequence = Number("0");
Expand All @@ -110,7 +87,7 @@ export default async function (hre: HardhatRuntimeEnvironment) {
const pythInitData = pythImplContract.interface.encodeFunctionData(
"initialize",
[
wormholeReceiverContract.address,
wormholeReceiverContractAddress,
emitterChainIds,
emitterAddresses,
governanceChainId,
Expand Down
72 changes: 72 additions & 0 deletions target_chains/ethereum/contracts/deploy/zkSyncDeployWormhole.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import {
DefaultStore,
EvmChain,
EvmWormholeContract,
} from "@pythnetwork/contract-manager";
import { Deployer } from "@matterlabs/hardhat-zksync-deploy";
import { CHAINS } from "@pythnetwork/xc-admin-common";
import { assert } from "chai";

export function findWormholeContract(chainId: string): string | undefined {
for (const contract of Object.values(DefaultStore.wormhole_contracts)) {
if (
contract instanceof EvmWormholeContract &&
contract.getChain().getId() === chainId
) {
return contract.address;
}
}
}

export async function deployWormholeContract(
deployer: Deployer,
chainName: string,
wormholeGovernanceChainId: string,
wormholeGovernanceContract: string,
wormholeInitialSigners: string[],
wormholeReceiverChainId: number
): Promise<string> {
const receiverSetupArtifact = await deployer.loadArtifact("ReceiverSetup");
const receiverImplArtifact = await deployer.loadArtifact(
"ReceiverImplementation"
);
const wormholeReceiverArtifact = await deployer.loadArtifact(
"WormholeReceiver"
);
console.log("Deploying WormholeReceiver contract...");

const receiverSetupContract = await deployer.deploy(receiverSetupArtifact);
console.log("Deployed ReceiverSetup on", receiverSetupContract.address);
console.log("Deploying ReceiverImplementation contract...");

// deploy implementation
const receiverImplContract = await deployer.deploy(receiverImplArtifact);
console.log(
"Deployed ReceiverImplementation on",
receiverImplContract.address
);

// encode initialisation data
const whInitData = receiverSetupContract.interface.encodeFunctionData(
"setup",
[
receiverImplContract.address,
wormholeInitialSigners,
wormholeReceiverChainId,
wormholeGovernanceChainId,
wormholeGovernanceContract,
]
);

// deploy proxy
const wormholeReceiverContract = await deployer.deploy(
wormholeReceiverArtifact,
[receiverSetupContract.address, whInitData]
);

console.log(
`Deployed WormholeReceiver on ${wormholeReceiverContract.address}`
);

return wormholeReceiverContract.address;
}
2 changes: 1 addition & 1 deletion target_chains/ethereum/sdk/js/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export const CONTRACT_ADDR: Record<string, string> = {
conflux_espace_testnet: "0xDd24F84d36BF92C65F92307595335bdFab5Bbd21",
core_dao_testnet: "0x8D254a21b3C86D32F7179855531CE99164721933",
cronos_testnet: "0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320",
cronos_zkevm_testnet: "0x67DFF3D12dFDCeC9f85fd86f4cBDb0a111fF721A",
cronos_zkevm_testnet: "0xB1DB1498902F08E16E11F1a423ec9CCB9537E1D6",
dela_deperp_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729",
dela_mithreum_deperp_testnet: "0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc",
etherlink_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43",
Expand Down

0 comments on commit ed31243

Please sign in to comment.