Skip to content

Commit

Permalink
update deploy zklink scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
zkcarter committed Aug 30, 2023
1 parent cc16311 commit a496bfa
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 14 deletions.
4 changes: 4 additions & 0 deletions scripts/deploy_log_name.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ const DEPLOY_LOG_VERIFIER_CLASS_HASH = "verifierClassHash";
const DEPLOY_LOG_VERIFIER = "verifier";
const DEPLOY_LOG_VERIFIER_VERIFIED = "verifierVerified";
const DEPLOY_LOG_VERIFIER_TRANSFER_MASTER_TX_HASH = "verifiertransferMasterTxHash";
const DEPLOY_LOG_VERIFIER_ADDUPGRADEABLE_TX_HASH = "verifierAddUpgradeableTxHash";
const DEPLOY_LOG_ZKLINK_CLASS_HASH = "zkLinkClassHash";
const DEPLOY_LOG_ZKLINK = "zkLink";
const DEPLOY_LOG_ZKLINK_VERIFIED = "zkLinkVerified";
const DEPLOY_LOG_ZKLINK_TRANSFER_MASTER_TX_HASH = "zkLinktransferMasterTxHash";
const DEPLOY_LOG_ZKLINK_ADDUPGRADEABLE_TX_HASH = "zkLinkAddUpgradeableTxHash";
const DEPLOY_LOG_ZKLINK_SET_VALIDATOR_TX_HASH = "zkLinkSetValidatorTxHash";
const DEPLOY_LOG_GATEKEEPER = "gatekeeper";
const DEPLOY_LOG_GATEKEEPER_CLASS_HASH = "gatekeeperClassHash";
Expand Down Expand Up @@ -44,10 +46,12 @@ export var logName = {
DEPLOY_LOG_VERIFIER,
DEPLOY_LOG_VERIFIER_VERIFIED,
DEPLOY_LOG_VERIFIER_TRANSFER_MASTER_TX_HASH,
DEPLOY_LOG_VERIFIER_ADDUPGRADEABLE_TX_HASH,
DEPLOY_LOG_ZKLINK_CLASS_HASH,
DEPLOY_LOG_ZKLINK,
DEPLOY_LOG_ZKLINK_VERIFIED,
DEPLOY_LOG_ZKLINK_TRANSFER_MASTER_TX_HASH,
DEPLOY_LOG_ZKLINK_ADDUPGRADEABLE_TX_HASH,
DEPLOY_LOG_ZKLINK_SET_VALIDATOR_TX_HASH,
DEPLOY_LOG_GATEKEEPER,
DEPLOY_LOG_GATEKEEPER_CLASS_HASH,
Expand Down
44 changes: 36 additions & 8 deletions scripts/deploy_zklink.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ program

async function declare_zklink() {
const { deployLogPath, deployLog } = getDeployLog(logName.DEPLOY_ZKLINK_LOG_PREFIX);
let { provider, deployer, netConfig} = await connectStarknet();
let { provider, deployer, governor, netConfig} = await connectStarknet();

deployLog[logName.DEPLOY_LOG_DEPLOYER] = deployer.address;
fs.writeFileSync(deployLogPath, JSON.stringify(deployLog, null, 2));
Expand All @@ -44,6 +44,7 @@ async function declare_zklink() {

try {
const gatekeeperDeclareResponse = await deployer.declare({ contract: gatekeeperContractSierra, casm: gatekeeperContractCasm });
await provider.waitForTransaction(gatekeeperDeclareResponse.transaction_hash);
gatekeeperContractClassHash = gatekeeperDeclareResponse.class_hash;
console.log('✅ Gatekeeper Contract declared with classHash = ', gatekeeperContractClassHash);
} catch (error) {
Expand Down Expand Up @@ -73,6 +74,7 @@ async function declare_zklink() {

try {
const verifierDeclareResponse = await deployer.declare({ contract: verifierContractSierra, casm: verifierContractCasm });
await provider.waitForTransaction(gatekeeperDeclareResponse.transaction_hash);
verifierContractClassHash = verifierDeclareResponse.class_hash;
console.log('✅ Verifier Contract declared with classHash = ', verifierContractClassHash);
} catch (error) {
Expand Down Expand Up @@ -102,6 +104,7 @@ async function declare_zklink() {

try {
const zklinkDeclareResponse = await deployer.declare({ contract: zklinkContractSierra, casm: zklinkContractCasm });
await provider.waitForTransaction(gatekeeperDeclareResponse.transaction_hash);
zklinkContractClassHash = zklinkDeclareResponse.class_hash;
console.log('✅ Zklink Contract declared with classHash = ', zklinkContractClassHash);
} catch (error) {
Expand All @@ -126,7 +129,7 @@ async function declare_zklink() {

async function deploy_zklink(options) {
const { deployLogPath, deployLog } = getDeployLog(logName.DEPLOY_ZKLINK_LOG_PREFIX);
let { provider, deployer, netConfig } = await connectStarknet();
let { provider, deployer, governor, netConfig } = await connectStarknet();

if (options.governor === undefined) {
options.governor = netConfig.network.accounts.governor.address;
Expand All @@ -151,7 +154,7 @@ async function deploy_zklink(options) {

// deploy verifier contract
if (!(logName.DEPLOY_LOG_VERIFIER in deployLog) || options.force) {
const verifierConstructorArgs = buildVerifierConstructorArgs(verifierContractSierra.abi);
const verifierConstructorArgs = buildVerifierConstructorArgs(verifierContractSierra.abi, deployer.address);
const deployResponse = await deployer.deployContract({ classHash: deployLog[logName.DEPLOY_LOG_VERIFIER_CLASS_HASH], constructorCalldata: verifierConstructorArgs });
await provider.waitForTransaction(deployResponse.transaction_hash);

Expand All @@ -166,6 +169,7 @@ async function deploy_zklink(options) {
if (!(logName.DEPLOY_LOG_ZKLINK in deployLog) || options.force) {
const zklinkConstructorArgs = buildZklinkConstructorArgs(
zklinkContractSierra.abi,
deployer.address,
deployLog[logName.DEPLOY_LOG_VERIFIER],
options.governor,
options.blockNumber,
Expand All @@ -187,7 +191,7 @@ async function deploy_zklink(options) {

// deploy gatekeeper contract
if (!(logName.DEPLOY_LOG_GATEKEEPER in deployLog) || options.force) {
const gatekeeperConstructorArgs = buildGateKeeperConstructorArgs(gatekeeperContractSierra.abi, deployLog[logName.DEPLOY_LOG_ZKLINK]);
const gatekeeperConstructorArgs = buildGateKeeperConstructorArgs(gatekeeperContractSierra.abi, deployer.address, deployLog[logName.DEPLOY_LOG_ZKLINK]);

const deployResponse = await deployer.deployContract({ classHash: deployLog[logName.DEPLOY_LOG_GATEKEEPER_CLASS_HASH], constructorCalldata: gatekeeperConstructorArgs, salt: "0" });
await provider.waitForTransaction(deployResponse.transaction_hash);
Expand All @@ -211,22 +215,45 @@ async function deploy_zklink(options) {
const tx = await verifier.transferMastership(call.calldata);
await provider.waitForTransaction(tx.transaction_hash);

console.log('✅ Verifier Contract master transferred to getkeeper at tx:', tx.transaction_hash);
console.log('✅ Verifier Contract master transferred to gatekeeper at tx:', tx.transaction_hash);
deployLog[logName.DEPLOY_LOG_VERIFIER_TRANSFER_MASTER_TX_HASH] = tx.transaction_hash;
fs.writeFileSync(deployLogPath, JSON.stringify(deployLog, null, 2));
}

// gatekeeper add verifier upgradeable
if (!(logName.DEPLOY_LOG_VERIFIER_ADDUPGRADEABLE_TX_HASH in deployLog) || options.force) {
gatekeeper.connect(deployer);
const call = gatekeeper.populate("addUpgradeable", [deployLog[logName.DEPLOY_LOG_VERIFIER]]);
const tx = await gatekeeper.addUpgradeable(call.calldata);
await provider.waitForTransaction(tx.transaction_hash);

console.log('✅ Gatekeeper Contract add verifier upgradeable at tx:', tx.transaction_hash);
deployLog[logName.DEPLOY_LOG_VERIFIER_ADDUPGRADEABLE_TX_HASH] = tx.transaction_hash;
fs.writeFileSync(deployLogPath, JSON.stringify(deployLog, null, 2));
}

// change zklink master from deployer to gatekeeper
if (!(logName.DEPLOY_LOG_ZKLINK_TRANSFER_MASTER_TX_HASH in deployLog) || options.force) {
zklink.connect(deployer);
const call = zklink.populate("transferMastership", [gatekeeper.address]);
const tx = await zklink.transferMastership(call.calldata);
await provider.waitForTransaction(tx.transaction_hash);
console.log('✅ zklink Contract master transferred to getkeeper at tx:', tx.transaction_hash);
console.log('✅ zklink Contract master transferred to gatekeeper at tx:', tx.transaction_hash);
deployLog[logName.DEPLOY_LOG_ZKLINK_TRANSFER_MASTER_TX_HASH] = tx.transaction_hash;
fs.writeFileSync(deployLogPath, JSON.stringify(deployLog, null, 2));
}

// gatekeeper add zklink upgradeable
if (!(logName.DEPLOY_LOG_ZKLINK_ADDUPGRADEABLE_TX_HASH in deployLog) || options.force) {
gatekeeper.connect(deployer);
const call = gatekeeper.populate("addUpgradeable", [deployLog[logName.DEPLOY_LOG_ZKLINK]]);
const tx = await gatekeeper.addUpgradeable(call.calldata);
await provider.waitForTransaction(tx.transaction_hash);
console.log('✅ Gatekeeper Contract add zklink upgradeable at tx:', tx.transaction_hash);
deployLog[logName.DEPLOY_LOG_ZKLINK_ADDUPGRADEABLE_TX_HASH] = tx.transaction_hash;
fs.writeFileSync(deployLogPath, JSON.stringify(deployLog, null, 2));
}

// change gatekeeper master from deployer to governor
if (!(logName.DEPLOY_LOG_GATEKEEPER_TRANSFER_MASTER_TX_HASH in deployLog) || options.force) {
gatekeeper.connect(deployer);
Expand All @@ -240,8 +267,9 @@ async function deploy_zklink(options) {

// zklink set validator
if (!(logName.DEPLOY_LOG_ZKLINK_SET_VALIDATOR_TX_HASH in deployLog) || options.force) {
zklink.connect(options.governor);
const tx = await zklink.setValidator(options.validator, true);
zklink.connect(governor);
const call = zklink.populate("setValidator", [options.validator, true]);
const tx = await zklink.setValidator(call.calldata);
await provider.waitForTransaction(tx.transaction_hash);
console.log('✅ zklink Contract set validator at tx:', tx.transaction_hash);
deployLog[logName.DEPLOY_LOG_ZKLINK_SET_VALIDATOR_TX_HASH] = tx.transaction_hash;
Expand Down
15 changes: 9 additions & 6 deletions scripts/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,27 @@ export async function connectStarknet() {

const deployer = new Account(provider, deployerConfig.address, deployerConfig.privateKey);
console.log('✅ Deployer account connected, address =', deployer.address);
return { provider, deployer, netConfig};
const governor = new Account(provider, netConfig.network.accounts.governor.address, netConfig.network.accounts.governor.privateKey);
console.log('✅ Governor account connected, address =', governor.address);
return { provider, deployer, governor, netConfig};
}

export function buildGateKeeperConstructorArgs(abi, mainContract) {
export function buildGateKeeperConstructorArgs(abi, master, mainContract) {
const contractCallData = new CallData(abi);
const constructorArgs = contractCallData.compile("constructor", [mainContract])
const constructorArgs = contractCallData.compile("constructor", [master, mainContract])
return constructorArgs;
}

export function buildVerifierConstructorArgs(abi) {
export function buildVerifierConstructorArgs(abi, master) {
const contractCallData = new CallData(abi);
const constructorArgs = contractCallData.compile("constructor", [])
const constructorArgs = contractCallData.compile("constructor", [master])
return constructorArgs;
}

export function buildZklinkConstructorArgs(abi, verifierAddress, networkGovernor, blockNumber, timestamp, stateHash, commitment, syncHash) {
export function buildZklinkConstructorArgs(abi, master, verifierAddress, networkGovernor, blockNumber, timestamp, stateHash, commitment, syncHash) {
const contractCallData = new CallData(abi);
const constructorArgs = contractCallData.compile("constructor", [
master,
verifierAddress,
networkGovernor,
blockNumber,
Expand Down

0 comments on commit a496bfa

Please sign in to comment.