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-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测试链
默认你已经安装好了btcd
和lnd
,如果没有请参考安装说明
运行btcd,打开终端,然后运行
btcd --txindex --testnet --rpcuser=kek --rpcpass=kek
txindex
是必须的,以便lnd
客户端能够从中查询历史交易btcd
testnet
指定我们正在使用的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.testnet
t:指定是否使用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之辩:规则、中立与去中心化
一种看法是:一个引用价格数据和执行交易的加密货币交易所,其业务决策往往是在链外发生的,不受制于严格的.类似于准宪法的链上规则的约束,加密货币交易所可以拒绝任何人喜欢的价格和交易,而且这样做并不会损害底 ...
随机推荐
- ASP.NET web api 跨域请求
1.学习文章:AJAX 跨域请求 - JSONP获取JSON数据 1.asp.net代码 参考文章:http://www.sxt.cn/info-2790-u-756.html (1).增加CorsH ...
- [JSOI2008]Blue Mary的战役地图
嘟嘟嘟 当看到n <= 50 的时候就乐呵了,暴力就行了,不过最暴力的方法是O(n7)……然后加一个二分边长达到O(n6logn),然后我们接着优化,把暴力比对改成O(1)的比对hash值,能达 ...
- Ingress 暴露tcp端口
有一部分应用 需要暴露tcp端口,查看官方文档 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/expo ...
- ethereumjs/ethereumjs-account-2-test
ethereumjs-account/test/index.js const Account = require('../index.js') const tape = require('tape') ...
- Node.js 连接 MongoDB-7
先安装模块: npm install --save mongodb 当然,首先你要打开mongodb服务端: mongod --bind_ip 127.0.0.1 创建数据库 要在 MongoDB 中 ...
- two sum[easy]
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- R多线程并行计算
先上代码案例: 主要的操作: library(parallel);#加载并行计算包 cl <- makeCluster(8);# 初始化cpu集群 clusterEvalQ(cl,library ...
- HDU 2141 Can you find it? (二分)
题目链接: Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/ ...
- Apache Shiro(一)-登录认证和权限管理初识
What is Apache Shiro? Apache Shiro是一个功能强大.灵活的,开源的安全框架.它可以干净利落地处理身份验证.授权.企业会话管理和加密. Apache Shiro的首要目标 ...
- day 85 Vue学习之vue-cli脚手架下载安装及配置
1. 先下载node.js,下载地址:https://nodejs.org/en/download/ 找个目录保存,解压下载的文件,然后配置环境变量,将下面的路径配置到环境变量中. 由于 Node ...