主页 > 苹果下载imtoken教程 > Terra Bridge:比特币和以太坊跨链通证协议 | 火星技术线程

Terra Bridge:比特币和以太坊跨链通证协议 | 火星技术线程

苹果下载imtoken教程 2023-04-22 06:15:09

背景

Terra-Bridge 是以太坊和比特币之间的跨链传输协议。

目的

该提案的目的是为以太坊和比特币之间无需许可的跨链资产交换建立一个详细的机制。

例子

以太坊和比特币之间的跨链交换在以下领域很有用:

l 稳定币:以太坊之外的资产,比如BTC,让以太坊的稳定币可以实现抵押品的多元化。

l 去中心化交易:将以太坊的外部资产跨链转移到以太坊,扩大了可交易的资产范围。

l 金融衍生品:基于区块链的资产交换开启了各种金融衍生品上链的可能性。

现有解决方案

这个领域已经有一些解决方案,比如Parity bridge、POA bridge等,但是这些解决方案并不是为了将资产带入以太坊而设计的,而是一些基于EVM侧链的可扩展性解决方案。 因此,这些解决方案仅限于获得许可的 EVM EVM 传输架构。

BTC Relay 是最早将外部资产(BTC)带入以太坊的尝试之一,但它的设计限制了它只能有一个从 BTC 到以太坊的单向连接的能力,中间连接的成本和缺乏适当的激励使得项目目前处于相对休眠状态。

设计目标

我们的桥梁设计目标是:

l 支持代币双向转移:桥应支持以太坊和比特币之间的双向资产转移。

l 标准化接口:网桥应遵循标准化接口,便于集成。

l Permissionless:网桥应该在分布式安全模型下运行。

桥梁设计

期限

主链:我们以主链代币(例如以太坊)的形式向其转移外部资产的链。

外链:我们把资产转移到这条链的源链上(比如比特币)。

Bridge:帮助在链上和链下用户之间执行消息中继、验证和保留/释放资产的系统。

比特币以太坊区别_以太币和比特币区别_以太币与比特币的区别

Authenticator:运行桥接客户端的角色。 类似于传统 PoW 链的矿工。

概括

桥是通过一组验证器和两个桥接合约(这里的“合约”是指链上的可执行逻辑)的双向挂钩机制。 桥接合约位于主链和外链上,分别称为主链桥和外链桥。

桥接合约必须能够接受和锁定资金,验证传入的跨链传输交易的加密签名,并在成功传输后向用户地址释放代币。 不同链上的两个网桥之间的消息中继由网桥验证器以拜占庭容错方式生成。

外链->本链跨链交换过程

以太币与比特币的区别_以太币和比特币区别_比特币以太坊区别

1. 用户将BTC存入外链桥。 该交易包含使验证器能够中继传输的元数据:

lT-转账金额

lR - 该链的收件人地址

3. 验证者(1 到 N)在外部链桥上查询并发现新的传入交易,并使用以下参数将消息发送到本地链桥进行中继传输:

lR - 该链的收件人地址

lT——转账金额

lSIG - 转账交易的验证者签名

4. 该链桥接收传入消息,验证验证者签名并跟踪从验证者收集的签名。 当为给定的 TX 收集到超过 N/2 个验证者签名时以太币和比特币区别,T 数量的 BTCT(以代币形式在以太坊上挂钩的 BTC 版本)将转移给接收者。

内链->外链跨链转账流程

比特币以太坊区别_以太币与比特币的区别_以太币和比特币区别

800%广告爆率,无需付费,12转法宝,10分钟200级!

X

1. 用户将BTCT存入链桥。 交易包含由验证器中继的元数据:

lT——转账金额

以太币与比特币的区别_以太币和比特币区别_比特币以太坊区别

lR- 收件人的外部链接地址

2. 验证器(1 到 N)侦听事件并在本地桥上寻找新的传入交易,并向本地桥发送消息以收集批准传输的签名,参数如下:

lR——收件人外部链接地址

lT——转账金额

lSIG - 验证者的签名(见证)将用于解锁外部桥上的资金

3. 一旦收集并验证了足够多的签名(N/2+1),本地链桥发送一个事件通知验证者转账已经完全通过。 最后一个验证者用于向外部桥提交转账交易和收集的验证者签名。

4. 外部链接网桥收到传入的转账请求,验证收集到的签名,将T数量的BTC转给接收方

跨链交易数量

比特币 -> 以太坊:1 个初始用户请求比特币上的交易转移 + (N/2+1) 个验证者在以太坊上转移中继交易。

Ethereum -> Bitcoin:1个初始用户在以太坊上请求交易转账+在以太坊上(N/2+1)个签名收集交易+在比特币上1个转账中继交易。

验证者选择标准

通过选择 BFT 共识机制,并选择由一组在桥接合约中存放抵押品的利益相关者组成的验证者,我们可以与不经常变化且数量适中的验证者达成安全共识。

任何存入代币作为抵押品的验证者都将成为下一个区块的验证者。 同样,任何退出合约的验证者都将在下一个区块中撤销其验证者状态。 参与验证者必须通过本地链和外链桥接合约中的存款进行注册。 由于主链是以太坊,验证者令牌和更新很简单。 由于比特币的功能有限,外链的情况稍微复杂一些。

共识

任何经过 N/2+1 验证者批准的转账请求都将被最终确定。 这个过程将无限期地继续下去,除非 N/2 或更多的验证者变得无响应,在这种情况下以太币和比特币区别,桥将停止。

安全假设

只要攻击者控制的验证者池少于 51%,该桥就是安全的。

奖励和削减

验证者被激励保持在线并通过转发转账收取转账费来为桥梁的安全做出贡献。 对于每条中继传输消息,中继验证者将获得一部分相应的跨链传输费用作为激励。 同时,为了防止验证人在未撤销其验证人身份(即撤回其抵押品)的情况下下线,将采用罚没机制,即如果验证人未能对转账消息进行转发,他存放的部分抵押品将被没收。 降低。

切割条件

以太币与比特币的区别_比特币以太坊区别_以太币和比特币区别

桥梁的加密经济安全模型基于大多数 (N/2+1) 验证者的诚实行为。 也为切削条件奠定了基础。 鉴于我们收集了桥双向传输的验证者签名,我们能够在此链桥上识别哪些验证者错过了参与特定跨链传输的中继。 一个简单的削减条件可以惩罚在某个时间单位 T(可以是块号、传输号等)后收集到超过 N/2+1 个签名传输并且未能提交签名的验证者。

这意味着我们不试图从 slashing 的角度来区分诚实或恶意的验证者,而是假设大多数验证者是诚实的。 由于验证器的默认行为是中继所有传输,因此验证器保持在线而不偏离其工作在经济上是可取的。

Benchain(以太坊)桥接实现

这个链桥将用 Solidity 编写并在 EVM 上运行。

该链桥将具有以下接口:

· transferToForeign(string recipient, uint amount)

· TransferToForeign(字符串收件人,uint256值)

转移资金

Dapp 或合约可以调用函数 transferToForeign 将他们的 BTC 从桥上提取到提供的 BTC 地址,并监听 TransferToForeign 以获取转账结果。

该链的代币

这条链上使用的挂钩代币代表外部链代币,它们将是可铸造和可销毁的 ERC20 代币。 可铸造和可燃烧的属性使开发人员可以轻松管理挂钩代币。 可以在转出(到外链)时转入本地链桥并销毁,在转入(从外链)时创建并发送到接收方。

可用于从链下桥转移 BTC 的可选支出

用比特币的话来说,它被称为:输出支出。 在我们的例子中,支出 - 是指向出站桥输出的比特币交易之一。 要向收款人汇款,验证者必须同意并签署交易输出。 这些签名称为见证人,必须通过调用 submitSignature(message, witness) 将其推送到桥上。 当本机网桥监视外网桥上的所有传入和传出传输转换时,它可以确定可用于给定传输消息的支出。

lmessage 是需要作为取款请求的标识。 它由以下变量组成:

· 收款人地址

· 价值交易金额

· transactionHash在用户调用transferToForeign后生成

如何创建见证

要获得见证人验证器,必须使用以下参数创建交易:

· 输入是一个数组:

比特币以太坊区别_以太币与比特币的区别_以太币和比特币区别

[

{

'txid': txOutput['txid'],

'vout':txOutput['vout']

}

]

· 输出是一个数组:

[

{

收件人地址:发送金额

{

foreignBridgeAddress:更改

{

rewardsMultisig地址:validatorReward

}

]

创建未签名交易的一种可能方法是执行 bitcoind rpc 方法:createrawtransaction(inputs, outputs)。 然后必须使用验证者的私钥对该交易进行签名。 签署交易的一种可能方法是使用 bitcoind rpc 方法:signrawtransactionwithkey(unsigned, [validatorPrivateKey], prevTxs).prevTxs 是将用于支出的交易数组。 signrawtransaction 返回带有见证的交易。 witness必须在这个链桥的submitSignature(message, witness)方法中提交。

在以太坊上验证的比特币签名

作为 transferToForeign 请求的一部分,桥接合约需要能够验证从桥接验证器收集的比特币交易签名(见证)。 幸运的是,我们可以在 Solidity 中使用 ecrecover 函数来做到这一点,因为以太坊和比特币都使用相同的椭圆曲线数字签名算法 (ECDSA) 进行签名。 ecrecover 返回一个以太坊地址,但提供的签名是用比特币创建的,所以为了验证签名,我们需要将 ecrecover 返回的以太坊地址与验证者的比特币地址进行比较。 比特币和以太坊地址之间存在巨大差异。 为了进行验证,网桥需要存储验证器公钥并从中导出以太坊地址。

witnesses 需要传递给 ecrecover 的其他准备工作分为 3 个部分(v、r、s),如 Solidity 文档中所述:

比特币以太坊区别_以太币和比特币区别_以太币与比特币的区别

函数 parseWitness(证人){

signature = bip66.decode(witness);

返回 {

r:签名。 切片 (0, 32),

s:签名。 切片(32)

}

比特币见证不包含 av 标量。 v 是识别恢复公钥的椭圆曲线部分所必需的,因此我们可以梳理出两种可能的变体:v = 0x1B 或 v = 0x1C。

外链(比特币)桥接实现

使用多重签名地址在比特币上实现外部链桥。 我们可以根据 BIP-13 使用 M-of-N P2SH 多重签名地址来实现这一点。 比特币参考实现已经有验证规则限制 P2SH 交换脚本最大 520 字节,这意味着所有公钥的长度加上公钥的数量不能是这个字节限制。 对于压缩公钥,这意味着最多 N=15。

根据 BIP-16 的兑换脚本可以使用以下格式的 OP_CHECKMULTISIG 操作码构建:

[M pubkey-1 pubkey-2 ... pubkey-N OP_CHECKMULTISIG]

为了增加验证者集合的上限,我们可以使用SegWit的witnessScript,它在Bitcoin Core 0.13.1及之后的版本中允许最多3600字节的脚本数据。 在 BIP-141 之后,我们可以使用以下格式的 OP_CHECKSIG 操作码构建一个 P2SH-P2WSH(P2SH with SegWit)多重签名赎回脚本:

期权掉期

期权掉期

期权掉期

转移资金

用户可以使用任何支持 Segwit 的比特币钱包将 BTC 转移到多重签名地址。

验证者轮换

比特币面临的挑战是如何通过轮换的验证者集安全地控制存款资金。 这是通过在现有验证者之间达成共识以完全创建并将资金转移到新的多重签名来完成的。 当新的验证者加入或现有的验证者离开时。 创建了一个新的多重签名。 现有的一组验证者达成共识 (N/2+1) 将资金转移到新的多重签名地址。

将来,我们还可能支持单一货币的多个桥接对,以提高安全性。

谢谢你

感谢 Contract Continental Foundation 和@KiriKiri 对本协议的研究和开发。

(以下为论坛开发者讨论互动)