terra: upgrade scripts (#3753)

* terra: updates RPC URL

* terra: fixes fee estimation on bytecode upload

* terra: fixes `verify` script

* terra: updates README commands and instructions

* terra: updates governance upgrade generation

* terra: adds instructions to submit governance VAA through `worm`
This commit is contained in:
scnale 2024-01-29 18:38:47 -03:00 committed by GitHub
parent e98bb64436
commit d75fcdf66e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 190 additions and 74 deletions

View File

@ -157,7 +157,7 @@ case "$chain_name" in
chain=3 chain=3
# This is not technically the explorer, but terra finder does not show # This is not technically the explorer, but terra finder does not show
# information about code ids, so this is the best we can do. # information about code ids, so this is the best we can do.
explorer="https://lcd.terra.dev/terra/wasm/v1beta1/codes/" explorer="https://terra-classic-lcd.publicnode.com/cosmwasm/wasm/v1/code/"
;; ;;
bsc) bsc)
chain=4 chain=4
@ -521,7 +521,7 @@ elif [ "$chain_name" = "terra" ]; then
\`\`\`shell \`\`\`shell
# $module # $module
wormhole/terra$ ./verify -n mainnet -c $chain_name -w $(terra_artifact) -i $terra_code_id wormhole/terra$ ./verify -n mainnet $(terra_artifact) $terra_code_id
\`\`\` \`\`\`
EOF EOF
elif [ "$chain_name" = "aptos" ]; then elif [ "$chain_name" = "aptos" ]; then

View File

@ -69,8 +69,16 @@ wormhole/terra $ make deploy/token_bridge
``` ```
For each deployed contract, you will get a code id for that relevant For each deployed contract, you will get a code id for that relevant
contract for the deployment, make note of these so you can use them in contract for the deployment. The code id will be written to a network specific file
the next step for on-chain verification. that you can read to execute further steps like contract verification.
The deployment prints the name of this file.
### Instantiation
The deployment script currently does not instantiate a new live contract but rather only uploads the bytecode.
This is all that is needed to upgrade existing contracts.
To bootstrap a new instance of the contract you may need to modify the deployment slightly.
## Verify On-Chain ## Verify On-Chain
@ -106,20 +114,24 @@ on-chain bytecode with the locally compiled bytecode.
### Mainnet ### Mainnet
Upgrades on mainnet have to go through governance. Once the code is deployed in Upgrades on mainnet have to go through governance. Once the code is deployed in
the previous step, an unsigned governance VAA can be generated the previous step, an unsigned governance VAA can be generated from the root of the repository:
```sh ```sh
./generate_governance -m token_bridge -c 59614 > token-bridge-upgrade-59614.prototxt token_bridge_id=$(cat token_bridge-code-id-mainnet.txt)
./scripts/contract-upgrade-governance.sh --module token_bridge --chain terra --address $token_bridge_id > "token-bridge-upgrade-${token_bridge_id}.prototxt"
``` ```
This will write to the `token-bridge-upgrade-59614.prototxt` file, which can Supposing that the token bridge code id is 59614,
this will write to the `token-bridge-upgrade-59614.prototxt` file, which can
now be shared with the guardians to vote on. now be shared with the guardians to vote on.
Once the guardians have reached quorum, the VAA may be submitted from any Once the guardians have reached quorum, the VAA may be submitted from any
funded wallet: TODO - make this easier and more unified funded wallet with `worm` CLI:
``` sh ``` sh
node main.js terra execute_governance_vaa <signed VAA (hex)> --rpc "https://lcd.terra.dev" --chain_id "columbus-5" --mnemonic "..." --token_bridge "terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf" export TERRA_MNEMONIC="..."
# Note that the chain should be inferred from the governance VAA
worm submit --network mainnet <signed VAA (hex without 0x prefix)> --rpc "https://terra-classic-lcd.publicnode.com"
``` ```
### Testnet ### Testnet

View File

@ -10,7 +10,7 @@ import axios from "axios";
import yargs from "yargs"; import yargs from "yargs";
import {hideBin} from "yargs/helpers"; import {hideBin} from "yargs/helpers";
export const TERRA_GAS_PRICES_URL = "https://fcd.terra.dev/v1/txs/gas_prices"; export const TERRA_GAS_PRICES_URL = "https://terra-classic-fcd.publicnode.com/v1/txs/gas_prices";
const argv = yargs(hideBin(process.argv)) const argv = yargs(hideBin(process.argv))
.option('network', { .option('network', {
@ -38,7 +38,7 @@ const artifact = argv.artifact;
const terra_host = const terra_host =
argv.network === "mainnet" argv.network === "mainnet"
? { ? {
URL: "https://lcd.terra.dev", URL: "https://terra-classic-lcd.publicnode.com",
chainID: "columbus-5", chainID: "columbus-5",
name: "mainnet", name: "mainnet",
} }
@ -73,7 +73,7 @@ try {
mnemonic: argv['private-key'] mnemonic: argv['private-key']
})) }))
} }
await wallet.sequence(); const sequence = await wallet.sequence();
/* Deploy artifacts */ /* Deploy artifacts */
@ -87,9 +87,12 @@ const store_code = new MsgStoreCode(
); );
const feeEstimate = await lcd.tx.estimateFee( const feeEstimate = await lcd.tx.estimateFee(
wallet.key.accAddress, [{
[store_code], sequenceNumber: sequence,
publicKey: wallet.key.publicKey
}],
{ {
msgs: [store_code],
memo: "", memo: "",
feeDenoms, feeDenoms,
gasPrices, gasPrices,

View File

@ -10,7 +10,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@cosmjs/encoding": "^0.26.2", "@cosmjs/encoding": "^0.26.2",
"@terra-money/terra.js": "^3.1.3", "@terra-money/terra.js": "^3.1.10",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"ethers": "^5.4.4", "ethers": "^5.4.4",
"yargs": "^17.0.1" "yargs": "^17.0.1"
@ -19,6 +19,17 @@
"@types/node": "^20.10.4" "@types/node": "^20.10.4"
} }
}, },
"node_modules/@classic-terra/terra.proto": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@classic-terra/terra.proto/-/terra.proto-1.1.0.tgz",
"integrity": "sha512-bYhQG5LUaGF0KPRY9hYT/HEcd1QExZPQd6zLV/rQkCe/eDxfwFRLzZHpaaAdfWoAAZjsRWqJbUCqCg7gXBbJpw==",
"dependencies": {
"@improbable-eng/grpc-web": "^0.14.1",
"google-protobuf": "^3.17.3",
"long": "^4.0.0",
"protobufjs": "~6.11.2"
}
},
"node_modules/@cosmjs/encoding": { "node_modules/@cosmjs/encoding": {
"version": "0.26.6", "version": "0.26.6",
"resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.26.6.tgz", "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.26.6.tgz",
@ -793,25 +804,14 @@
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
}, },
"node_modules/@terra-money/legacy.proto": {
"name": "@terra-money/terra.proto",
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-0.1.7.tgz",
"integrity": "sha512-NXD7f6pQCulvo6+mv6MAPzhOkUzRjgYVuHZE/apih+lVnPG5hDBU0rRYnOGGofwvKT5/jQoOENnFn/gioWWnyQ==",
"dependencies": {
"google-protobuf": "^3.17.3",
"long": "^4.0.0",
"protobufjs": "~6.11.2"
}
},
"node_modules/@terra-money/terra.js": { "node_modules/@terra-money/terra.js": {
"version": "3.1.3", "version": "3.1.10",
"resolved": "https://registry.npmjs.org/@terra-money/terra.js/-/terra.js-3.1.3.tgz", "resolved": "https://registry.npmjs.org/@terra-money/terra.js/-/terra.js-3.1.10.tgz",
"integrity": "sha512-80HU5WXrqf3hZTo2GRhIycH17A+SkLD6afbu8MynMDGGD/A861F3zVv6NQ/Z7PWQGHxgddZEK/A0UQ2uK/xfHg==", "integrity": "sha512-MqR16LjTUyVD4HnEavP1iBW0c1roCoRHH/E1x9P44pXzgtv2wsMeP+2un4Bnck4Nkv/46Xvy/BSKiY90ll3BKA==",
"dependencies": { "dependencies": {
"@terra-money/legacy.proto": "npm:@terra-money/terra.proto@^0.1.7", "@classic-terra/terra.proto": "^1.1.0",
"@terra-money/terra.proto": "~2.0.0", "@terra-money/terra.proto": "^2.1.0",
"axios": "^0.26.1", "axios": "^0.27.2",
"bech32": "^2.0.0", "bech32": "^2.0.0",
"bip32": "^2.0.6", "bip32": "^2.0.6",
"bip39": "^3.0.3", "bip39": "^3.0.3",
@ -822,16 +822,16 @@
"secp256k1": "^4.0.2", "secp256k1": "^4.0.2",
"tmp": "^0.2.1", "tmp": "^0.2.1",
"utf-8-validate": "^5.0.5", "utf-8-validate": "^5.0.5",
"ws": "^7.5.5" "ws": "^7.5.9"
}, },
"engines": { "engines": {
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/@terra-money/terra.proto": { "node_modules/@terra-money/terra.proto": {
"version": "2.0.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-2.0.0.tgz", "resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-2.1.0.tgz",
"integrity": "sha512-ZjyFOFUzrGn8IwzGIgr1OJFcPSsQoz/XAfoSKThJx+OjJA7CLhdcz51+5h7ehNfb+qB9wr7aNME0h24wu9D4SQ==", "integrity": "sha512-rhaMslv3Rkr+QsTQEZs64FKA4QlfO0DfQHaR6yct/EovenMkibDEQ63dEL6yJA6LCaEQGYhyVB9JO9pTUA8ybw==",
"dependencies": { "dependencies": {
"@improbable-eng/grpc-web": "^0.14.1", "@improbable-eng/grpc-web": "^0.14.1",
"google-protobuf": "^3.17.3", "google-protobuf": "^3.17.3",
@ -879,12 +879,18 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1" "url": "https://github.com/chalk/ansi-styles?sponsor=1"
} }
}, },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": { "node_modules/axios": {
"version": "0.26.1", "version": "0.27.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.14.8" "follow-redirects": "^1.14.9",
"form-data": "^4.0.0"
} }
}, },
"node_modules/balanced-match": { "node_modules/balanced-match": {
@ -1059,6 +1065,17 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}, },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": { "node_modules/concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -1094,6 +1111,14 @@
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
"integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
}, },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/dotenv": { "node_modules/dotenv": {
"version": "16.0.0", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz",
@ -1182,9 +1207,9 @@
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -1200,6 +1225,19 @@
} }
} }
}, },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/fs.realpath": { "node_modules/fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -1319,6 +1357,25 @@
"safe-buffer": "^5.1.2" "safe-buffer": "^5.1.2"
} }
}, },
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/minimalistic-assert": { "node_modules/minimalistic-assert": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -1693,6 +1750,17 @@
} }
}, },
"dependencies": { "dependencies": {
"@classic-terra/terra.proto": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@classic-terra/terra.proto/-/terra.proto-1.1.0.tgz",
"integrity": "sha512-bYhQG5LUaGF0KPRY9hYT/HEcd1QExZPQd6zLV/rQkCe/eDxfwFRLzZHpaaAdfWoAAZjsRWqJbUCqCg7gXBbJpw==",
"requires": {
"@improbable-eng/grpc-web": "^0.14.1",
"google-protobuf": "^3.17.3",
"long": "^4.0.0",
"protobufjs": "~6.11.2"
}
},
"@cosmjs/encoding": { "@cosmjs/encoding": {
"version": "0.26.6", "version": "0.26.6",
"resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.26.6.tgz", "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.26.6.tgz",
@ -2154,24 +2222,14 @@
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
}, },
"@terra-money/legacy.proto": {
"version": "npm:@terra-money/terra.proto@0.1.7",
"resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-0.1.7.tgz",
"integrity": "sha512-NXD7f6pQCulvo6+mv6MAPzhOkUzRjgYVuHZE/apih+lVnPG5hDBU0rRYnOGGofwvKT5/jQoOENnFn/gioWWnyQ==",
"requires": {
"google-protobuf": "^3.17.3",
"long": "^4.0.0",
"protobufjs": "~6.11.2"
}
},
"@terra-money/terra.js": { "@terra-money/terra.js": {
"version": "3.1.3", "version": "3.1.10",
"resolved": "https://registry.npmjs.org/@terra-money/terra.js/-/terra.js-3.1.3.tgz", "resolved": "https://registry.npmjs.org/@terra-money/terra.js/-/terra.js-3.1.10.tgz",
"integrity": "sha512-80HU5WXrqf3hZTo2GRhIycH17A+SkLD6afbu8MynMDGGD/A861F3zVv6NQ/Z7PWQGHxgddZEK/A0UQ2uK/xfHg==", "integrity": "sha512-MqR16LjTUyVD4HnEavP1iBW0c1roCoRHH/E1x9P44pXzgtv2wsMeP+2un4Bnck4Nkv/46Xvy/BSKiY90ll3BKA==",
"requires": { "requires": {
"@terra-money/legacy.proto": "npm:@terra-money/terra.proto@^0.1.7", "@classic-terra/terra.proto": "^1.1.0",
"@terra-money/terra.proto": "~2.0.0", "@terra-money/terra.proto": "^2.1.0",
"axios": "^0.26.1", "axios": "^0.27.2",
"bech32": "^2.0.0", "bech32": "^2.0.0",
"bip32": "^2.0.6", "bip32": "^2.0.6",
"bip39": "^3.0.3", "bip39": "^3.0.3",
@ -2182,13 +2240,13 @@
"secp256k1": "^4.0.2", "secp256k1": "^4.0.2",
"tmp": "^0.2.1", "tmp": "^0.2.1",
"utf-8-validate": "^5.0.5", "utf-8-validate": "^5.0.5",
"ws": "^7.5.5" "ws": "^7.5.9"
} }
}, },
"@terra-money/terra.proto": { "@terra-money/terra.proto": {
"version": "2.0.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-2.0.0.tgz", "resolved": "https://registry.npmjs.org/@terra-money/terra.proto/-/terra.proto-2.1.0.tgz",
"integrity": "sha512-ZjyFOFUzrGn8IwzGIgr1OJFcPSsQoz/XAfoSKThJx+OjJA7CLhdcz51+5h7ehNfb+qB9wr7aNME0h24wu9D4SQ==", "integrity": "sha512-rhaMslv3Rkr+QsTQEZs64FKA4QlfO0DfQHaR6yct/EovenMkibDEQ63dEL6yJA6LCaEQGYhyVB9JO9pTUA8ybw==",
"requires": { "requires": {
"@improbable-eng/grpc-web": "^0.14.1", "@improbable-eng/grpc-web": "^0.14.1",
"google-protobuf": "^3.17.3", "google-protobuf": "^3.17.3",
@ -2227,12 +2285,18 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": { "axios": {
"version": "0.26.1", "version": "0.27.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
"requires": { "requires": {
"follow-redirects": "^1.14.8" "follow-redirects": "^1.14.9",
"form-data": "^4.0.0"
} }
}, },
"balanced-match": { "balanced-match": {
@ -2387,6 +2451,14 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}, },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -2422,6 +2494,11 @@
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
"integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
}, },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"dotenv": { "dotenv": {
"version": "16.0.0", "version": "16.0.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz",
@ -2494,9 +2571,19 @@
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.3", "version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
}, },
"fs.realpath": { "fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
@ -2599,6 +2686,19 @@
"safe-buffer": "^5.1.2" "safe-buffer": "^5.1.2"
} }
}, },
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"minimalistic-assert": { "minimalistic-assert": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",

View File

@ -11,7 +11,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@cosmjs/encoding": "^0.26.2", "@cosmjs/encoding": "^0.26.2",
"@terra-money/terra.js": "^3.1.3", "@terra-money/terra.js": "^3.1.10",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"ethers": "^5.4.4", "ethers": "^5.4.4",
"yargs": "^17.0.1" "yargs": "^17.0.1"

View File

@ -9,7 +9,7 @@ usage="Usage:
-h show this help text -h show this help text
-n set the network (mainnet, testnet, devnet. defaults to \$NETWORK if set)" -n set the network (mainnet, testnet, devnet. defaults to \$NETWORK if set)"
network=$NETWORK network=${NETWORK:-""}
while getopts ':hn:' option; do while getopts ':hn:' option; do
case "$option" in case "$option" in
h) echo "$usage" h) echo "$usage"
@ -31,7 +31,7 @@ shift $((OPTIND - 1))
case "$network" in case "$network" in
mainnet) url="https://lcd.terra.dev";; mainnet) url="https://terra-classic-lcd.publicnode.com";;
testnet) url="https://bombay-lcd.terra.dev";; testnet) url="https://bombay-lcd.terra.dev";;
devnet) url="http://localhost:1317";; devnet) url="http://localhost:1317";;
*) printf "Network not set. Specify with -n\n" >&2 *) printf "Network not set. Specify with -n\n" >&2
@ -45,7 +45,8 @@ obj_file=$1
code_id=$2 code_id=$2
hash1=`curl "$url"/terra/wasm/v1beta1/codes/"$code_id" --silent | jq '.code_info.code_hash' -r | base64 -d | hexdump -v -e '/1 "%02x" '` hash1uppercased=`curl "$url"/cosmwasm/wasm/v1/code/"$code_id" --silent | jq '.code_info.data_hash' -r`
hash1=${hash1uppercased,,}
hash2=`sha256sum $obj_file | cut -f1 -d' '` hash2=`sha256sum $obj_file | cut -f1 -d' '`
echo "Deployed bytecode hash (on $network):" echo "Deployed bytecode hash (on $network):"