SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换
作者介绍
虫洞社区·签约作者 steven bai
前言
如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情?
目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网络,今天我就来告诉如何通过智能雷电和闪电网络来实现跨链原子资产交换。
场景
- Alice 在某个信息发布网站上发布信息,希望用1个 BTC 置换100个 SMT
- 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"
启动节点
启动两个节点,分别是Alice和Bob
启动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-addressrest api 监听端口address以太坊节点地址,如果没有可以通过geth account new创建keystore-path--keystore-path 路径password-filepassword-file 路径eth-rpc-endpoint以太坊全节点的rpc端口,默认的websocket是8546
此时你就已经成功搭建好了本地智能雷电节点网络,可以通过查询SmartRaiden api文档来创建通道。
安装启动闪电网络
本地搭建一个Bob和Alice的闪电网络测试环境,让他们建立通道。
连接Btcd测试链
默认你已经安装好了btcd和lnd,如果没有请参考安装说明
运行btcd,打开终端,然后运行
btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
txindex是必须的,以便lnd客户端能够从中查询历史交易btcdtestnet指定我们正在使用的testnet网络rpcuser和rpcpass设置用于对btcd实例进行身份验证的默认密码
启动节点
启动两个节点,分别是Alice和Bob
启动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服务器的端口。这是应用程序与之通信的主要方式lndlisten: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或testnetbitcoin.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创建钱包同上
此时Alice和Bob就可以创建通道了,详细教程请参考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 进行去中心化跨链原子资产交换的更多相关文章
- Filecoin:一种去中心化的存储网络(二)
开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...
- NGK公链:去中心化交易+挖矿生态体系共舞
NGK生态公链是一个安全.透明.专业的去中心化商业应用平台.作为一条具有技术信任甚至是公众信任的公链,NGK以区块链技术为支撑,利用区块链透明.公正.公开.数据不可篡改.分布式存储.可追溯等技术优势, ...
- 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店
今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之 ...
- 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)
在上篇文章中,我们主要从价值定位.技术层次架构.服务质量.去中心化程度,和经济激励机制五个方面分析了三个项目的不同.在这一篇文章中,我们将着重从区块链的架构设计.数据传输技术设计和数据存储技术设计三方 ...
- Filecoin:一种去中心化的存储网络(一)
开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...
- IM 去中心化概念模型与架构设计
今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而言,实际上并非所有的业务都能做去中 ...
- 小众Tox——大众的“去中心化”聊天软件
★Tox是什么 一个反窥探的开源项目:一种基于DHT(BitTorrent)技术的即时通讯协议:一个为安全而生的加密通讯系统 .美国棱镜计划曝光后,一个名为 irungentoo 的牛人于17天后的2 ...
- 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论
背景 背景是设计一个实时数据接入的模块,负责接收client的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(兴许提供HBase上的查询),或先持久化到Kafka里.方便兴许进行一些 ...
- ImCash:币安下架BSV之辩:规则、中立与去中心化
一种看法是:一个引用价格数据和执行交易的加密货币交易所,其业务决策往往是在链外发生的,不受制于严格的.类似于准宪法的链上规则的约束,加密货币交易所可以拒绝任何人喜欢的价格和交易,而且这样做并不会损害底 ...
随机推荐
- 20145203盖泽双 《Java程序设计》第四周学习总结
20145203盖泽双 <Java程序设计>第四周学习总结 教材学习内容总结 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单 ...
- Robotframework测试相关库的简单整理
一. 官网地址 http://robotframework.org/#libraries 二.几类测试所用到的常用库初步整理 1. UI自动化测试 Selenium2Library.BuiltIn(自 ...
- Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
1.概述 `define:作用 -> 常用于定义常量可以跨模块.跨文件; 范围 -> 整个工程; parameter: 作用 -> 常用于模块间参数传递; 范围 -> ...
- p标签不自动换行原因
前言:发现以前写的就像是笔记,哪像博客啊,这里再次修改. 问题描述: 在固定宽度的p元素里(任何块级元素同理),长单词不自动换行,中文字符会自动换行,效果如:http://codepen.io/ali ...
- cmd导出oracle数据库数据
今天弄了下oracle数据库导入导出命令exp,imp 首先这个命令是在cmd直接执行,不是sqlplus登录后再执行,见下图: 再次,注意结尾不能有分号(;): exp scott/scott@su ...
- Object C学习笔记12-集合
这里讲到的集合是指Set集合,其实Array也是一种类型的集合.在Object C中提供了两个集合类NSSet和NSMutableSet.其实NSSet和NSArray性质一样,都是用于存储对象的. ...
- springboot快速入门(二)——项目属性配置(日志详解)
一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...
- python基础学习1 -异常捕获
#!/usr/bin/env python # -*- coding:utf-8 -*- #-------try-except try: file_name = input("请输入需要打开 ...
- 7-[CSS]-css介绍,引入方式
1.CSS介绍:层叠样式表(Cascading Style Sheets) 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前 ...
- 【AHOI2012】信号塔
题面 题解 xgzc怒切计算几何 最小圆覆盖板子题 整体算法如下: 枚举第一个点,考虑当前圆是否包含了这个点,如果没有,则把圆变成以这个点为圆心,半径为\(0\)的圆.再枚举第二个点,考虑圆是否包含了 ...