# 交易协议
# 概述
交易是指启动从一个账户到另一个帐户的资产转移的命令。交易还可以包含在处理交易时将被触发的操作。
动作(Action):一个动作可以是一个内置的系统功能,比如Hash和投票,或者是一个自定义的智能合约。用户可以通过发送交易或消息来触发动作。
消息(Message):消息就是对账户属性发起操作的指令。消息的数据包含属性、动作、输入参数和输出参数。为安全起见,消息不能更改账户余额。
消息是一种特殊的交易。一个发送高频消息的账户会受到流量控制,必须支付gas费,否则账户所有者可能被迫执行工作证明(POW)。
# 交易对象数据结构
参数名称 | 类型 | 说明 | |
---|---|---|---|
authorization | String | 交易体签名。采用ECDSA数字签名算法。 | |
challenge_proof | String | 预留字段,空字符串。 | |
ext | String | 预留字段,空字符串。 | |
from_ledger_id | Uint16 | 预留字段,为"0"。 | |
last_tx_hash | String | 交易发送方上次交易的xx64hash,用于交易的排序和去重。"0x"开头的hash。 | |
last_tx_nonce | Uint64 | 交易发送方上次交易的nonce,用于交易的排序和去重。 | |
note | String | 交易备注。 | |
premium_price | String | 预留字段,默认为“0”。 | |
to_ledger_id | Uint16 | 预留字段,为"0"。 | |
receiver_action | Object | 交易接受方执行内容。 | |
action_authorization | String | action签名,json结构,当交易为部署合约交易时,此处需要输入合约的公钥信息,公钥用来验证合约账户与交易发送方账户是否匹配。 | |
action_ext | String | 预留扩展字段,空字符串。 | |
action_hash | Uint32 | 整个action的xxhash32。默认为"0",暂未使用。 | |
action_name | String | 调用合约时,合约的函数名。系统合约函数请参见系统智能合约API。非合约交易时,默认为空。 | |
action_param | String | 接收方执行内容。不同action type执行内容的序列化请参见action param序列化。 | |
action_size | Uint16 | action对象的大小。 | |
action_type | Uint16 | 接收方执行类型,不同的交易类型对应不同的action type,具体请参见本章“tx_type与action_type说明”。 xaction_type_create_contract_account = 3, // 创建用户合约账户 xaction_type_run_contract = 5, // 调用智能合约 xaction_type_asset_in = 6, // 资产转入 xaction_type_pledge_token_vote = 21, //锁定TOP token兑换选票 xaction_type_redeem_token_vote = 22, // 解锁兑换选票的TOP token xaction_type_pledge_token = 23, //锁定TOP token兑换gas xaction_type_redeem_token = 24, //解锁兑换gas的TOP token | |
tx_receiver_account_addr | String | 交易接受方账户地址。 | |
send_timestamp | Uint64 | 交易发送时间戳GMT。 | |
sender_action | Object | 交易发送方执行内容。 | |
action_authorization | String | action签名,json结构。 | |
action_ext | String | 预留扩展字段,空字符串。 | |
action_hash | Uint32 | 整个action的xxhash32。默认为"0",暂未使用。 | |
action_name | String | 预留字段,空字符串。 | |
action_param | String | 发送方执行内容。不同action type执行内容的序列化请参见action param序列化。 | |
action_size | Uint16 | action对象的大小。 | |
action_type | Uint16 | 发送方执行类型,不同的交易类型对应不同的action type,具体请参见本章“tx_type与action_type说明”。 xaction_type_asset_out = 0, // 资产转出。 xaction_type_source_null =1, // 源端不执行操作 | |
tx_sender_account_addr | String | 交易发送方账户地址。 | |
tx_deposit | Uint32 | 交易保证金,最低为0.1*10^6 uTOP。 | |
tx_expire_duration | Uint16 | 交易到期时长,超过则被丢弃,默认100s。 | |
tx_hash | String | 交易hash的十六进制。 | |
tx_len | Uint16 | 交易大小。交易消耗的gas与交易大小相关。 | |
tx_random_nonce | Uint32 | 随机数字。预留字段,为"0"。 | |
tx_structure_version | String | 交易结构版本号。默认为"0",暂未使用。 | |
tx_type | Uint16 | 交易类型,不同的交易类型,action中action_param(执行内容)及action type(执行类型)不同,具体请参见本章“tx_type与action_type说明”。 xtransaction_type_create_contract_account = 1, // 创建合约账户 xtransaction_type_run_contract = 3, // 调用智能合约 xtransaction_type_transfer = 4, // 转账 xtransaction_type_vote = 20, //投票 xtransaction_type_abolish_vote = 21, //取消投票 xtransaction_type_pledge_token_gas = 22, // 锁定TOP token兑换gas xtransaction_type_redeem_token_gas = 23, // 解锁兑换gas锁定的TOP token xtransaction_type_pledge_token_vote = 27, // 锁定TOP token兑换选票 xtransaction_type_redeem_token_vote = 28, // 解锁兑换选票锁定的TOP token |
# tx_type 与 action_type 说明
创建交易时,不同交易类型,对应的sender_action及receiver action中action_type不同。
注意
创建交易时,请确保tx_type与sender action type以及receiver action type按照以下表格进行配置,否则交易将失败。
交易名称 | 交易类型(tx_type) | 发送方执行类型(sender_action action_type) | 接收方执行类型(receiver_action action_type) | 备注 |
---|---|---|---|---|
创建用户合约 | 1: xtransaction_type_create_contract_account | 0: xaction_type_asset_out | 3: xaction_type_create_contract_account | |
调用合约 | 3: xtransaction_type_run_contract | 0: xaction_type_asset_out | 5: xaction_type_run_contract | 调用合约交易包括: 调用用户合约交易、调用系统合约交易、注册节点、注销节点、赎回节点保证金、更新节点类型、更新节点信息、减少节点保证金、增加节点保证金、设置节点昵称、设置分红比例、领取节点奖励、领取投票者分红、提交提案、撤回提案、TCC表决提案。 |
转账 | 4: xtransaction_type_transfer | 0: xaction_type_asset_out | 6: xaction_type_asset_in | |
投票 | 20: xtransaction_type_vote | 1: xaction_type_source_null | 5: xaction_type_run_contract | |
取消投票 | 21: xtransaction_type_abolish_vote | 1: xaction_type_source_null | 5: xaction_type_run_contract | |
锁定TOP token兑换gas | 22: xtransaction_type_pledge_token_gas | 1: xaction_type_source_null | 23: xaction_type_pledge_token | |
解锁兑换gas的TOP token | 23: xtransaction_type_redeem_token_gas | 1: xaction_type_source_null | 24: xaction_type_redeem_token | |
锁定TOP token兑换选票 | 27: xtransaction_type_pledge_token_vote | 1: xaction_type_source_null | 21: xaction_type_pledge_token_vote | |
解锁兑换选票的TOP token | 28: xtransaction_type_redeem_token_vote | 1: xaction_type_source_null | 22: xaction_type_redeem_token_vote |
action说明
action | 功能 | 参数 |
---|---|---|
xaction_type_source_null | 源端不执行操作 | 无。 |
xaction_type_asset_out | 资产转出 | symbol(代币符号)、amount(转出币的数量) |
xaction_type_create_contract_account | 创建合约账户(部署合约) | gas_limit(一次合约调用中,用户合约愿意付出的gas费用上限)、contract code(合约代码) |
xaction_type_run_contract | 调用合约 | action_name(执行合约的函数名)、action_param(执行合约的参数) |
xaction_type_asset_in | 资产转入 | symbol(代币符号)、amount(转入币的数量) |
xaction_type_pledge_token | 锁定TOP token兑换资源(gas) | symbol(代币符号)、amount(锁定币的数量) |
xaction_type_redeem_token | 解锁兑换资源(gas)的TOP token | symbol(代币符号)、amount(解锁币的数量) |
xaction_type_pledge_token_vote | 锁定TOP token兑换选票 | vote_amount(兑票数)、lock_duration(TOP token锁定期) |
xaction_type_redeem_token_vote | 解锁兑换选票的TOP token | vote_amount(赎回票数) |