在区块链的世界里,有一类特殊的地址被称为“黑洞地址”,它们接收的通证永远无法再被转出,如同宇宙中的黑洞一样“只进不出”。黑洞地址独特的性质使其常常被用于实现“销毁通证”的操作,只需把要销毁的通证转入黑洞地址即可。
实际上,黑洞地址就是难以找到对应私钥的账户地址,只要不是采用“私钥→公钥→地址”的顺序生成的地址基本上都可以认为是黑洞地址。如果只是单纯为了销毁通证,大家还是更习惯选用比较简单好记的黑洞,例如以太坊的全零地址 0x0000000000000000000000000000000000000000 就已经收到了包括 8000 多个以太在内超过 200 种通证,总市值接近 10 亿美元。
随着区块链应用的繁荣,特别是随着跨链转账日渐频繁,销毁通证的操作被赋予了更丰富的意义。通常来说,资产跨链就是按照原链上托管的跨链通证总量在目标链上发行映射的通证,并担保映射通证可以 1:1 地兑换会原链上的通证。
以 ShuttleFlow 为例,典型的跨链操作分为跨出和跨入两个步骤:
跨出流程:用户指定目标链(比如 ETHereum/BSC)收款地址 A,跨链联盟为用户生成原链(比如 Conflux)上跨链合约地址 B,用户把通证(比如 CFX)转给 B 之后跨链联盟在目标链向地址 A 发行相应数量的映射通证(比如 ETHereum 上的 eCFX 和 BSC 上的 bCFX)。
跨入流程:用户指定原链收款地址 C,根据跨链联盟的指示用目标链上的黑洞地址 D 销毁映射通证,再由跨链联盟从原链的托管合约退还等量通证给地址 C。
在跨入流程中,ShuttleFlow 用来销毁映射通证的私有黑洞地址与原链收款地址一一对应。例如当 C=ConfluxAddr 是一个 Conflux CIP-37 标准 non-verbose 的地址时,Ethereum 上对应的黑洞地址即为:
D=keccak256(0x1029 ++ keccak256(ConfluxAddr) ++ keccak256(Relayer))[12:]
其中 Relayer 是 Conflux 上的转发合约地址,可视为一个常数。
采用私有黑洞地址的最大好处是使中心化交易平台的用户在提现的同时即可完成跨链操作,无需先提现到个人地址再通过 Metamask 等钱包发第二笔交易调用 token 合约里面 burn 函数销毁映射通证。在以太坊越来越拥堵且昂贵的环境下,通过私有黑洞地址完成销币跨链还可以极大地节约 gas 使用量,帮助用户降低成本。
私有黑洞地址与跨出流程中的跨链合约地址相结合,ShuttleFLow 真正实现了“转账即跨链”,用户以普通转账的方式向跨链地址(上述的地址 B/D)转入通证,即等价于跨链发送到对应的收款地址(上述的地址 A/C)。整个跨链过程中用户都无需进行复杂的合约交互,完全可以直接从中心化交易平台完成所有跨链操作。
使用私有黑洞地址而非 token 合约的 burn 函数销币也有一些小小的不便之处,即 token 合约的 totalsupply 不会随销币而变化。好在 Ehterscan 已经支持合约创建者公示所有转入黑洞地址的销币交易,可以在一定程度上缓解 totalsupply 不准确的问题。总而言之,这点小小的不便,又怎么比得上 ShuttleFlow 的“转账即跨链”在便利性和节约交易成本方面的“真香”呢?