-
Notifications
You must be signed in to change notification settings - Fork 1k
交易所如何给用户分发Gas
-
对用户Neo持仓每隔固定时间进行数据快照;
-
计算单个用户Neo持仓量权重:对单个用户所有快照时持仓量权重求和(权重 = 持仓量*持仓时间);
-
计算所有用户Neo持仓量权重:对所有用户所有快照时持仓量权重求和(权重 = 持仓量*持仓时间);
-
计算分发的Gas总量并提取;
-
计算分发比例并向所有用户分发Gas;
-
假设交易所所有地址都在一个钱包里;
-
计算过程: TotalNeoGas = 分发的Gas总量,由交易所确定
NeoAmountA1 = A用户第1次快照时刻持仓量
NeoAmountA = NeoAmountA1 + … + NeoAmountAn
NeoAmountTotal = NeoAmountA + … + NeoAmountZ
NeoRatioA = NeoAmountA / NeoAmountTotal
所以A用户应得Gas数量为:
DistributedGasA = TotalNeoGas * NeoRatioA -
快照间隔越短,计算越精确;
-
如果快照时间间隔不均匀,可以采用加权平均算法:
TotalNeoGas = 分发的Gas总量,由交易所确定
Tn= 第n次快照时刻与第n-1次快照时刻间隔
NeoAmountA1 = A用户第1次快照时刻持仓量
NeoAmountA = NeoAmountA1 * T1 + … + NeoAmountAn * Tn
NeoAmountTotal = NeoAmountA + … + NeoAmountZ
NeoRatioA = NeoAmountA / NeoAmountTotal
所以A用户应得Gas数量为:
DistributedGasA = TotalNeoGas * NeoRatioA
- 运行客户端
./neo-cli.dll /rpc
- 查看客户端版本
version
- 查看客户端同步高度
show state
Height: 区块高度/区块头高度, Nodes: 连接节点数量
- 创建钱包
create wallet /home/NeoNode/test.db3
- 打开钱包
open wallet /home/NeoNode/test.db3
- 查看钱包里的地址列表
list address
- 查看钱包资产
list asset
- 获取钱包Neo Gas余额详情
show gas
- 给自己的钱包地址转账,通过给自己转账将gas状态变为可提取状态
send NEO AaAHt6Xi51iMCaDaYoDFTFLnGbBN1m75SM 1
- 再次获取钱包Neo Gas余额详情,此时所有gas都为可提取状态
show gas
- 提取Neo Gas
claim gas
- 再次查看钱包余额,确认提取成功
list asset
-
简介
Neo Gas共1亿份,代表了Neo区块链的使用权。Neo Gas会随着每个新区块的生成而产生,依照既定的缓慢衰减的发行速度,经历总量从0到1亿的过程,约22年达到1亿总量。只要获得Neo,Neo Gas便会在系统中按照算法自动生成。 -
基本概念
每一个Neo都有两种状态:unspent和spent。每一个Gas也有两种状态,available和unavailable。一个Neo的生命周期以转入地址起始,转出地址截止,转入时状态变为unspent,转出时状态变为spent。当Neo处于unspent状态时,所产生的Gas为unavailable状态,即不可提取。当Neo处于spent状态时,期间所产生的Gas变为available,用户可以提取。 -
数学模型
t_start = Neo变为unspent状态时刻
t_end = Neo变为spent状态时刻
Δt_const = t_end - t_start
Δt_var = t - t_start,t为当前时刻
可提取的Gas = f(neo_amount, Δt_const)
说明:由于Δt是定量,所以可提取的Gas也是一个定量。可提取Gas的大小取决于所持有的Neo数量以及两个状态的时间差。
不可提取的Gas = f(neo_amount, Δt_var)
说明:由于t是变量,所以不可提取的Gas也随时间增长而不停增长,是一个变量。 -
怎么提取Gas
将地址中的Neo完成一次转账即可,例如: 地址A中有Neo,Gas为不可提取状态, 那么只需要将Neo转给自己,Gas即可变为可提取状态。 -
用途
- 支付Neo区块链的记账费
- 支付Neo区块链的附加服务费