Skip to content

手续费模型

Aten edited this page Aug 22, 2019 · 1 revision

ChainX的手续费模型

ChainX参考了以太坊,波卡的手续费系统,设计了一套特有的手续费模型。

ChainX手续费的基础概念:

  1. 交易权重 weight
  2. 交易基础费transaction_base_fee
  3. 交易字节费transaction_byte_fee
  4. 交易加速accelerate

在ChainX中

  • weight:交易可调用的方法赋予了名为weight的权重,例如转账transfer的权重是1,withdraw的权重是3。weight代表了这个交易的复杂度,或者耗费的资源,其权重的基础值是transaction_base_fee。换句话说,几个交易赋予了多少了weight代表着这个交易的复杂度是基本交易的几倍。weight可由议会进行调整
  • transaction_base_fee:交易权重的基本值,即其代表一倍权重对应的手续费大小
  • transaction_byte_fee:交易每字节的手续费大小,由于交易需占用一定的空间,因此交易越大,对应的手续费就越多
  • accelerate:交易的加速倍数,当2个交易相同时,付出的accelerate越高在交易池中的排序也越高,越容易被打包,对应的手续费也会耗费对应的倍数。该概念类似于以太坊的gas price,应由用户选择提供的数值。

ChainX的手续费计算方式:

fee = (transaction_base_fee * weight + transaction_byte_fee * len(交易长度)) * accelerate

由该计算方式可以看到,其中:

  • weighttransaction_base_feetransaction_byte_fee由ChainX链上提供
  • 交易长度lenaccelerate由交易发送方决定

ChainX提供的手续费相关接口

当前ChainX提供了2个于手续费计算相关的rpc

  1. chainx_getFeeByCallAndLength

    该接口传递交易编码过的function原文(注意不是交易体,是交易体中的function部分),交易长度,可以在ChainX节点中计算获取 未加速前的手续费值。

  2. chainx_getFeeWeightMap

    该接口可获取当前ChainX链上的weight列表,transaction_base_feetransaction_byte_fee。开发者可根据这三个参数在本地根据上述公式计算得到应付的手续费。