Skip to content

交易所如何给用户分发Gas

Peter Lin edited this page Oct 9, 2017 · 10 revisions

交易所给用户分发Gas步骤

  1. 对用户Neo持仓每隔固定时间进行数据快照;

  2. 计算单个用户Neo持仓量权重:对单个用户所有快照时持仓量权重求和(权重 = 持仓量*持仓时间);

  3. 计算所有用户Neo持仓量权重:对所有用户所有快照时持仓量权重求和(权重 = 持仓量*持仓时间);

  4. 计算分发的Gas总量并提取;

  5. 计算分发比例并向所有用户分发Gas;

具体分发步骤

  1. 假设交易所所有地址都在一个钱包里;

  2. 计算过程: TotalNeoGas = 分发的Gas总量,由交易所确定
    NeoAmountA1 = A用户第1次快照时刻持仓量
    NeoAmountA = NeoAmountA1 + … + NeoAmountAn
    NeoAmountTotal = NeoAmountA + … + NeoAmountZ
    NeoRatioA = NeoAmountA / NeoAmountTotal
    所以A用户应得Gas数量为:
    DistributedGasA = TotalNeoGas * NeoRatioA

  3. 快照间隔越短,计算越精确;

  4. 如果快照时间间隔不均匀,可以采用加权平均算法:
    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提取Gas的操作过程说明

  1. 运行客户端

./neo-cli.dll /rpc

  1. 查看客户端版本

version
img

  1. 查看客户端同步高度

show state
img
Height: 区块高度/区块头高度, Nodes: 连接节点数量

  1. 创建钱包

create wallet /home/NeoNode/test.db3
img

  1. 打开钱包

open wallet /home/NeoNode/test.db3
img

  1. 查看钱包里的地址列表

list address
img

  1. 查看钱包资产

list asset
img

  1. 获取钱包Neo Gas余额详情

show gas
img

  1. 给自己的钱包地址转账,通过给自己转账将gas状态变为可提取状态

send NEO AaAHt6Xi51iMCaDaYoDFTFLnGbBN1m75SM 1 img

  1. 再次获取钱包Neo Gas余额详情,此时所有gas都为可提取状态

show gas
img

  1. 提取Neo Gas

claim gas
img

  1. 再次查看钱包余额,确认提取成功

list asset
img

Neo Gas的介绍

  1. 简介
    Neo Gas共1亿份,代表了Neo区块链的使用权。Neo Gas会随着每个新区块的生成而产生,依照既定的缓慢衰减的发行速度,经历总量从0到1亿的过程,约22年达到1亿总量。只要获得Neo,Neo Gas便会在系统中按照算法自动生成。

  2. 基本概念
    每一个Neo都有两种状态:unspent和spent。每一个Gas也有两种状态,available和unavailable。一个Neo的生命周期以转入地址起始,转出地址截止,转入时状态变为unspent,转出时状态变为spent。当Neo处于unspent状态时,所产生的Gas为unavailable状态,即不可提取。当Neo处于spent状态时,期间所产生的Gas变为available,用户可以提取。

  3. 数学模型
    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也随时间增长而不停增长,是一个变量。

  4. 怎么提取Gas
    将地址中的Neo完成一次转账即可,例如: 地址A中有Neo,Gas为不可提取状态, 那么只需要将Neo转给自己,Gas即可变为可提取状态。

  5. 用途

  • 支付Neo区块链的记账费
  • 支付Neo区块链的附加服务费