7.2 交易示例
以一笔虚构的交易为例。假如1枚比特币与10枚以太币的价值等同,发送者(Sender)手上拥有1.1枚比特币,希望购买接收者(Receiver)提供的价值10枚以太币的服务。则发送者可以联系一个同时具有比特币地址与以太坊地址的连接方(Connector),并协商好代币转换的手续费为0.1枚比特币。那么交易的流程如图7-2所示(方案一):
图7-2 代币交易方案示意图
在这一过程里,风险较高的是传输1.1枚比特币的步骤:连接方有可能在收取1.1枚比特币后马上退出交易,使得发送方利益受损。合理的方案是把比特币的交付延后处理。当以太币实现交付后,再进行比特币交付,交易风险即转移至连接方(方案二)。
为了同时保障连接方的利益,需解决的问题是确保接收方在获得10枚以太币的同时,发送方的1.1枚比特币也送往连接方,两个事件需要同时发生。这实际上是交易“原子性”的体现:要么款项完全实现转移,要么款项完全未转移,不存在中间的状态。这一问题由预共享密钥(Pre-Shared Key,PSK)技术解决。
如果把1.1枚比特币看作一个交易包,10枚以太币看作另一个交易包,在PSK技术中,这两个交易包都由同一个密钥启动,从而实现“两者同时发生”。
发送方预先由加密算法得到一个密钥,把密钥发送给接收者,把相关信息发给连接方。同时,发送方将自己的1.1枚比特币锁定在交易包1里,需要密钥才能转移款项。
连接方通过发送方给出的信息,制作一个包含10枚以太币的交易包2并发给接收者。当接收者用密钥打开交易包2时,接收者获得10枚以太币,同时密钥也被发送给连接方,连接方可以使用该密钥获得交易包1里的1.1枚比特币。这样一来就实现了代币之间的互换。
为避免款项锁定时间过长,交易包1、2均需约定限制时间,超出时间后,款项即解锁、返回原地址,这就是时间锁(Timelock)功能。而上文提到的预共享密钥则使用了哈希加密(Hashed),因此该技术方案被称为哈希时间锁协议(Hashed-Timelock Agreements)。