mt logoMyToken
Market cap:
0%
FGI:
0%
Cryptocurrencies:--
Exchanges --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

如何使用代币本身作为矿工费——EIP965和slp邮资协议

Collect
Share
代币经济是公链最大的应用,但发送代币需要主网币作为矿工费这点很反人类习惯。以太坊上的Erc20代币需要ETH作为矿工费,比特币上的omni代币需要btc作为矿工费,比特币现金上的slp代币需要BCH作为矿工费。这些都很烦人。

有很多人愿意持有usdt稳定币,但不持有比特币和以太坊。我曾经卖过少量的BTC和ETH给人作为矿工费,原价10块钱,卖20块钱。

我们付人民币,支付美元,从来不需要黄金作为矿工费。为什么付usdt-Erc20代币需要用ETH作为矿工费,烦死。有没有办法让支付代币免于主链币矿工费?

公链为什么一定需要矿工费

在链上发送交易,无论是主网币还是链上代币,都需要支付主网矿工费。这主要是为了防止DDoS,试想如果不需要矿工费,一个人生成两个地址,写个脚本无限相互转账,每天产生几亿几亿的交易数据发到链上,整个区块链不得爆掉啊。

发送链上代币能不能默认不使用主链币作为矿工费呢?为什么没有哪条公链会设计成发送代币使用代币本身作为矿工费?

代币是可以随意生成的,如果一个人发了一个代币,它本身没有价值,然后用这个代币无限在链上发交易,这不也把链给搞死了吗?

有没有办法让发代币不需要主链币作为矿工费,而且还能免于DDoS?

以太坊的解决方案

以太坊是最大的代币经济平台了,目前币圈主流的代币都跑在以太坊,以太坊也最迫切需要一个免ETH发代币的解决方案。

其实理论上,以太坊是非常容易解决这个矿工费的问题的。因为以太坊是一个智能合约平台,只需要写一个专门为代币交易支付ETH矿工费的合约即可解决问题。

以太坊分别有一为代币支付ETH矿工费的提案EIP965(https://github.com/ethereum/EIPs/issues/965),还有一个未分配到EIP代号的提案:ERC865(https://github.com/ethereum/EIPs/issues/865)

以太坊解决这个问题的基本思路是这样的:

设计一个智能合约。

往合约里预存一些ETH。

合约设计一个白名单ERC20代币列表。

在白名单内的ERC20代币,用户发送代币交易时调用该合约。(这需要钱包设计好)

用户的交易需要给合约支付一笔所发送的代币作为矿工费。

合约会给用户发送交易时支付一笔ETH矿工费,这样交易就可以被矿工打包了。

本质上以太坊的免矿工费发代币是设计一个合约商店,让用户使用代币换ETH。

但以太坊的这一解决方法一直没有流行,相反,以太坊普遍采用了中心化的解决方案。

中心化解决方案

交易所其实都解决了这个问题,我们在交易所提任何代币都不需要主链币作为矿工费的,交易所直接帮我们扣代币,然后交易所自己会添加主链币作为矿工费。

比特派作为钱包商,也出过帮用户代付矿工费的解决方案。

中心化的解决办法说白了就是用户用代币换中心化公司的主链币,甚至用户可以用人民币来换。

BCH的解决方案

BCH的代币经济系统slp协议现在开始慢慢进入主流了,也需要解决发代币免使用BCH作为矿工费的问题,以提高用户体验。

BCH开发者提出一个叫slp邮资协议的解决方案。(slp-postage-protocol:https://github.com/simpleledger/slp-specifications/blob/master/slp-postage-protocol.md)

使用slp邮资协议发交易的基本构成如下:

用户使用anyonecanpay发送slp交易,交易输入至少两个:

Input1:用户需要发送的slp币
Input2:空留一个bch输出,留给邮资协议服务商补齐
Input3:一般邮票金额是固定的,如果用户的交易尺寸比较大,就需要贴多张邮票,就需要空留多个Input给邮资协议服务商贴邮票。

交易输出至少三个:

Output1:用户发送的slp币的目标地址
Output2:服务商的收币地址,用户使用slp币支付给邮资协议服务商的邮票
Output3:邮资协议服务商的地址,input2的BCH金额-output3的BCH金额=矿工费。如果有多张邮票,就会有output4这些。

补充一点Anyonecanpay的交易格式知识。

如其名,就是任何人都可以支付的交易。一般交易钱包组装交易时会把所有的输入输出都写好,并把输入的签名写好,然后发送出去。

钱包组装anyonecanpay交易时,允许第一个发送者只组装部分输入并签名和所有输出,并且空缺若输入,或者在脚本上设置满足多少金额的输入后即生效。然后其他钱包在收到这个交易时可以主动添加后续输入并签名,但不能添加输出。然后再广播给矿工打包,矿工可以验证交易是否合法。

有了以上知识就可以描述邮资协议的基本逻辑了:

邮资服务器设立slp代币白名单列表。
在白名单内的slp用户使用anyonecanpay交易格式发送slp代币。
邮资服务器收下一部分代币。
服务器给交易贴邮票,即添加BCH矿工费,追加到用户的交易里。
交易成立,矿工验证并打包。

因为邮资协议是公开的,任何人都可以搭建邮资服务器,但需要钱包端的支持。钱包需要用户能够构建anyonecanpay交易,并且默认添加slp矿工费给邮资服务器。

邮资协议是在2019年末提出的,我只看到面包钱包集成了。但随着slp代币的流行,估计其他钱包也会跟随的。

BTC能能使用邮资协议吗?

邮资协议需要BIP70的支持,BIP70是一个支付协议,细节不用关心了。BTC禁用了BIP70,所以BTC不能使用邮资协议。

BTC生态总体思路是场景收缩,集中于实现去中心化和储值。BTC的一个设计理念就是交易格式越来越少,集中做那些交易尺寸小的交易。比如和本文中提到的anyonecanpay格式相对应的还有一个叫anyonecanspend的交易,BTC就禁用了。

像邮资协议这种把交易搞的更复杂,去适应更多的场景的协议,BTC生态都不怎么爱搞,有人提也得不到支持。
关键词: 矿工费 EIP965
Disclaimer: The copyright of this article belongs to the original author and does not represent MyToken(www.mytokencap.com)Opinions and positions; please contact us if you have questions about content