网站营销定义,军事新闻头条最新消息,百度收录工具,千库网免费背景素材原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出#xff0c;它可以实现两个区块链之间的代币交换。 
这些交换是原子的#xff0c;因为双方要么收到对方的硬币#xff0c;要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方#xff0c;消除…原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出它可以实现两个区块链之间的代币交换。 
这些交换是原子的因为双方要么收到对方的硬币要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方消除了交易对手风险。 
有很多用例。 例如它们可以作为非托管交易的基础用户可以在交易的同时控制自己的资金。 
基础知识 
比特币地址就像一个带有存款槽的上锁邮箱。 当鲍勃向爱丽丝发送比特币时他将比特币放入邮箱A的槽位其中包含爱丽丝的“地址”。 只有爱丽丝拥有打开邮箱并取回硬币的钥匙。 有比用简单的私钥就能打开的锁更奇特的锁。 这些锁被视为比特币智能合约可以规定任意复杂的锁定条件。 
哈希锁 
它们可以通过密码解锁例如解锁手机的 PIN 码。 这个秘密实际上是一个散列到给定值的值/原像该值显示在锁上供每个人查看。 对应的智能合约是一个哈希谜题。 一旦使用 PIN/原像解锁它就会在区块链上公开可见。 时间锁 
这些锁在到达预定时间之前无法打开该时间可以是 UNIX 纪元时间自 1 月 1 日到 1970 年以来的秒数或区块高度。 相应的智能合约称为CheckLockTimeVerify。 原子交换 
让我们使用这些锁根据 Alice 的 BSV 币和 Bob 的 BTC 币按照双方同意的比例进行交换。 
设置 Alice 将带有哈希锁的 BSV 放入 Bob 的邮箱中并将哈希值告诉 Bob。 然后鲍勃将 BTC 使用相同的哈希锁放入 Alice 的邮箱中。 这两个哈希锁共享相同的 PIN该 PIN 由 Alice 生成并暂时对 Bob 隐藏。 
交换 Alice 使用她的私钥A和秘密PIN打开邮箱A以获取BTC Bob存款。 Bob 获悉Alice 刚刚在 BTC 区块链上透露的 PIN 码。 他可以使用相同的PIN打开邮箱B连同他的私钥B并获得BSV Alice存款。 他们在没有任何第三方的情况下交换了硬币。 
打开一个邮箱可以有效地让另一方能够打开另一个邮箱。 如果 Alice 不打开她的邮箱Bob 就无法打开她的邮箱。 
如果爱丽丝或鲍勃终止怎么办 如果Alice存入BSV后Bob没有将BTC放入邮箱A她的BSV就会被卡住。 同样如果 Alice 在设置后没有输入 PINBob 的 BTC 币就会被卡住Alice 的 BSV 也会被卡住。 这就是时间锁的用武之地。每个邮箱都有一个防卡住时间锁因此如果没有人及时打开密码箱硬币可以退还。 例如Bob 可以在一定时间后用他的密钥 B 解锁邮箱 A。 
请注意Alice 在邮箱 B 上的时间锁定必须比 Bob 在主邮箱 A 上的时间锁定长。否则Alice 可以等到邮箱 B 的时间锁定到期取回她的 BSV 币并使用 PIN 打开邮箱 A 来提取 Bob 的 BTC 存款。 
哈希时间锁定合约HTLC 
原子交换使用称为哈希时间锁定合约HTLC的智能合约因为它结合了哈希锁和时间锁。 
在 BSV 中HTLC 可以在 sCrypt 中实现如下所示。 
class HashTimeLockContract extends SmartContract {prop() readonly alicePubKey: PubKeyprop() readonly bobPubKey: PubKeyprop() readonly hashX: Sha256prop() readonly timeout: bigint // Can be a timestamp or block height.// hash lockmethod()public unlock(x: ByteString, aliceSig: Sig) {// Check if H(x)  this.hashXassert(sha256(x)  this.hashX, Invalid secret.)// Verify Alices signature.assert(this.checkSig(aliceSig, this.alicePubKey))}// time lockmethod()public cancel(bobSig: Sig) {assert(this.ctx.locktime  this.timeout, locktime has not yet expired)// Verify Bobs signature.assert(this.checkSig(bobSig, this.bobPubKey))}
}HLTC 合约源代码 
调用合约有两种方式即打开邮箱 
unlock()使用PIN交换成功cancel()不发生交换币被退还。 this.ctx 是 ScriptContext允许访问支出交易的锁定时间。 
在BTC中HTLC可以如下实现: 
OP_IF// hash lock branchOP_SHA256hash of secretOP_EQUALVERIFYpubKey of swapOP_CHECKSIG
OP_ELSE// time lock branchlocktimeOP_CHECKLOCKTIMEVERIFYOP_DROPpubKey of refundOP_CHECKSIG
OP_ENDIF它也有两种解锁方式在时间锁分支中使用OP_CHECKLOCKTIMEVERIFY。 使用脚本而不是 sCrypt因为 BTC禁用了许多操作码。 
完整的协议序列 
总之BSV 和 BTC 之间的原子交换协议可以按照以下步骤执行。 
Alice 生成一个安全随机数 x 并计算其哈希值h  SHA256(x)。 Alice 将 h 发送给 Bob。Alice 将币锁定在 BSV 上的 HTLC 中可以通过以下两种方式之一解锁1) 哈希到 h 和 Bob 签名的值 2) 比如说 24 小时后 Alice 的签名。 Alice 通过向 BSV 网络广播交易来部署合约。Bob 将币锁定在 BTC 的 HTLC 中可以通过以下两种方式之一解锁1哈希到 h 和 Alice 签名的值 2) Bob 在 48 小时后签名。 Bob 通过向 BTC 网络广播交易来部署合约。确认 Bob 的交易后Alice 通过提供 x 和她的签名来领取 BTC。Bob 在 BTC 上观察到 x并使用 x 和他的签名来索取 BSV。 
如果步骤 3 或 4 没有发生双方都可以在时间锁定到期后取回他们的硬币。 
概括 
我们已经演示了如何在 BSV 和 BTC 区块链上自动交换硬币。 任何两条区块链都可以支持跨链原子交换只要它们支持HTLC即具有相同的哈希函数并支持时间锁。 例如已实施以下交换 BTC - ETH  ERC20 tokens: using HTLC on Ethereum  BTC - LTC  BTC - BCH  BTC - QTUM  Decred - LTC  
令人惊讶的是原子交换甚至可以在没有 HTLC 的区块链上实现例如门罗币。 使用高级的密码学原子交换甚至可以用于任何区块链只要它可以验证签名。