作者介绍

虫洞社区·签约作者 steven bai

前言

如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情?

目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网络,今天我就来告诉如何通过智能雷电和闪电网络来实现跨链原子资产交换。

场景

  1. Alice 在某个信息发布网站上发布信息,希望用1个 BTC 置换100个 SMT
  2. Bob 看到以后,和 Alice 进行沟通,达成交换意见 那么Alice 和 Bob 如何不需要借助任何第三方实现原子资产置换呢?

智能雷电与闪电网络测试环境

什么是智能雷电?

智能雷电是一种最新的链下扩容方案,可以实现即时的、低费用和可扩展的支付。可以运行与以太坊和光谱链,兼容ERC20 token 和 ERC233 token。

它是跨平台的,目前支持 Windows Linux MacOS Android IOS

为了更好的适用于移动设备各种复杂的网络环境,智能雷电支持无网支付,安全快捷。

同时智能雷电也是开源的,并且正在积极维护中,想要参与和详细了解请移步官方源码.

准备步骤

安装启动智能雷电

在本地搭建一个Bob和Alice的环境,让他们建立通道。假设你已经安装好了 go geth 如果没有请参考安装说明

连接以太坊测试网络

连接以太坊的测试链testnet

geth --testnet --fast --rpc --rpcapi eth,net,web3 --bootnodes "enode://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d1db1510d8f61e6a8866ad7f0e17c02b14182d37ea7c3c8b9c2683aeb6b733a1@52.169.14.227:30303,enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9cbc9216e7aa349691242576d552a2a56aaeae426c5303ded677ce455ba1acd9d@13.84.180.240:30303"

启动节点

启动两个节点,分别是AliceBob

启动Alice

smartraiden --datadir=.smartraiden --api-address=0.0.0.0:5001 --listen-address=127.0.0.1:400001 --address="0x69c5621db8093ee9a26cc2e253f929316e6e5b92" --keystore-path ~/.ethereum/keystore  -password-file /file --eth-rpc-endpoint ws://127.0.0.1:8546

启动Bob

smartraiden --datadir=.smartraiden --api-address=0.0.0.0:5002 --listen-address=127.0.0.1:40002 --address="0x31ddac67e610c22d19e887fb1937bee3079b56cd" --keystore-path ~/.ethereum/keystore --password-file /file --eth-rpc-endpoint ws://127.0.0.1:8546
  • datadir 节点的本地数据存储目录
  • api-address rest api 监听端口
  • address 以太坊节点地址,如果没有可以通过 geth account new创建
  • keystore-path --keystore-path 路径
  • password-file password-file 路径
  • eth-rpc-endpoint 以太坊全节点的rpc端口,默认的websocket是8546

此时你就已经成功搭建好了本地智能雷电节点网络,可以通过查询SmartRaiden api文档来创建通道。

安装启动闪电网络

本地搭建一个Bob和Alice的闪电网络测试环境,让他们建立通道。

连接Btcd测试链

默认你已经安装好了btcdlnd,如果没有请参考安装说明

运行btcd,打开终端,然后运行

btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
  • txindex是必须的,以便lnd客户端能够从中查询历史交易btcd
  • testnet 指定我们正在使用的testnet网络
  • rpcuserrpcpass 设置用于对btcd实例进行身份验证的默认密码
启动节点

启动两个节点,分别是AliceBob

启动Alice

lnd --rpclisten=localhost:10001 --listen=localhost:10011 --restlisten=localhost:8001 --datadir=data --logdir=log --debuglevel=info --bitcoin.testnet --bitcoin.active --bitcoin.node=btcd --btcd.rpcuser=kek --btcd.rpcpass=kek 

  • rpclisten:host:侦听RPC服务器的端口。这是应用程序与之通信的主要方式lnd
  • listen:host:侦听传入P2P连接的端口。这是在网络层面,不同于Lightning频道网络和比特币/ Litcoin网络本身。
  • restlisten:host:port,公开REST api,用于与lndHTTP 进行交互。例如,您可以通过向GET请求获取Alice的频道余额localhost:8001/v1/channels。
  • datadir:lnd将存储数据的目录
  • logdir:记录输出的目录。
  • debuglevel:所有子系统的日志记录级别。可以设置为 trace,debug,info,warn,error,critical。
  • bitcoin.testnett:指定是否使用simnet或testnet
  • bitcoin.active:指定比特币处于活动状态。还可以包括 --litecoin.active激活Litecoin。
  • bitcoin.node=btcd:使用btcd完整节点与区块链连接。请注意,使用Litecoin时,选项是--litecoin.node=btcd。
  • btcd.rpcuser和--btcd.rpcpass:btcd实例的用户名和密码。请注意,使用Litecoin时,选项为--ltcd.rpcuser 和--ltcd.rpcpass

启动Bob

lnd --rpclisten=localhost:10002 --listen=localhost:10012--restlisten=localhost:8002 --datadir=data --logdir=log --debuglevel=info --bitcoin.testnet --bitcoin.active --bitcoin.node=btcd --btcd.rpcuser=kek --btcd.rpcpass=kek

为了不必每次都输入一堆命令,可以修改配置文件lnd.conf

  • MacOS:lnd.conf位于:/Users/[username]/Library/Application\ Support/Lnd/lnd.conf
  • Linux:~/.lnd/lnd.conf
datadir=data
logdir=log
debuglevel=info
debughtlc=true bitcoin.active=1
bitcoin.testnet=1
bitcoin.node=btcd
btcd.rpchost=localhost
btcd.rpcuser=kek
btcd.rpcpass=kek

现在启动Alice节点我们只需要输入

lnd --rpclisten=localhost:10001 --listen=localhost:10011 --restlisten=localhost:8001

重新打开新的终端,创建Alice钱包密码

lncli --rpcserver=localhost:10001 --macaroonpath=data/admin.macaroon create

为了避免每次都输入--rpcserver=localhost:1000X--macaroonpath标记,可以设置一些别名

alias lncli-alice="lncli --rpcserver=localhost:10001 --macaroonpath=data/admin.macaroon"
alias lncli-bob="lncli --rpcserver=localhost:10002 --macaroonpath=data/admin.macaroon"

Bob创建钱包同上

此时AliceBob就可以创建通道了,详细教程请参考lnd api

实现方法

到这里我们为了进行SmartRaiden 和 Lighting Network 进行跨链原子资产交换的准备工作就已经完成了,具体的实现方法如下。

回到我们最初的那个问题

Alice 在某个信息发布网站上发布信息,希望用1个 BTC 置换100个 SMT

Bob和Alice SmartRaiden场景

Bob和Alice Lnd场景

1. Bob和 Alice 分别启动自己的 Atmosphere 服务

Atmosphere 服务会启动响应的SmartRaiden和Lnd

假设 Alice 在SmartRaiden的节点使用的私钥为 SA_Priv, 公钥为 SA, 在 Lnd 节点使用的私钥为 LA_Priv, 公钥为 LA

假设 Bob 在 SmartRaiden 节点使用的私钥为 SB_Priv, 公钥为 SB, 在 Lnd 节点使用的私钥为 LB_Priv, 公钥为 LB

2. Bob 的Atmosphere服务

  • 1 Bob发起交易,指定Secret,金额为100,token 为 SMT,接收方为 SA

  • 2 Bob等待是否收到一个金额为1BTC,密码 hash 为 Sha256(Secret),

  • 3 收到以后,允许自己的 SmartRaiden 响应 SecretRequest

3. Alice 的Atmosphere 服务

  • 1 Alice 在 SmartRaiden 上等待是否收到了来自 Bob 的100个 SMT交易

  • 2 一旦收到, Alice 校验该交易是否有效,比如 Expiration 时间是否足够,必须大于125分钟(500Spectrum 块)

  • 3 如果都一致,那么通过向自己的 Lnd 注册这个 PaymentReq,并指定过期时间为100分钟,secretHash

  • 4 检测 Lnd 是否收到了密码,如果收到了,立即向 自己的SmartRaiden 注册密码

跨链时序图

添加微信(cdong1024),加入区块链开发者技术交流群

虫洞社区:https://www.uzanapp.com/

SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换的更多相关文章

  1. Filecoin:一种去中心化的存储网络(二)

    开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...

  2. NGK公链:去中心化交易+挖矿生态体系共舞

    NGK生态公链是一个安全.透明.专业的去中心化商业应用平台.作为一条具有技术信任甚至是公众信任的公链,NGK以区块链技术为支撑,利用区块链透明.公正.公开.数据不可篡改.分布式存储.可追溯等技术优势, ...

  3. 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店

    今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之 ...

  4. 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)

    在上篇文章中,我们主要从价值定位.技术层次架构.服务质量.去中心化程度,和经济激励机制五个方面分析了三个项目的不同.在这一篇文章中,我们将着重从区块链的架构设计.数据传输技术设计和数据存储技术设计三方 ...

  5. Filecoin:一种去中心化的存储网络(一)

    开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...

  6. IM 去中心化概念模型与架构设计

    今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而言,实际上并非所有的业务都能做去中 ...

  7. 小众Tox——大众的“去中心化”聊天软件

    ★Tox是什么 一个反窥探的开源项目:一种基于DHT(BitTorrent)技术的即时通讯协议:一个为安全而生的加密通讯系统 .美国棱镜计划曝光后,一个名为 irungentoo 的牛人于17天后的2 ...

  8. 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论

    背景 背景是设计一个实时数据接入的模块,负责接收client的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(兴许提供HBase上的查询),或先持久化到Kafka里.方便兴许进行一些 ...

  9. ImCash:币安下架BSV之辩:规则、中立与去中心化

    一种看法是:一个引用价格数据和执行交易的加密货币交易所,其业务决策往往是在链外发生的,不受制于严格的.类似于准宪法的链上规则的约束,加密货币交易所可以拒绝任何人喜欢的价格和交易,而且这样做并不会损害底 ...

随机推荐

  1. request请求转换成对象。

    1)前端post数据过来,key和val键值对会有很多,这个时候往后端进行插值的时候,最好将这些键值对转换成对象进行处理. 使用common-beanutils 来将前端传递过来的map直接转换成对象 ...

  2. Uva514

    https://vjudge.net/problem/UVA-514 #include <bits/stdc++.h> using namespace std; ; int target[ ...

  3. 1549: Navigition Problem (几何计算+模拟 细节较多)

    1549: Navigition Problem Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 256 Mb     Su ...

  4. .Net Core使用Unity替换原生DI

    原文:.Net Core使用Unity替换原生DI 一.DIP.IOC.DI 面对对象设计原则可以帮助我们开发出更好的程序,其中有一个依赖倒置原则DIP并由此引申出IOC.DI等概念.就先粗略的了解一 ...

  5. 柯朗微积分与数学分析习题选解(1.1 节 e)

    一直在读<陶哲轩实分析>,陶的书非常的严谨,环环相扣,但是也有个缺点就是计算性的例子和应用方面的例子太少了.所以就又找了本柯朗的<微积分与数学分析>搭配着看.柯朗的书的习题与陶 ...

  6. 17-[JavaScript]- 内置对象 Array,String,Date,Math

    1.Array数组 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. 5289: [Hnoi2018]排列

    5289: [Hnoi2018]排列 链接 分析: 首先将题意转化一下:每个点向a[i]连一条边,构成了一个以0为根节点的树,要求选一个拓扑序,点x是拓扑序中的第i个,那么价值是i*w[x].让价值最 ...

  8. SpringCloud-微服务网关ZUUL(六)

    前言:前面说过,由于微服务过多,可能某一个小业务就需要调各种微服务的接口,不可避免的就会需要负载均衡和反向代理了,以确保ui不直接与所有的微服务接口接触,所以我们需要使用一个组件来做分发,跨域等各种请 ...

  9. 安装OpenvSwitch (ovs)

    简介 搭建SDN环境少不了SDN交换机,SDN交换机跟普通交换机最大的区别就是将普通交换机的数据平面和控制平面相分离,SDN交换机只负责数据的转发,而控制指令则由更上一级的控制器下发. Open vS ...

  10. 编译、安装rdesktop 1.8.3

    来自:https://blog.csdn.net/songshimvp1/article/details/48290885 1.安装GCC: 安装C/C++编译器apt-get install gcc ...