如何使用代币本身作为矿工费?EIP965和slp邮资协议或可解决
代币经济是公链最大的应用,但发送代币需要主网币作为矿工费这点很反人类习惯。以太坊上的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。
但以太坊的这一解决方法一直没有流行,相反,以太坊普遍采用了中心化的解决方案。
交易所其实都解决了这个问题,我们在交易所提任何代币都不需要主链币作为矿工费的,交易所直接帮我们扣代币,然后交易所自己会添加主链币作为矿工费。
比特派作为钱包商,也出过帮用户代付矿工费的解决方案。
中心化的解决办法说白了就是用户用代币换中心化公司的主链币,甚至用户可以用人民币来换。
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交易时,允许第一个发送者只组装部分输入并签名和所有输出,并且空缺若输入,或者在脚本上设置满足多少金额的输入后即生效。然后其他钱包在收到这个交易时可以主动添加后续输入并签名,但不能添加输出。然后再广播给矿工打包,矿工可以验证交易是否合法。
有了以上知识就可以描述邮资协议的基本逻辑了:
因为邮资协议是公开的,任何人都可以搭建邮资服务器,但需要钱包端的支持。钱包需要用户能够构建anyonecanpay交易,并且默认添加slp矿工费给邮资服务器。
邮资协议是在2019年末提出的,我只看到面包钱包集成了。但随着slp代币的流行,估计其他钱包也会跟随的。
邮资协议需要BIP70的支持,BIP70是一个支付协议,细节不用关心了。BTC禁用了BIP70,所以BTC不能使用邮资协议。
BTC生态总体思路是场景收缩,集中于实现去中心化和储值。BTC的一个设计理念就是交易格式越来越少,集中做那些交易尺寸小的交易。比如和本文中提到的anyonecanpay格式相对应的还有一个叫anyonecanspend的交易,BTC就禁用了。
像邮资协议这种把交易搞的更复杂,去适应更多的场景的协议,BTC生态都不怎么爱搞,有人提也得不到支持。