最近有朋友咨询我关于BTC转账的事情,他表示对BTC转账收取矿工费这一行为很不理解:“你们不是整天都说比特币是去中心化的吗?那为啥每次使用比特币转账还要扣矿工费?这些扣的矿工费哪里去了?多少的矿工费才是最合适的?”
“这是TP公众号上一期关于挖矿的科普文章——是利益的诱惑还是欲望的驱使?带你了解神秘的BTC挖矿,你先看完。”我将上一期文章的链接甩了过去。
大约过了一刻时间,他看完又来询问:“挖矿费是给矿工了吗?那矿工不是已经有挖矿的奖励了吗,为什么还要给他矿工费啊?”
我猛然发现很多我们认为理所当然的事情,其实都是人云亦云,默认了其存在合理性,但是实际并不了解其背后的原理。因此,我觉得有必要深究一下BTC转账背后的事情。
矿工费存在的原因
首先关于矿工和挖矿的细节在上一期的挖矿科普文章中已经详细说明,上文也有链接,没看过的建议去看一下。但是因为上一期的主题是挖矿,所以涉及到交易的方面我没有展开讲,这里要给大家说明一下:矿工将交易信息打包进区块时,他会获得对应的收益作为激励,收益包含两部分:一部分是挖矿的产出,一部分是打包的交易中的矿工费。至于为什么明明有了挖矿产出还需要矿工费激励,可以从以下几个方面去考虑:
1、激励。上文提到矿工的激励包含挖矿收益和矿工费两部分。但是考虑到BTC减产的问题,大约在2140年BTC会被挖完。如果没有矿工费,这个时候将没有足够的激励来促使矿工继续工作。虽然现在看来与挖矿产出相比,矿工费少的可怜,但是到时候必然也会有一批矿工停机,那个时候币价与算力会重新达到平衡。关于激励机制,中本聪在BTC白皮书中有过这样的描述:“只要既定数量的电子货币已经进入流通,那么激励机制就可以逐渐转换为完全依靠交易费”。所以只要有足够多的交易需求,矿工费还是可以使一部分矿工在BTC停产后还能够继续为BTC网络的安全提供算力保障。
2、阻止大量的微量、垃圾交易冲击网络。这个应该不难理解,如果没有矿工费,即转账交易没有门槛,交易者无需考虑转账成本问题。那到时候必然会有很多微量和垃圾交易充斥BTC网络,极大地影响BTC网络的性能。
以上即为矿工费存在的原因,是对其存在合理性的解释。文首我朋友的提问属于对去中心化概念的混淆,觉得所谓去中心化就应该没有矿工,没有矿工费,但是有无矿工与是否去中心化之间是没有直接关联的。在BTC矿工分布式存在的基础上来看,矿工可以被看做是系统的维护者,他们既保证了BTC网络的平稳运行,又不会干预系统本身的运行方式,因此不会改变系统的去中心化特质。当然,在如今的算力分布情况下,如果考虑到以国家或者矿池为单位,算力的集中或许会破坏系统的去中心化,这就是题外话了,我们暂且不考虑。
矿工费和交易速度
聊完合理性,我们再来聊聊矿工费高低对交易速度的影响问题。假设你作为一名矿工,在进行区块打包时,为了利益最大化,你会优先选择按照矿工费的高低顺序来打包还是按交易发起的时间早晚来打包?答案必然是按矿工费高低顺序打包。由于一个区块的大小是固定的,因此在交易高峰时期(同时进行的交易数量非常多),一个区块内放不下,那么这次没有进行打包的交易就会滞留到下次。因此很多人为了快速到账,会采取提高矿工费的方式。如果一个交易的矿工费给得很低,很可能面临一直不会被打包的情况,直至拥堵消失,交易数量变少后才能被打包。
就目前的市场来讲,如果交易不给矿工费,矿工一般是不会去打包的,所以现在钱包上转账时都会设定一个最低的矿工费(即交易手续费)。如果你的转账金额数量很大并且希望快速到账,你可以在钱包转账设置里选取最大的手续费,或者自定义本次交易的手续费。如果你的转账金额不大且无所谓到账速度,那你可以选择小额手续费。相对于这两种比较极端的情况,我们平时大多数的情况下,都是希望在不影响到账速度的情况下,尽可能地节省手续费,但是手续费应该设置多少才合适呢?
首先你要先知道,交易的矿工费是怎么计算。现在大部分钱包是按照交易字节大小来设置矿工费的,计算公式是:交易的字节大小 * 每字节的矿工费。用户通过手动调节每字节矿工费的数值来设定整个交易的矿工费,每字节的矿工费越高,交易的速度就越快。所以要做到又快又省,就要从交易的字节大小和每字节的矿工费这两点入手。你可以把交易的字节大小理解为交易所蕴含的信息,通常由交易的输入和输出来决定。正常来说我们的转账交易都是一对二的,即一个输入地址(我们自己的地址)和两个输出地址(对方的地址和找零地址),一对二的交易大小一般为226字节左右。至于多对多的交易情况我就不详细展开讲了,本文只考虑一般情况,大家兴趣可以去查查UTXO记录模型资料,看不懂的话可以在TokenPocket公众号后台留言给我们,我会考虑单独写一期专门介绍UTXO的文章。
隔离见证带来什么
看到这里你可能会问,对于一般的一对二的交易,字节大小不是固定的吗?有什么方法可以改变交易字节的大小吗?还真有,那就是隔离见证交易。所谓的隔离见证交易简单来说就是将交易分成两部分,一部分是交易数据;第二部分是见证数据,隔离见证交易会将见证数据隔离在区块基本信息之外,可以有效的降低交易的字节大小,解决延展性攻击的问题,顺带变相增加了区块的交易容量。在使用隔离见证交易时,一对二的交易大小可以减小到142字节左右。
因此,在每字节矿工费用一定的情况下,使用隔离见证交易的矿工费要更低。很多人可能对隔离见证交易没概念,也不知道怎么操作,这点不用担心,TokenPocket钱包会帮你搞定。我们只需在Token Pocket钱包转账BTC时,选择转账给隔离见证兼容地址即可。隔离见证的地址多以“bc”开头,而普通地址则以“1”开头,“3”开头可能是多重签名地址或过渡期用的隔离见证地址。
在使用隔离见证减小了交易字节大小之后,就要探讨如何科学合理的设置每字节的矿工费,以达到费用与速度的兼容。
如何设置最优GAS
关于手续费的设置,我之前一直使用的都是BTC.com上推荐的最佳手续费。但是这个推荐手续费使用起来并不好用,还需要经过一些换算,也无法直观地看到等待情况,非常不适合新手。后来我在网上找到了一个对新手很友好也很方便的工具网站:https://bitcoinfees.earn.com。
打开网站,首先在左上角Fees的位置,将费用的单位调成Satoshis。Satoshi即sat,是BTC的最小计量单位,换算公式为1BTC=10^8sat,用sat可以很方便直观的表示微量BTC。举个例子,我说0.0000001BTC肯定没有用10sat方便和容易理解。现在绝大部分钱包在设置矿工费用是都以sat/b为单位,所以在网站里改成这样的单位就可以免去换算直接操作。设置好单位之后,我们来看条形图,最左边的是数字0、1-2、3-4依次往下表示矿工费的范围。每个范围对应两个条形,上方橙红色的条形表示还未确认的交易数,下方蓝黑色的表示已经确认的交易数目。我们再把目光转到条形图右边,Delay表示可能延迟的区块数,Time即对应的预估确认时间。
要注意的是,上方的橙红色条形图是会随着费用范围的变化逐渐变绿的。我们可以认为,橙红色代表交易确认速度很慢,不理想。从上往下看,随着矿工费用的增加,橙红色的条形逐渐变绿,首先变绿的那个条形对应的范围可以看成是临界区间,在这个区间内,性价比最高,在下图中我们可以看到,每字节矿工费为45-46sat时,条形完全变绿,此时等待区块数为0-1个,确认时间约为30分钟。
如果你不想等太久,又拒绝高额的矿工费,那就只需要在用钱包转账时把每字节矿工费设置成45-46sat/b,这里我们以Token Pocket的转账为例,可以看到钱包里已经贴心的提示了最佳的费用数目为46sat/b,与我们的目标一致,一键即可设置,懒人福音!当然如果你就是钱多任性,也可以去高级设置里自定义更高的费用。
最后我们回顾一下,想要做到转账最快,矿工费最省需要做到两点:
1、使用例如TokenPocket钱包这样支持隔离见证的钱包进行转账交易;
2、使用工具网站:https://bitcoinfees.earn.com 根据自己的需求选择合适的矿工费用或者使用TokenPocket钱包的推荐费用。
BTC系列知识科普专题是由TokenPocket发起的有深度、有态度的大型科普性内容专题,旨在科学系统地普及区块链及数字货币、数字钱包等相关知识。TokenPocket是全球领先的数字货币钱包,已为数百万用户提供可信赖的数字货币资产管理服务。专题文章由钱包社区优秀志愿者TP侠撰写投稿,文章版权归作者及TokenPocket所有,转载请注明出处。