# 智能合约-WASM(即将下线)

# Store

上传智能合约代码。

Copy irita tx wasm store [wasm-file] --source [source] --builder [builder]

参数:

名称 类型 必须 默认 描述
wasm-file string 智能合约编译后的二进制文件

标志:

名称,速记 类型 必须 默认 描述
--source string 智能合约源码地址
--builder string 合法的docker标签
--instantiate-only-address string 只有该地址可以初始化合约
--instantiate-everybody string 任何人都可以初始化合约

# 上传合约示例

Copy irita tx wasm store election.wasm --from node0 --chain-id=test --keyring-backend=file --home ./irita/node0/iritacli --fees 6point -b block --gas="auto"

**:**合约代码上传完成后,系统会分配一个code_id给用户,用于下次初始化该合约。

# Instantiate

初始化合约的状态。

Copy irita tx wasm instantiate [code_id] [json_encoded_init_args] --label [text] --admin [address] --amount [coins] [flags]

参数:

名称 类型 必须 默认 描述
code_id int64 合约上传完成后系统分配的id
json_encoded_init_args string 合约初始化函数需要的参数,json格式

标志:

名称,速记 类型 必须 默认 描述
--label string 合约的简要描述
--admin string 可以执行migrate操作的用户地址
--amount string 发送指定金额代币到合约地址

# 初始化合约示例

Copy CODE_ID=1 INIT='{"start":1,"end":100,"candidates":["iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa","iaa1zk2tse0pkk87p2v8tcsfs0ytfw3t88kejecye5"]}' irita tx wasm instantiate "$CODE_ID" "$INIT" --from node0 --label "mint iris" --chain-id=test --keyring-backend=file --home ./irita/node0/iritacli --fees 6point --gas="auto" -b block

**:**合约代码初始化完成后,系统会返回智能合约地址,用于智能合约的调用以及状态的查询等。

# Execute

执行智能合约中的方法。

Copy irita tx wasm execute [contract_addr_bech32] [json_encoded_send_args] [flags]

参数:

名称 类型 必须 默认 描述
contract_addr_bech32 string 智能合约地址
json_encoded_send_args string 调用智能合约方法的参数,json格式。

# 执行合约示例

下面是执行了合约中的vote方法,参数为candidate:iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa

Copy Vote='{"vote":{"candidate":"iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa"}}' irita tx wasm execute iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 "$Vote" --from node0 --chain-id=test --keyring-backend=file --home ./irita/node0/iritacli --fees 6point --gas="auto" -b block

# Migrate

将智能合约迁移到新的代码版本

Copy irita tx wasm migrate [contract_addr_bech32] [new_code_id_int64] [json_encoded_migration_args] [flags]

参数:

名称 类型 必须 默认 描述
contract_addr_bech32 string 智能合约地址
new_code_id_int64 int64 迁移到的智能合约code_id
json_encoded_migration_args string 执行合约迁移方法migrate的参数,json格式。

**:**合约代码更新完成后,合约的地址依然采用原来的合约地址,但是合约的状态依据migrate的执行逻辑也可以保持不变。

# Set contract admin

变更智能合约的管理人,以便对合约执行migrate操作,必须由上个管理员指定。

Copy irita tx wasm set-contract-admin [contract_addr_bech32] [new_admin_addr_bech32] [flags]

参数:

名称 类型 必须 默认 描述
contract_addr_bech32 string 智能合约地址
new_admin_addr_bech32 string 新的管理员地址

# 变更管理员示例

Copy irita tx wasm set-contract-admin iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 iaa18lwh8r66wf2hc278ncu4mlgqcxh5slhudkuler --from node0 --chain-id=test --keyring-backend=file --home ./irita/node0/iritacli --fees 6point --gas="auto" -b block

# Clear contract admin

清空合约管理人权限,以住址合约的migrate操作。

Copy irita tx wasm clear-contract-admin [contract_addr_bech32] [flags]

参数:

名称 类型 必须 默认 描述
contract_addr_bech32 string 智能合约地址

# 清空合约管理人权限示例

Copy irita tx wasm clear-contract-admin iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 --from node0 --chain-id=test --keyring-backend=file --home ./irita/node0/iritacli --fees 6point --gas="auto" -b block

# Download contract code

下载智能合约的二进制数据(上传的.wasm数据)。

Copy irita query wasm code [code_id] [output filename] [flags]

参数:

名称 类型 必须 默认 描述
code_id int64 智能合约的code_id
output string 合约code输出文件

# 下载智能合约示例

Copy irita query wasm code 1 election.wasm

# Contract

查询合约的信息,包括合约地址、codeID,label等信息。

Copy irita query wasm contract [bech32_address] [flags]

参数:

名称 类型 必须 默认 描述
bech32_address string 智能合约地址

# 查询合约信息示例

Copy irita query wasm contract iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9

输出信息:

Copy address: iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 code_id: 1 creator: iaa1rgnu8grzt6mwnjg7jss7w0sfyjn67g4et0hzfz label: test wasm

# Contract History

使用合约地址查询合约的migrate历史信息。

Copy irita query wasm contract-history [bech32_address] [flags]

参数:

名称 类型 必须 默认 描述
bech32_address string 智能合约地址

# 查询migrate历史信息示例

Copy irita query wasm contract-history iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9

# List code

查询链上所有的合约code_id

Copy irita query wasm list-code [flags]

# 查询链上所有的合约code_id示例

Copy irita query wasm list-code

输出信息:

Copy code_infos: - creator: iaa1rgnu8grzt6mwnjg7jss7w0sfyjn67g4et0hzfz data_hash: E5F29AA07C14DCA498680AFC5376284937FC158677475FD72DBD934B4E023174 id: 1 pagination: {}

# List contract-by-code

使用code_id查询合约的基本信息。

Copy irita query wasm list-contract-by-code [code_id] [flags]

参数:

名称 类型 必须 默认 描述
code_id int64 智能合约的code_id

# 使用code_id查询合约信息示例

Copy irita query wasm list-contract-by-code 1

输出信息:

Copy contract_infos: - address: iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 code_id: 1 creator: iaa1rgnu8grzt6mwnjg7jss7w0sfyjn67g4et0hzfz label: test wasm pagination: {}

# Contract state all

根据合约地址查询合约内部存储的所有状态信息,信息以编码后的格式输出,用户需自行解码。

Copy irita query wasm contract-state all [bech32_address] [flags]

参数:

名称 类型 必须 默认 描述
bech32_address string 智能合约地址

# 查询合约所有状态示例

Copy irita query wasm contract-state all iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9

输出信息:

Copy models: - key: 0006636F6E666967 value: eyJzdGFydCI6MSwiZW5kIjoxMDAsImNhbmRpZGF0ZXMiOlsiaWFhMXF2dHk4eDBjNzhhbThjNDR6djJuN3RnbTZnZnF0NzhqMHZlcnFhIiwiaWFhMXprMnRzZTBwa2s4N3Aydjh0Y3NmczB5dGZ3M3Q4OGtlamVjeWU1Il0sInZvdGVzIjpbeyJ2b3RlciI6ImlhYTFyZ251OGdyenQ2bXduamc3anNzN3cwc2Z5am42N2c0ZXQwaHpmeiIsImNhbmRpZGF0ZSI6ImlhYTFxdnR5OHgwYzc4YW04YzQ0enYybjd0Z202Z2ZxdDc4ajB2ZXJxYSJ9XX0= pagination: {}

**:**key的编码为hex编码,例如0006636F6E666967对应字符串为config,value编码为base64编码,例如

Copy eyJzdGFydCI6MSwiZW5kIjoxMDAsImNhbmRpZGF0ZXMiOlsiaWFhMXF2dHk4eDBjNzhhbThjNDR6djJuN3RnbTZnZnF0NzhqMHZlcnFhIiwiaWFhMXprMnRzZTBwa2s4N3Aydjh0Y3NmczB5dGZ3M3Q4OGtlamVjeWU1Il0sInZvdGVzIjpbeyJ2b3RlciI6ImlhYTFyZ251OGdyenQ2bXduamc3anNzN3cwc2Z5am42N2c0ZXQwaHpmeiIsImNhbmRpZGF0ZSI6ImlhYTFxdnR5OHgwYzc4YW04YzQ0enYybjd0Z202Z2ZxdDc4ajB2ZXJxYSJ9XX0=

对应的字符串为:

Copy {"start":1,"end":100,"candidates":["iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa","iaa1zk2tse0pkk87p2v8tcsfs0ytfw3t88kejecye5"],"votes":[{"voter":"iaa1rgnu8grzt6mwnjg7jss7w0sfyjn67g4et0hzfz","candidate":"iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa"}]}

# Contract state raw

根据用户指定的合约地址以及合约编写时指定的key,查询当前合约的状态信息,输出信息以base64编码。

Copy irita query wasm contract-state raw [bech32_address] [key] [flags]

参数:

名称 类型 必须 默认 描述
bech32_address string 智能合约地址
key string 编写合约时指定的存储key(hex编码格式)

# 查询指定的key的value信息示例

Copy irita query wasm contract-state raw iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 0006636F6E666967

输出信息:

Copy data: eyJzdGFydCI6MSwiZW5kIjoxMDAsImNhbmRpZGF0ZXMiOlsiaWFhMXF2dHk4eDBjNzhhbThjNDR6djJuN3RnbTZnZnF0NzhqMHZlcnFhIiwiaWFhMXprMnRzZTBwa2s4N3Aydjh0Y3NmczB5dGZ3M3Q4OGtlamVjeWU1Il0sInZvdGVzIjpbeyJ2b3RlciI6ImlhYTFyZ251OGdyenQ2bXduamc3anNzN3cwc2Z5am42N2c0ZXQwaHpmeiIsImNhbmRpZGF0ZSI6ImlhYTFxdnR5OHgwYzc4YW04YzQ0enYybjd0Z202Z2ZxdDc4ajB2ZXJxYSJ9XX0=

**:data解码格式为base64。

# Contract state smart

调用合约的查询方法并返回解码后的数据。

Copy irita query wasm contract-state smart [bech32_address] [query] [flags]

参数:

名称 类型 必须 默认 描述
bech32_address string 智能合约地址
query string 查询字符串,json格式

# 调用合约指定的查询方法示例

Copy Query='{"get_vote_info":{}}' irita query wasm contract-state smart iaa18vd8fpwxzck93qlwghaj6arh4p7c5n89fqcgm9 $Query

输出信息:

Copy data: end: 100 start: 1 votes: - candidate: iaa1qvty8x0c78am8c44zv2n7tgm6gfqt78j0verqa count: 1