在过去的几个月里,咱们一直在讨论如何以最放心和用户友好的方式将比特币和其余货币带入以太坊区块链。咱们的想法是建立一个表明比特币的ERC20 Token,为了简洁起见,咱们称之为BTCT。用户能够从他们现有的比特币建立新的BTCT,而后再兑换他们的BTCT以得到比特币。BTCT能够实现的应用程序各不相同,从去中心化交换到支付再到高级金融产品。在Kyber Network,容许用户在比特币和其余ERC20代币之间进行交易是咱们的主要优先事项之一,由于它将有助于增长交易所的交易量。这篇文章描述了咱们一直在考虑的这个挑战的一些可能的解决方案。php
这是技术性角度最简单,也许是最容易理解的解决方案。在这种方法中,将有一个许可的托管人充当受信任的第三方。该托管人将提供比特币地址供用户发送他们的比特币,而后他们将相应数量的BTCT令牌发回给用户。当用户但愿将他们的BTCT兑换成比特币时,他们只需向托管人发送请求,托管人又将比特币直接发送到用户的地址。托管人可能会为每次存取款收取一些费用以资助其运营。java
虽然托管人确实须要信任,但此解决方案的一大优点是用户始终能够验证托管人在托管钱包中具备等量的比特币。若是托管人行为不诚实,用户能够利用彻底透明的公共记录对托管人采起法律行动。这与USDT解决方案不一样,在该解决方案中,若是进行审计,用户须要信任审计决策,而且没法采起独立的法律行动。此外,在USDT系统中,审计将不是实时的,即人们须要等待保管人编制报告。node
上述解决方案尽管在实践中可能运行良好,但须要集中实体做为可信第三方。这与去中心化的想法相冲突,甚至可能带来一些风险。例如,托管人有可能违反法律,留下用户的钱,或者当事方之间的沟通可能因低效的监管管理而中断或延迟。在本节中,咱们提供了一种新的解决方案,利用智能合约使BTCT的发行和赎回彻底无信任。python
该解决方案利用BTCRelay,一种在基于以太坊的智能合约中运行的比特币轻客户端。BTCRelay容许以太坊智能合约验证比特币交易,从而使以太坊在线实体可以检查比特币网络上的支付是否实际发生。android
在这个解决方案中,有一个第三方将准备初始资本,以促进BTCT的发行和赎回。在用户存入比特币以前,该初始资金将是所需的保证金,即若是发生任何不良事件,用户能够得到此保证金做为退款。为简单起见,做为一个例子,Kyber Network能够扮演第三方的角色,并在比特币合约中提供ETH和ERC20令牌的保证金。而后,Kyber将提供比特币地址,用户能够在其中存入比特币以建立BTCT令牌。在确认用户的存款后,Kyber在BitcoinToken合约中为用户建立相应数量的BTCT令牌。若是Kyber没有发行新的BTCT令牌,用户能够将该merkle存款证实提交给BitcoinToken智能合约,而后该合约与BTCRelay进行通讯,以验证用户是否确实将比特币存入Kyber。若是检测到违规游戏,BitcoinToken合同将丧失Kyber的部分保证金,并用它来支付给用户。其余用户也能够开始兑换BTCT令牌以得到他们的比特币。因为保证金的价值老是超过托管人持有的当前比特币金额,所以用户将得到比特币的保证金。上面提到的场景以下图所示。程序员
让咱们考虑一个用户但愿将比特币兑换成BTCT的状况。他们须要作的是在BitcoinToken合约中调用他们想要接收比特币的比特币地址的“burn function”。Kyber将监听销毁的事件,并将相应数量的比特币发送到用户的比特币地址。若是用户没有看到Kyber发送的付款,他们能够经过调用BitcoinToken智能合约来挑战Kyber(咱们可能须要用户提供一些小额存款以防止滥用此功能)。若是Kyber没法提供付款的有效证实(若是没有付款,Kyber将没法提供),Kyber的存款将被部分没收,这样用户将得到更多的ETH和ERC20代币,之后能够卖掉他们的比特币。其余用户,一旦发现Kyber未能付款,能够要求兑换他们的BTCT。web
这种方法在可信托管方法之上提供了几个很好的属性。mongodb
然而,缺点是随着采用的增加,解决方案须要更多资金。 编程
ETH和ERC20代币的总存款必须至少等于发行的BTCT总额加上额外的安全边际(10%-20%)以解释价格波动。例如,对于BTCT的X美圆,咱们须要1.2倍的初始资本。另外一个主要缺点是,在无信托的托管人将数十亿做为抵押品的状况下,潜在的安全风险。此外,它没有彻底去中心化的事实可能意味着该实体能够被一个集中的组织垄断。安全
在上述解决方案中,强调BTCRelay须要开发和维护工做,而且对于以太坊Classic,Litecoin和ZCash的其余发送而言将很是昂贵。此外,处理以太坊上的比特币交易可能会引入一些复杂因素。在本节中,咱们提出了另外一种不涉及BTCRelay的解决方案,而且更加有效地简化了流程。为实现这一目标,咱们必需要求另外一个链支持基于EVM的智能合约。幸运的是,Rootstock将会开发而且它们与EVM兼容,他们已经使用联合侧链将比特币从比特币区块链转移到Rootstock。此解决方案也适用于其余加密货币,如以太坊经典和其余基于以太坊的货币。在本节中,当提到下面的比特币时,除非另有说明,不然咱们将讨论的是比特币。
与以前的解决方案同样,托管人仍须要将其保证金存放在以太坊链上,不管是在ETH仍是其余ERC20代币中,或二者兼而有之。此外,托管人还必须提供一笔小额的安全保证金,好比当前持有的比特币金额的5%左右。Rootstock上的这笔保证金将存入比特币,若是托管人在Rootstock连锁店行为不当,将对其进行处罚。
在用户将X比特币存入Rootstock上的DepositContract以后,托管人将签署一条消息“X比特币存放在块Z处的以太坊上的Y”,将其提交给Rootstock上的DepositContract。而后,托管人将在以太坊上的BitcoinToken合约上发行相同数量的BTCT代币。除非托管人因未能付款而受到质疑,不然只有托管人才有权将比特币从Rootstock的DepositContract合约中移走。若是托管人未提供签名消息,则用户能够对Rootstock进行质询并得到存入的比特币,并从Rootstock上的托管人的保证金中得到一些奖金。若是保管人在签署消息后未能在以太坊上发行新的BTCT令牌,则用户可使用已签名的消息自行在以太坊上发出他们的BTCT令牌,并让保管人因未履行其职责而受处处罚。
当用户请求在以太坊上兑换他们的BTCT令牌时,他们会调用BitcoinToken合约上的burn函数,并提供他们的Rootstock地址来接收他们的比特币。
托管人将签署数听说“兑换X比特币以解决Rootstock的Y”并在以太坊上提交比特币合约的消息。托管人而后将X比特币转移到Rootstock上的用户地址以完成兑换。与发行过程相似,若是托管人要么没有在以太坊上提交已签名的消息,要么在砧木上进行比特币转移,则可能会受处处罚。
1.好处
2.缺点
鉴于利弊,咱们遵循的方法多是上述全部提案的混合。咱们但愿为用户建立一个无信任且彻底兼容的平台,以便将不一样的加密货币移动到以太坊。具体而言,咱们计划与拥有数字资产托管许可的合做伙伴合做,并与其余加密基金合做为保证金提供资金。咱们相信这是咱们长期运营的最佳方法,不会让用户牺牲其安全性或使监管机构更加困难。
最后但一样重要的是,咱们认为这一举措不只有利于Kyber Network,也有利于整个生态系统。所以,咱们真的但愿社区可以贡献并帮助咱们构建解决方案并共同改进区块链的采用。若是您有兴趣参与此计划,请经过电子邮件hello@kyber.network与咱们联系。
==================================================================
分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:
- java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行帐号建立、交易、转帐、代币开发以及过滤器和交易等内容。
- 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括帐户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
- EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、帐户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
- java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如建立地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
- php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如建立地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
- tendermint区块链开发详解,本课程适合但愿使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。
这里是原文如何将比特币带到以太坊区块链