在本地搭建LocalTerra节点时,有时会用到创建cw20Token来测试。LocalTerra中的cw20合约代码需要自己编译后上传。记录该过程。
在本地搭建LocalTerra节点时,有时会用到创建cw20Token来测试。LocalTerra中的cw20合约代码需要自己编译后上传。记录该过程。
1、clone cw-plus项目
git clone https://github.com/CosmWasm/cw-plus
CosmWasm提供了多个已通过测试验证的合约,包括白名单、多签、质押,以及符合ERC20规范的相关合约。
. ├── cw1-subkeys ├── cw1-whitelist ├── cw1155-base ├── cw20-atomic-swap ├── cw20-base ├── cw20-bonding ├── cw20-escrow ├── cw20-ics20 ├── cw20-merkle-airdrop ├── cw20-staking ├── cw3-fixed-multisig ├── cw3-flex-multisig ├── cw4-group ├── cw4-stake └── cw721-base
其中cw20-base即实现ERC20规范的合约项目。
由于当前最新版本(v0.12.0)编译优化后,上传代码提示
Wasm contract has unknown interface_version_* marker
因此选择的是v0.8.0版本代码进行编译的
git tag ... v0.7.0 v0.8.0 v0.8.0-rc1 v0.8.0-rc2 v0.8.0-rc3 v0.8.1 ... git checkout v0.8.0
2、编译合约代码
项目根目录下运行
cw-plus % docker run --rm -v "$(pwd)":/code --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry cosmwasm/workspace-optimizer:0.11.3
会将编译优化后的wasm文件放置在项目根目录下的artifacts目录下
1.51.0-x86_64-unknown-linux-musl (default) cargo 1.51.0 (43b129a20 2021-03-16) Building artifacts in workspace ... Found workspace member entries: ['packages/*', 'contracts/*'] Package directories: ['contracts/cw1-subkeys', 'contracts/cw1-whitelist', 'contracts/cw1155-base', 'contracts/cw20-atomic-swap', 'contracts/cw20-base', 'contracts/cw20-bonding', 'contracts/cw20-escrow', 'contracts/cw20-ics20', 'contracts/cw20-merkle-airdrop', 'contracts/cw20-staking', 'contracts/cw3-fixed-multisig', 'contracts/cw3-flex-multisig', 'contracts/cw4-group', 'contracts/cw4-stake', 'contracts/cw721-base', 'packages/controllers', 'packages/cw0', 'packages/cw1', 'packages/cw1155', 'packages/cw2', 'packages/cw20', 'packages/cw3', 'packages/cw4', 'packages/cw721', 'packages/multi-test', 'packages/storage-plus'] Contracts to be built: ['contracts/cw1-subkeys', 'contracts/cw1-whitelist', 'contracts/cw1155-base', 'contracts/cw20-atomic-swap', 'contracts/cw20-base', 'contracts/cw20-bonding', 'contracts/cw20-escrow', 'contracts/cw20-ics20', 'contracts/cw20-merkle-airdrop', 'contracts/cw20-staking', 'contracts/cw3-fixed-multisig', 'contracts/cw3-flex-multisig', 'contracts/cw4-group', 'contracts/cw4-stake', 'contracts/cw721-base'] Building contracts/cw1-subkeys ... Compiling cw1-whitelist v0.8.0 (/code/contracts/cw1-whitelist) Compiling cw1-subkeys v0.8.0 (/code/contracts/cw1-subkeys) Finished release [optimized] target(s) in 19.91s Building contracts/cw1-whitelist ... Compiling cw1-whitelist v0.8.0 (/code/contracts/cw1-whitelist) Finished release [optimized] target(s) in 11.05s Building contracts/cw1155-base ... Finished release [optimized] target(s) in 0.30s Building contracts/cw20-atomic-swap ... Finished release [optimized] target(s) in 0.33s Building contracts/cw20-base ... Compiling cw20-base v0.8.0 (/code/contracts/cw20-base) Finished release [optimized] target(s) in 15.57s Building contracts/cw20-bonding ... Compiling cw20-base v0.8.0 (/code/contracts/cw20-base) Compiling cw20-bonding v0.8.0 (/code/contracts/cw20-bonding) Finished release [optimized] target(s) in 20.32s Building contracts/cw20-escrow ... Finished release [optimized] target(s) in 0.32s Building contracts/cw20-ics20 ... Finished release [optimized] target(s) in 0.30s Building contracts/cw20-merkle-airdrop ... Finished release [optimized] target(s) in 0.30s Building contracts/cw20-staking ... Compiling cw20-staking v0.8.0 (/code/contracts/cw20-staking) Finished release [optimized] target(s) in 13.36s Building contracts/cw3-fixed-multisig ... Finished release [optimized] target(s) in 0.30s Building contracts/cw3-flex-multisig ... Finished release [optimized] target(s) in 0.30s Building contracts/cw4-group ... Finished release [optimized] target(s) in 0.31s Building contracts/cw4-stake ... Finished release [optimized] target(s) in 0.31s Building contracts/cw721-base ... Finished release [optimized] target(s) in 0.30s Optimizing artifacts in workspace ... Optimizing ../target/wasm32-unknown-unknown/release/cw1155_base.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw1_subkeys.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_atomic_swap.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_base.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_bonding.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_escrow.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_ics20.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_merkle_airdrop.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw20_staking.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw3_fixed_multisig.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw3_flex_multisig.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw4_group.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw4_stake.wasm ... Optimizing ../target/wasm32-unknown-unknown/release/cw721_base.wasm ... Moving wasm files ... Post-processing artifacts in workspace ... done
编译优化后的文件
. ├── checksums.txt ├── cw1155_base.wasm ├── cw1_subkeys.wasm ├── cw1_whitelist.wasm ├── cw20_atomic_swap.wasm ├── cw20_base.wasm ├── cw20_bonding.wasm ├── cw20_escrow.wasm ├── cw20_ics20.wasm ├── cw20_merkle_airdrop.wasm ├── cw20_staking.wasm ├── cw3_fixed_multisig.wasm ├── cw3_flex_multisig.wasm ├── cw4_group.wasm ├── cw4_stake.wasm └── cw721_base.wasm
3、上传代码
cw-plus % terrad tx wasm store artifacts/cw20_base.wasm --from test1 --chain-id=localterra --gas=auto --fees=100000uluna --broadcast-mode=block gas estimate: 1612883 {"body":{"messages":[{"@type":"/terra.wasm.v1beta1.MsgStoreCode","sender":"terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8","wasm_byte_code":"H4sIAAAAAAAA/+y9DZhdR3UgWH/357373uvbP7Jbasmpe1HgdXAPMjGvhewkXQ0t2THfIBO+rL0fM...IFNRQhOgEoKa5KvGf4QqH0nlp8YH/i+ArBCwFgeNf2UblJRhlJBBCgvwb2AjAMMhRmRI2ElVyo5CmhsAFBoUwJpK1L61ryryrWqAbt8VCBSyQwvo5NX+OQCxNAZ1nJ8lkeF7DQShUkJIaIiULEihBQu9Q4th76b/uniVpSEQRHoYIP0ltGQZbIEaHx8nhhJSIODfAQAA//8L2Bj8Q6AEAA=="}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[{"denom":"uluna","amount":"100000"}],"gas_limit":"1612883","payer":"","granter":""}},"signatures":[]} confirm transaction before signing and broadcasting [y/N]: y code: 0 codespace: "" data: 0A260A202F74657272612E7761736D2E763162657461312E4D736753746F7265436F646512020802 events: - attributes: - index: true key: c3BlbmRlcg== value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: YW1vdW50 value: MTAwMDAwdWx1bmE= type: coin_spent - attributes: - index: true key: cmVjZWl2ZXI= value: dGVycmExN3hwZnZha20yYW1nOTYyeWxzNmY4NHoza2VsbDhjNWxrYWVxZmE= - index: true key: YW1vdW50 value: MTAwMDAwdWx1bmE= type: coin_received - attributes: - index: true key: cmVjaXBpZW50 value: dGVycmExN3hwZnZha20yYW1nOTYyeWxzNmY4NHoza2VsbDhjNWxrYWVxZmE= - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: YW1vdW50 value: MTAwMDAwdWx1bmE= type: transfer - attributes: - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= type: message - attributes: - index: true key: ZmVl value: MTAwMDAwdWx1bmE= type: tx - attributes: - index: true key: YWNjX3NlcQ== value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDgvNzI0 type: tx - attributes: - index: true key: c2lnbmF0dXJl value: eTZaS1plRTZHTXlCM3BSL3BFWEE5M0llcmpUQXJlRkRobWhGRzBaVDhZY1k3LzZpWWdMdWV3UkVTNllIVk1naDB1Q3dacnZSK09kWDYyMjZrYm1kWXc9PQ== type: tx - attributes: - index: true key: YWN0aW9u value: L3RlcnJhLndhc20udjFiZXRhMS5Nc2dTdG9yZUNvZGU= type: message - attributes: - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: Y29kZV9pZA== value: Mg== type: store_code - attributes: - index: true key: bW9kdWxl value: d2FzbQ== type: message gas_used: "1611362" gas_wanted: "1612883" height: "3603" info: "" logs: - events: - attributes: - key: action value: /terra.wasm.v1beta1.MsgStoreCode - key: module value: wasm type: message - attributes: - key: sender value: terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8 - key: code_id value: "2" type: store_code log: "" msg_index: 0 raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"/terra.wasm.v1beta1.MsgStoreCode"},{"key":"module","value":"wasm"}]},{"type":"store_code","attributes":[{"key":"sender","value":"terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8"},{"key":"code_id","value":"2"}]}]}]' timestamp: "" tx: null txhash: 024D97F1FE62D117FC2E3817184030ADC3C772FB1C4951A158AD3946CCC5DD9F
上传成功,code_id为2记录了cw20合约代码。
4、部署合约
实例化CW20Token。
{ "name": "yout_token_name", "symbol": "SYMBOL", "decimals": 6, "initial_balances": [ { "address": "terraaddress0001asdfsdfbqwer...", "amount": "10000" }, { "address": "terraaddress0002asdfsdfbqwer...", "amount": "10000" }, ... ] }
执行初始化命令。
% terrad tx wasm instantiate 2 '{"name":"Tether USD","symbol":"USDT","decimals":6,"initial_balances":[{"address":"terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v","amount":"1000000000"}]}' --from test1 --chain-id=localterra --fees=10000uluna --gas=auto --broadcast-mode=block gas estimate: 289047 {"body":{"messages":[{"@type":"/terra.wasm.v1beta1.MsgInstantiateContract","sender":"terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8","admin":"","code_id":"2","init_msg":{"name":"Tether USD","symbol":"USDT","decimals":6,"initial_balances":[{"address":"terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v","amount":"1000000000"}]},"init_coins":[]}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[{"denom":"uluna","amount":"10000"}],"gas_limit":"289047","payer":"","granter":""}},"signatures":[]} confirm transaction before signing and broadcasting [y/N]: y code: 0 codespace: "" data: 0A5C0A2A2F74657272612E7761736D2E763162657461312E4D7367496E7374616E7469617465436F6E7472616374122E0A2C746572726131763765747336763538707736353373356B326E737764386B75396D64706D7137717A7A357178 events: - attributes: - index: true key: c3BlbmRlcg== value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: YW1vdW50 value: MTAwMDB1bHVuYQ== type: coin_spent - attributes: - index: true key: cmVjZWl2ZXI= value: dGVycmExN3hwZnZha20yYW1nOTYyeWxzNmY4NHoza2VsbDhjNWxrYWVxZmE= - index: true key: YW1vdW50 value: MTAwMDB1bHVuYQ== type: coin_received - attributes: - index: true key: cmVjaXBpZW50 value: dGVycmExN3hwZnZha20yYW1nOTYyeWxzNmY4NHoza2VsbDhjNWxrYWVxZmE= - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: YW1vdW50 value: MTAwMDB1bHVuYQ== type: transfer - attributes: - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= type: message - attributes: - index: true key: ZmVl value: MTAwMDB1bHVuYQ== type: tx - attributes: - index: true key: YWNjX3NlcQ== value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDgvMTQyMQ== type: tx - attributes: - index: true key: c2lnbmF0dXJl value: WDNGTytaSUNuVWxqSTJNNnhlazNaR1B1NTNFaDRqa1I0eE9EOURORVVMVTZtQlNwVXdtWnNGcUJKZTBRWUhKL0ROS0RBNUdBR1hqOXV0bFdVbk5iUkE9PQ== type: tx - attributes: - index: true key: YWN0aW9u value: L3RlcnJhLndhc20udjFiZXRhMS5Nc2dJbnN0YW50aWF0ZUNvbnRyYWN0 type: message - attributes: - index: true key: Y3JlYXRvcg== value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= - index: true key: YWRtaW4= value: "" - index: true key: Y29kZV9pZA== value: Mg== - index: true key: Y29udHJhY3RfYWRkcmVzcw== value: dGVycmExdjdldHM2djU4cHc2NTNzNWsybnN3ZDhrdTltZHBtcTdxeno1cXg= type: instantiate_contract - attributes: - index: true key: bW9kdWxl value: d2FzbQ== - index: true key: c2VuZGVy value: dGVycmExZGNlZ3lyZWtsdHN3dnl5MHh5Njl5ZGd4bjl4OHgzMnpkdGFwZDg= type: message gas_used: "288496" gas_wanted: "289047" height: "7072" info: "" logs: - events: - attributes: - key: creator value: terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8 - key: admin value: "" - key: code_id value: "2" - key: contract_address value: terra1v7ets6v58pw653s5k2nswd8ku9mdpmq7qzz5qx type: instantiate_contract - attributes: - key: action value: /terra.wasm.v1beta1.MsgInstantiateContract - key: module value: wasm - key: sender value: terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8 type: message log: "" msg_index: 0 raw_log: '[{"events":[{"type":"instantiate_contract","attributes":[{"key":"creator","value":"terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8"},{"key":"admin"},{"key":"code_id","value":"2"},{"key":"contract_address","value":"terra1v7ets6v58pw653s5k2nswd8ku9mdpmq7qzz5qx"}]},{"type":"message","attributes":[{"key":"action","value":"/terra.wasm.v1beta1.MsgInstantiateContract"},{"key":"module","value":"wasm"},{"key":"sender","value":"terra1dcegyrekltswvyy0xy69ydgxn9x8x32zdtapd8"}]}]}]' timestamp: "" tx: null txhash: 33046CA5685B52C054B12EBD6AB9623D4BD357CB5F7DF2DEF05526DE837E92DA
部署完成。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。