Ali Behjati 1 рік тому
батько
коміт
db13b7b25d

+ 20 - 11
contract_manager/scripts/deploy_evm_contract.ts

@@ -14,7 +14,7 @@ const parser = yargs(hideBin(process.argv))
     "std-output": {
       type: "string",
       demandOption: true,
-      desc: "Path to the standard output of the contract (build artifact)",
+      desc: "Path to the standard JSON output of the contract (build artifact)",
     },
     "private-key": {
       type: "string",
@@ -28,23 +28,32 @@ const parser = yargs(hideBin(process.argv))
     },
     "deploy-args": {
       type: "array",
-      desc: "Arguments to pass to the contract constructor",
+      desc: "Arguments to pass to the contract constructor. Each argument must begin with 0x if it's a hex string",
     },
   });
 
 async function main() {
   const argv = await parser.argv;
 
-  const chain = DefaultStore.chains[argv.chain] as EvmChain;
-  const artifact = JSON.parse(readFileSync(argv["std-output"], "utf8"));
-  const address = await chain.deploy(
-    toPrivateKey(argv["private-key"]),
-    artifact["abi"],
-    artifact["bytecode"],
-    argv["deploy-args"] || []
-  );
+  const chain = DefaultStore.chains[argv.chain];
 
-  console.log(`Deployed contract at ${address}`);
+  if (!chain) {
+    throw new Error(`Chain ${argv.contract} not found`);
+  }
+
+  if (chain instanceof EvmChain) {
+    const artifact = JSON.parse(readFileSync(argv["std-output"], "utf8"));
+    const address = await chain.deploy(
+      toPrivateKey(argv["private-key"]),
+      artifact["abi"],
+      artifact["bytecode"],
+      argv["deploy-args"] || []
+    );
+
+    console.log(`Deployed contract at ${address}`);
+  } else {
+    throw new Error("Chain is not an EVM chain");
+  }
 }
 
 main();

+ 1 - 1
contract_manager/src/chains.ts

@@ -392,7 +392,7 @@ export class EvmChain extends Chain {
    * @param privateKey hex string of the 32 byte private key without the 0x prefix
    * @param abi the abi of the contract, can be obtained from the compiled contract json file
    * @param bytecode bytecode of the contract, can be obtained from the compiled contract json file
-   * @param deployArgs arguments to pass to the constructor
+   * @param deployArgs arguments to pass to the constructor. Each argument must begin with 0x if it's a hex string
    * @returns the address of the deployed contract
    */
   async deploy(