# 资源模型
# 概述
TOP AI Network链上的交易可被分为分片交易、Beacon系统交易、Beacon系统交易,每笔交易都会消耗链上资源。
像NET、CPU这种临时占用的资源,我们称为gas。
每个账户:包括智能合约账户和普通账户,都有免费的gas资源配额。
为了获得更高的配额,账户必须锁定TOP Token以兑换gas资源。
# gas 消耗规则
gas消费规则根据交易涉及的交易类型以及账户类型而不同。
非调用合约的交易,仅向发起方收费。
普通账户调用用户合约交易,优先向发起方收费,发起方与合约共同承担(用户合约可设置愿意为交易支付的gas费上限)。
普通用户调用系统合约向发起方收费,系统内部触发的系统合约调用不收取费用。
交易消耗的gas如下表所示。
交易类型 | 总消耗gas | 交易费发送方支付 | 交易接收方支付 | 备注 | |
---|---|---|---|---|---|
单账户交易 | tx_len*1 | tx_len*1 | - | - | |
跨账户交易 | 非调用合约交易 | tx_len*3 | tx_len*3 | 0 | - |
调用系统合约交易 | tx_len*3 | tx_len*3 | 0 | - | |
调用用户合约交易 | tx_len*3+CPU ns(合约指令集)/40 | 费用的一半由发送方承担,另一半优先由用户合约承担,合约无法支付再由发送方承担 | min(gasLimit,合约余额,receiver action消耗的gas/2) | gasLimit:合约愿意为交易发送方付出的每笔交易的gas费用上限。 |
对于Beacon系统合约交易来说,除了会消耗gas,交易发送放还将会被自动扣除一笔手续费并被销毁,当前为100*10^6 uTOP token。这一小笔费以保护Beacon系统免受泛滥交易攻击。
当前需要扣除Beacon交易手续费的交易包括:
注册矿工、启动节点、更新矿工信息、增加矿工保证金、减少矿工保证金、修改矿工昵称、设置分红比例、更新矿工类型、赎回矿工保证金、注销矿工、发起提案、撤回提案、表决提案。
# 交易费计算
交易费用的计算公式如下:
交易费用 = tx_fee
+ send_block_info
中的 used_depost
+ confirm_block_info
中的 used_deposit
对于转账交易,tx_fee
= 0,confirm_block_info
中的 used_deposit
= 0,所以 交易费用 = send_block_info
中的 used_depost
。
代码示例如下,您可通过 getTransaction 接口查看各字段的含义。
{
"data" : {
"original_tx_info" : {
"amount" : 1000000,
"authorization" : "0x01c00cf3c8ca7c883b7ab130ac56ccb53c2c066640659d9babe21655a6b3a073455a3b8d06ee5b1a955b756a7800f0230afc7299a97f3ca9c57555d7890518472b",
"edge_nodeid" : "",
"ext" : "",
"last_tx_nonce" : 4,
"note" : "",
"premium_price" : 0,
"receiver_account" : "T8000042537218707b66d49fc06143b60d029cfe2b65f4",
"receiver_action_name" : "",
"receiver_action_param" : "0x03000000544f5040420f0000000000",
"send_timestamp" : 1645012819,
"sender_account" : "T800008c5a874df3f8b6d1e357890f881704bf8849feeb",
"sender_action_name" : "",
"sender_action_param" : "0x03000000544f5040420f0000000000",
"token_name" : "",
"tx_deposit" : 100000,
"tx_expire_duration" : 100,
"tx_hash" : "0xb014bcfa3bb14f350531c95f0a5c32f32aaabb5aaaebe9cc214aab3776f483fe",
"tx_len" : 137,
"tx_structure_version" : 2,
"tx_type" : 4
},
"tx_consensus_state" : {
"confirm_block_info" : {
"account" : "Ta0000@31",
"exec_status" : "success",
"height" : 28,
"recv_tx_exec_status" : "success",
"used_deposit" : 0,
"used_gas" : 0
},
"recv_block_info" : {
"account" : "Ta0000@27",
"height" : 17,
"used_gas" : 0
},
"send_block_info" : {
"account" : "Ta0000@31",
"height" : 25,
"tx_fee" : 0,
"used_deposit" : 0,
"used_gas" : 411
}
},
"tx_state" : "success"
},
"errmsg" : "OK",
"errno" : 0,
"sequence_id" : "1"
}
# 每日免费 gas
默认情况下,若账户余额大于等于100 TOP token,该账户每24小时还会被免费赠送25,000Tgas。这允许该账户每日可以进行多次免费交易。
最低限额可避免作恶者使用免费分配的gas来创建大量账户和泛滥交易实施攻击。
账户已使用gas随时间逐步衰减,24小时(链上治理参数)后衰减到0,即可用gas恢复到gas额度,衰减的公式如下:
比如在时间T1时刻,账户gas已使用量为U,到T1+12h,账户再次使用gas为u,此时账户已使用TGAS为 U/2 + u。
# 锁定 TOP token 兑换 gas
普通账户和合约账户都可以锁定TOP token以兑换更多的gas(合约账户无法主动发起,可由部署合约的父账户发起)。
兑换gas的公式如下:
其中:系统总gas=单片gas*分片数(validator_group_count)。单片gas和分片数可以通过链上治理调整。分片数目前被设置为4,系统gas总量随着分片数的增长而增长。
锁定在系统中的TOP token总数每十分钟更新一次,其值存储在一个系统合约中。
系统总锁定TOP=初始值+用户锁定值,以免初始gasprice为0。
一个普通账户24小时内可以获得的gas不超过200,000Tgas,大约可以发起800条交易。
一个合约账户24小时内可以获得的gas不超过10,000,000Tgas,大约可以执行4万条交易,使用4秒CPU。
# gas 消耗与 NET/CPU 的关系
1Tgas相当于1byte的带宽或40ns的CPU时间。
字节是根据原始交易的大小计算的。
CPU时间仅在执行合约时消耗,并且总CPU时间是根据合约指令集确定的。
一个交易最多允许消耗25,000Tgas。
# 交易保证金(tx_deposit)
大多数用户将有足够的免费gas来满足他们的日常需求,而那些发送较多交易的用户可能会用光gas,并需要支付一笔数额很小的交易保证金。
当账户没有足够的gas来发送交易时,TOP AI Network将从其交易保证金(tx_deposit)余额中扣除一部分费用兑换gas以支付交易费用。
交易保证金余额必须大于或等于0.1 TOP token来抵消gas花费,这笔费用随即被销毁。
每笔交易保证金从账户除转账金额以外的账户余额中冻结。
当前交易保证金兑换gas比例设置为:1Tgas=100 uTOP token。
交易保证金可以通过链上治理进行更改。