公链设计中可能对Transaction做的几点改进
考虑到比特币和以太坊等公链不具备的一些转账交易(Transaction)人性化选项,在新的公链设计中,可以考虑考虑下面的几个改进点:
1、账户注册、实名制、匿名交易
在以太坊和比特币系统中,Alice转账给Bob时,区块链上不一定要有Bob的地址信息。直到收到第一笔转账金额后,区块链上才能查阅到该地址信息。这就可能导致一些错误转账、黑洞地址等问题。比特币和以太坊之所以这样设计,可能是因为他们是开创性的项目,需要考虑到匿名性以支持灰色金融场景。不过随着区块链数字货币的普及,在新的公链设计中,最终需要考虑正常的使用场景。
引入账户注册的好处就是,在注册账户的时候,可以设定很多其他功能选项,比如:用户在进行转账的时候,可以指定【地址注册选项】,若目标地址未经过注册过,是不允许接收转账额度的,这样就避免了错误转账、黑洞地址。
账户注册功能还有可能进一步发展,而支持实名制账户,支持实名制交易。在现实应用场景中,实名与匿名都有必要性,所以公链设计中需考虑提供这些选项。让用户自己选择实名制还是匿名交易。账户注册未必损失去中心化特性,这要看账户注册时需要绑定什么信息。若用户选择实名制,区块链可以提供支持,但是用户也有选择匿名的自由。
2、收款方支付矿工费用
注册账户都可开启【接受做为收款方支付手续费】的功能,默认情况下,此项功能是关闭的。即:Alice给Bob转账,若Bob开启了该项功能,则可以由Bob支付手续费。
为了避免付款方可能发起的恶意攻击,该项功能会带有一个参数,指定转账总额度与手续费之间的比率范围,这样就避免了Alice给Bob转很少的钱,却消耗了Bob很多手续费的问题。矿工打包交易入块之前,就可以根据实际情况决定是否接受此交易。
这项功能是非常实用的,用户在进行以太坊ERC-20 Token转账时通常会遇见没有以太币就不能进行XX-Token的转账。有了收款方支付手续费的功能后,就方便许多了。
3、交易生效的时间范围
比特币系统提供了NLocktime和Sequence功能,可以指定某一笔交易在什么时间之后或者经过多少区块之后可进入区块,这个功能为跨链原子交易和闪电网络都提供了很好的基础砖块。以太坊也可以通过智能合约模拟出这一功能。这是为了“未来的行为”做支持。区块链系统还有必要为“当下的行为”提供良好的支持。
因为用户在发送一笔交易后,并不能确定这边交易要等到什么时候才能被打包入块,用户需等待一段未知时间,遇到网络拥堵的时候,就更麻烦了。用户为了取消已经发送出去的交易,甚至不得不重新发送一笔支付了高额手续费的双花交易,试图抢先一步入块,进而达到取消前一笔交易的目的。这对用户非常不友好,所以对NLocktime这个功能做一次推广就很有必要。用户可以指定已发送交易的失效时间或者区块数量参数,在这个时间段之后,用户可以确切地知道自己发送的交易是否已经生效。若交易没有生效,则可以重新签署并再次发送,而不是茫然地等待着不确定的随机时间。将失效时间和上块时间统一为一个参数,用户可以更方便、更确切地控制交易的生效时间点。
4、排他交易入块选项
在编写以太坊智能合约时,发现有时候需要一种特殊的排他交易选项:一个区块内,最多只允许一笔交易的目的地址为该合约地址。之所以这么做,是为了防止矿工作恶,因为矿工负责打包交易,矿工可以针对某些合约做特殊监控,而且矿工可以分析出交易里的任何参数,很容易通过操纵交易的入块顺序和一个区块里的同类交易的数量而获得预期之外的收益。若用户在发交易的时候,可以指定交易入块的排他性,指定交易只能以顺序化的方式依次触发合约执行便利,就能为部分合约设计提供便利。这一功能选项对于普通转账也是有用的,让目标地址的转账记录更加容易被区分出来,方便用户核查账目。该参数选项可以由目标账户设定,也可由发起方设定,或者互相配合设定。