From ff50fc9d2f8dc27aa3af890124f863523d98a473 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Fri, 11 Dec 2020 17:00:35 +0000 Subject: [PATCH] scripts: Add additional contract deployments to wasmd --- scripts/wasmd/deploy_cw1.js | 58 ++++++++++++ scripts/wasmd/deploy_cw3.js | 108 ++++++++++++++++++++++ scripts/wasmd/deploy_erc20.js | 168 ++++++++++++++++++++++++++++++++++ scripts/wasmd/init.sh | 8 +- 4 files changed, 338 insertions(+), 4 deletions(-) create mode 100755 scripts/wasmd/deploy_cw1.js create mode 100755 scripts/wasmd/deploy_cw3.js create mode 100755 scripts/wasmd/deploy_erc20.js diff --git a/scripts/wasmd/deploy_cw1.js b/scripts/wasmd/deploy_cw1.js new file mode 100755 index 00000000..2b1ab2c1 --- /dev/null +++ b/scripts/wasmd/deploy_cw1.js @@ -0,0 +1,58 @@ +#!/usr/bin/env node + +/* eslint-disable @typescript-eslint/naming-convention */ +const { DirectSecp256k1HdWallet } = require("@cosmjs/proto-signing"); +const { SigningCosmWasmClient } = require("@cosmjs/cosmwasm-stargate"); +const fs = require("fs"); + +const endpoint = "http://localhost:26659"; +const alice = { + mnemonic: "enlist hip relief stomach skate base shallow young switch frequent cry park", + address0: "wasm14qemq0vw6y3gc3u3e0aty2e764u4gs5lndxgyk", + // address1: "wasm1hhg2rlu9jscacku2wwckws7932qqqu8xm5ca8y", + // address2: "wasm1xv9tklw7d82sezh9haa573wufgy59vmwnxhnsl", + // address3: "wasm17yg9mssjenmc3jkqth6ulcwj9cxujrxxg9nmzk", + // address4: "wasm1f7j7ryulwjfe9ljplvhtcaxa6wqgula3nh873j", +}; + +const codeMeta = { + source: "https://crates.io/api/v1/crates/cw1-subkeys/0.3.1/download", + builder: "cosmwasm/rust-optimizer:0.10.4", +}; + +async function main() { + const wallet = await DirectSecp256k1HdWallet.fromMnemonic(alice.mnemonic, undefined, "wasm"); + const client = await SigningCosmWasmClient.connectWithWallet(endpoint, wallet); + + const wasm = fs.readFileSync(__dirname + "/contracts/cw1_subkeys.wasm"); + const uploadReceipt = await client.upload(alice.address0, wasm, codeMeta, "Upload CW1 subkeys contract"); + console.info(`Upload succeeded. Receipt: ${JSON.stringify(uploadReceipt)}`); + + const initMsg = { + admins: [alice.address0], + mutable: true, + }; + const label = "Subkey test"; + const { contractAddress } = await client.instantiate(alice.address0, uploadReceipt.codeId, initMsg, label, { + memo: `Create a CW1 instance for ${alice.address0}`, + admin: alice.address0, + }); + await client.sendTokens(alice.address0, contractAddress, [ + { + amount: "1000", + denom: "ucosm", + }, + ]); + console.info(`Contract instantiated for ${alice.address0} subkey at ${contractAddress}`); +} + +main().then( + () => { + console.info("All done, let the coins flow."); + process.exit(0); + }, + (error) => { + console.error(error); + process.exit(1); + }, +); diff --git a/scripts/wasmd/deploy_cw3.js b/scripts/wasmd/deploy_cw3.js new file mode 100755 index 00000000..d8d99e5a --- /dev/null +++ b/scripts/wasmd/deploy_cw3.js @@ -0,0 +1,108 @@ +#!/usr/bin/env node + +/* eslint-disable @typescript-eslint/naming-convention */ +const { DirectSecp256k1HdWallet } = require("@cosmjs/proto-signing"); +const { SigningCosmWasmClient } = require("@cosmjs/cosmwasm-stargate"); +const fs = require("fs"); + +const endpoint = "http://localhost:26659"; +const alice = { + mnemonic: "enlist hip relief stomach skate base shallow young switch frequent cry park", + address0: "wasm14qemq0vw6y3gc3u3e0aty2e764u4gs5lndxgyk", + address1: "wasm1hhg2rlu9jscacku2wwckws7932qqqu8xm5ca8y", + address2: "wasm1xv9tklw7d82sezh9haa573wufgy59vmwnxhnsl", + address3: "wasm17yg9mssjenmc3jkqth6ulcwj9cxujrxxg9nmzk", + address4: "wasm1f7j7ryulwjfe9ljplvhtcaxa6wqgula3nh873j", +}; + +const codeMeta = { + source: "https://crates.io/api/v1/crates/cw3-fixed-multisig/0.3.1/download", + builder: "cosmwasm/rust-optimizer:0.10.4", +}; + +const initData = [ + { + admin: alice.address0, + label: "Multisig (1/3)", + initMsg: { + voters: [ + { addr: alice.address0, weight: 1 }, + { addr: alice.address1, weight: 1 }, + { addr: alice.address2, weight: 1 }, + ], + required_weight: 1, + max_voting_period: { height: 12345 }, + }, + }, + { + admin: alice.address0, + label: "Multisig (2/3)", + initMsg: { + voters: [ + { addr: alice.address0, weight: 1 }, + { addr: alice.address1, weight: 1 }, + { addr: alice.address2, weight: 1 }, + ], + required_weight: 2, + max_voting_period: { height: 12345 }, + }, + }, + { + admin: alice.address0, + label: "Multisig (uneven weights)", + initMsg: { + voters: [ + { addr: alice.address0, weight: 1 }, + { addr: alice.address1, weight: 2 }, + { addr: alice.address2, weight: 3 }, + ], + required_weight: 3, + max_voting_period: { height: 12345 }, + }, + }, +]; + +async function main() { + const wallet = await DirectSecp256k1HdWallet.fromMnemonic(alice.mnemonic, undefined, "wasm"); + const client = await SigningCosmWasmClient.connectWithWallet(endpoint, wallet); + + const wasm = fs.readFileSync(__dirname + "/contracts/cw3_fixed_multisig.wasm"); + const uploadReceipt = await client.upload( + alice.address0, + wasm, + codeMeta, + "Upload CW3 fixed multisig contract", + ); + console.info(`Upload succeeded. Receipt: ${JSON.stringify(uploadReceipt)}`); + + for (const { admin, initMsg, label } of initData) { + const { contractAddress } = await client.instantiate( + alice.address0, + uploadReceipt.codeId, + initMsg, + label, + { + memo: `Create a CW3 instance for ${initMsg.symbol}`, + admin: admin, + }, + ); + await client.sendTokens(alice.address0, contractAddress, [ + { + amount: "1000", + denom: "ucosm", + }, + ]); + console.info(`Contract instantiated for ${label} at ${contractAddress}`); + } +} + +main().then( + () => { + console.info("All done, let the coins flow."); + process.exit(0); + }, + (error) => { + console.error(error); + process.exit(1); + }, +); diff --git a/scripts/wasmd/deploy_erc20.js b/scripts/wasmd/deploy_erc20.js new file mode 100755 index 00000000..44589fd9 --- /dev/null +++ b/scripts/wasmd/deploy_erc20.js @@ -0,0 +1,168 @@ +#!/usr/bin/env node + +/* eslint-disable @typescript-eslint/naming-convention */ +const { DirectSecp256k1HdWallet } = require("@cosmjs/proto-signing"); +const { SigningCosmWasmClient } = require("@cosmjs/cosmwasm-stargate"); +const fs = require("fs"); + +const endpoint = "http://localhost:26659"; +const alice = { + mnemonic: "enlist hip relief stomach skate base shallow young switch frequent cry park", + address0: "wasm14qemq0vw6y3gc3u3e0aty2e764u4gs5lndxgyk", + address1: "wasm1hhg2rlu9jscacku2wwckws7932qqqu8xm5ca8y", + address2: "wasm1xv9tklw7d82sezh9haa573wufgy59vmwnxhnsl", + address3: "wasm17yg9mssjenmc3jkqth6ulcwj9cxujrxxg9nmzk", + address4: "wasm1f7j7ryulwjfe9ljplvhtcaxa6wqgula3nh873j", +}; +const unused = { + address: "wasm1cjsxept9rkggzxztslae9ndgpdyt240842kpxh", +}; +const guest = { + address: "wasm17d0jcz59jf68g52vq38tuuncmwwjk42us8fnse", +}; + +const codeMeta = { + source: "https://crates.io/api/v1/crates/cw-erc20/0.7.0/download", + builder: "cosmwasm/rust-optimizer:0.10.4", +}; + +const initDataHash = { + admin: undefined, + initMsg: { + decimals: 5, + name: "Hash token", + symbol: "HASH", + initial_balances: [ + { + address: alice.address0, + amount: "11", + }, + { + address: alice.address1, + amount: "11", + }, + { + address: alice.address2, + amount: "11", + }, + { + address: alice.address3, + amount: "11", + }, + { + address: alice.address4, + amount: "11", + }, + { + address: unused.address, + amount: "12812345", + }, + { + address: guest.address, + amount: "22004000000", + }, + ], + }, +}; +const initDataIsa = { + admin: undefined, + initMsg: { + decimals: 0, + name: "Isa Token", + symbol: "ISA", + initial_balances: [ + { + address: alice.address0, + amount: "999999999", + }, + { + address: alice.address1, + amount: "999999999", + }, + { + address: alice.address2, + amount: "999999999", + }, + { + address: alice.address3, + amount: "999999999", + }, + { + address: alice.address4, + amount: "999999999", + }, + { + address: unused.address, + amount: "42", + }, + ], + }, +}; +const initDataJade = { + admin: alice.address1, + initMsg: { + decimals: 18, + name: "Jade Token", + symbol: "JADE", + initial_balances: [ + { + address: alice.address0, + amount: "189189189000000000000000000", // 189189189 JADE + }, + { + address: alice.address1, + amount: "189189189000000000000000000", // 189189189 JADE + }, + { + address: alice.address2, + amount: "189189189000000000000000000", // 189189189 JADE + }, + { + address: alice.address3, + amount: "189189189000000000000000000", // 189189189 JADE + }, + { + address: alice.address4, + amount: "189189189000000000000000000", // 189189189 JADE + }, + { + address: guest.address, + amount: "189500000000000000000", // 189.5 JADE + }, + ], + }, +}; + +async function main() { + const wallet = await DirectSecp256k1HdWallet.fromMnemonic(alice.mnemonic, undefined, "wasm"); + const client = await SigningCosmWasmClient.connectWithWallet(endpoint, wallet); + + const wasm = fs.readFileSync(__dirname + "/contracts/cw_erc20.wasm"); + const uploadReceipt = await client.upload(alice.address0, wasm, codeMeta, "Upload ERC20 contract"); + console.info(`Upload succeeded. Receipt: ${JSON.stringify(uploadReceipt)}`); + + for (const { initMsg, admin } of [initDataHash, initDataIsa, initDataJade]) { + const { contractAddress } = await client.instantiate( + alice.address0, + uploadReceipt.codeId, + initMsg, + initMsg.symbol, + { + memo: `Create an ERC20 instance for ${initMsg.symbol}`, + admin: admin, + }, + ); + console.info(`Contract instantiated for ${initMsg.symbol} at ${contractAddress}`); + } +} + +main().then( + () => { + console.info("All done, let the coins flow."); + process.exit(0); + }, + (error) => { + console.error(error); + process.exit(1); + }, +); diff --git a/scripts/wasmd/init.sh b/scripts/wasmd/init.sh index 9620403e..5ac8723f 100755 --- a/scripts/wasmd/init.sh +++ b/scripts/wasmd/init.sh @@ -26,7 +26,7 @@ SCRIPT_DIR="$(realpath "$(dirname "$0")")" sha256sum --check checksums.sha256 ) "$SCRIPT_DIR/deploy_hackatom.js" -# "$SCRIPT_DIR/deploy_erc20.js" -# "$SCRIPT_DIR/deploy_cw3.js" -# "$SCRIPT_DIR/deploy_cw1.js" -# # "$SCRIPT_DIR/deploy_nameservice.js" +"$SCRIPT_DIR/deploy_erc20.js" +"$SCRIPT_DIR/deploy_cw3.js" +"$SCRIPT_DIR/deploy_cw1.js" +# "$SCRIPT_DIR/deploy_nameservice.js"