闪电网络——区块链领域基于 Golang 的核心技术之一

在 2019年第五届 Gopher China 大会上,讲师方圆进行了主题为《闪电网络——BTC小额支付解决方案》的演讲,以下为演讲实录。

00

前言

今天我分享的主要内容包括以下两部分:首先简单介绍 BTC 的基本原理和交易流程;然后介绍闪电网络的基本原理和Go语言的实现版本LND。鉴于大家基本没有接触过闪电网络,我也会补充说明 LND 的使用过程。

在正式话题开始之前,我们先简单回顾下 Go 语言在区块链领域两个著名的项目。第一个是以太坊,以太坊相比于比特币的主要特点在于支持智能合约。智能合约是运行在区块链上的一段代码,保证输入数据相同的情况下,所有节点计算都会得到相同的结果。很多人质疑我们到底需是否需要这个智能合约,我认为是需要的。比如入职的时候老板承诺给你两个月的薪水作为年终奖,到年终的时候老板要取消掉这个年终奖,如果使用智能合约来签订合同的话,你可以通过执行该智能合约,拿走属于你的年终奖。第二个有名的项目就是今天要介绍的闪电网络。闪电网络是构建于BTC之上的微支付网络,我们今天主要介绍其核心原理,LND的使用和实现部分只做简单介绍。

01

BTC 简介

比特币历史

比特币基本架构

如下图。P2P 网络是比特币的基础。比特币新节点通过连接种子节点加入P2P网络之后,从其他节点获得临近节点信息。所有节点接入P2P网络进行通信,节点发现等相关功能和普通P2P网络节点类似。

右边是RPC 相关的组件。BTC链之外的世界如果要和比特币的区块链打交道,就需要通过比特币的RPC接口来实现。比特币区块链通过P2P网络接收或者广播交易,并且把交易放到交易池,这些交易可能来自于RPC也可能来自于其他比特币节点广播的数据。挖矿节点从交易池中获取一批交易并打包为区块,再通过P2P网络广播出去,然后继续下一个区块的挖矿竞争。

比特币地址

正常使用比特币的时候要生成公钥私钥,公钥hash过后就是所谓的比特币地址。你可以拥有很多的地址,花币的时候就需要使用当前地址对应的私钥进行签名,私钥丢了钱就没了。你可以随意生成公钥和私钥。

交易

对于BTC来说,简化的交易结构如下所示。Transaction hash就是对整个的 transaction 进行Hash运算的结果。vin_size和vout_size是对应交易内部有多少个输入(input)和输入(output)。Output是表示输出,具体来说就是需要支付给谁,因此内部包含对方的地址(address)和需要支付多少钱(value),script是输出的锁定脚本,关于这部分内容,后文会有介绍。Input 对应输入,具体来说收钱方花钱的时候需要指定来源,Input内的 Hash ,实际指向前一个 transaction,script_sig是对应于output上的锁定脚本,我们把它叫做解锁脚本,这部分内容也会在后面介绍,index是对应的输出在该交易中的位置,因为同一个交易可以有多个输出。

在内存的结构用go语言表达是这样的,MsgTx是交易,TxIn是输入,TxOut输出ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值