-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' of github.com:Dapp-Learning-DAO/Dapp-Learning int…
…o doc
- Loading branch information
Showing
26 changed files
with
1,158 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
**闪电网络**(Lightning Network)是一种比特币的第二层支付协议,旨在通过减少链上交易数量,实现快速、低成本的交易。这一网络在比特币区块链之上构建,旨在解决比特币当前的扩展性和交易速度问题。以下是对闪电网络的核心概念及其功能的详细介绍: | ||
|
||
### 1. **核心概念:支付通道** | ||
|
||
闪电网络的基本运行机制是通过支付通道。具体操作如下: | ||
- **创建支付通道**:两方需要频繁交易时,可以通过创建支付通道来进行。这需要双方向一个多签名钱包存入初始资金,并记录在区块链上作为一次链上交易。 | ||
- **链下交易**:通道建立后,双方可以直接交换签名的余额更新,这些更新是链下进行的,不需要经过全网确认,从而大大提高了交易速度。 | ||
- **关闭通道**:当两方不再需要继续交易时,可以选择关闭通道。此时通道的最终余额状态会作为一次链上交易记录在比特币区块链上。这样可以极大减少区块链的负担,因为多笔交易只需记录两次链上交易(开通和关闭)。 | ||
|
||
### 2. **闪电网络中的交易机制** | ||
|
||
在闪电网络中,通道内的交易是即时确认的。具体过程如下: | ||
- **增量余额更新**:每次链下交易只更新支付通道中的余额状态,而不广播至比特币区块链。 | ||
- **去中心化的信任交易**:每次状态更新都由双方签名确认,确保任何一方都无法篡改交易余额,避免了一方试图多拿资金的可能。 | ||
|
||
### 3. **跨通道支付的路由** | ||
|
||
闪电网络不仅限于两个通道用户间的直接支付,还支持多跳支付,使得资金能够通过多个通道转账给目标用户。具体过程如下: | ||
- **路径查找**:如果两个用户之间没有直接的通道,网络会寻找合适的路径通过其他节点完成支付。 | ||
- **支付的原子性**:只有在路径中所有中间节点同意并完成自己的部分支付时,整个支付才会完成,确保资金在多跳过程中不被截留。 | ||
|
||
### 4. **主要优势** | ||
|
||
- **扩展性**:通过链下交易的方式,闪电网络大幅减少了比特币区块链的负载,理论上可以支持每秒数百万次交易。 | ||
- **降低费用**:大部分交易是链下进行的,交易费用很低,仅需链上交易费用的一小部分。 | ||
- **即时支付**:闪电网络的交易几乎是即时完成的,使其适用于日常消费,而不像链上交易那样可能需要数分钟。 | ||
|
||
### 5. **挑战与局限性** | ||
|
||
- **流动性要求**:为了确保大额交易畅通,路径中的每个节点必须在通道中拥有足够的资金,否则可能会阻塞交易。 | ||
- **通道管理**:用户需要手动开通和关闭通道,每次操作都需支付链上费用,因此频繁操作的成本较高。 | ||
- **安全风险**:虽然闪电网络安全性较高,但它并非没有风险。节点需要保持在线以防止攻击者试图广播过时的交易。 | ||
|
||
### 6. **闪电网络的应用场景及未来** | ||
|
||
- **小额支付**:由于费用低廉,闪电网络非常适合进行小额支付,如内容打赏、小额捐赠和应用内购买等。 | ||
- **商户和零售**:交易速度接近实时,闪电网络能使比特币成为零售、餐饮等日常消费的理想支付方式。 | ||
- **跨境支付**:它能快速且低成本地实现国际汇款,为跨境支付提供了一种便利的途径。 | ||
|
||
闪电网络随着开发和用户的持续增长在不断发展。它为解决比特币的扩展性提供了一个极具前景的方案,但要充分发挥其潜力,还需要一个可靠且强大的节点网络支持。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
要在比特币节点上配置和运行闪电网络节点,需要执行以下步骤。配置过程涉及安装比特币全节点、下载闪电网络节点软件(如 `lnd` 或 `c-lightning`),并设置基本的连接和通道参数。以下是详细步骤: | ||
|
||
### 步骤 1:安装比特币全节点 | ||
|
||
1. **下载比特币核心(Bitcoin Core)**: | ||
- 在 [比特币官网](https://bitcoin.org/en/download)下载最新版 Bitcoin Core 软件,并按照官方文档安装。 | ||
|
||
2. **启动比特币节点**: | ||
- 使用以下命令启动比特币节点: | ||
```bash | ||
bitcoind -daemon | ||
``` | ||
- 节点需要同步区块链数据,建议启用 `pruned` 模式,以节省存储空间。 | ||
|
||
3. **修改 `bitcoin.conf` 配置文件**: | ||
- 打开 `bitcoin.conf` 文件(通常位于 `~/.bitcoin/bitcoin.conf`)并添加以下内容以支持闪电网络: | ||
```ini | ||
server=1 | ||
txindex=1 | ||
rpcuser=your_rpc_user | ||
rpcpassword=your_rpc_password | ||
``` | ||
|
||
### 步骤 2:选择并安装闪电网络节点软件 | ||
|
||
目前,主流的闪电网络实现有 `lnd`(Lightning Labs)、`c-lightning`(Blockstream)和 `eclair`(ACINQ)。以 `lnd` 为例: | ||
|
||
1. **下载并安装 `lnd`**: | ||
- 可以在 [GitHub](https://github.com/lightningnetwork/lnd) 下载最新版本的 `lnd`。 | ||
- 安装完 `lnd` 后,使用以下命令启动 `lnd` 服务: | ||
```bash | ||
lnd | ||
``` | ||
|
||
2. **配置 `lnd.conf` 文件**: | ||
- 在 `~/.lnd/lnd.conf` 文件中设置基本配置,连接到比特币节点: | ||
```ini | ||
[Application Options] | ||
alias=YourNodeAlias # 设置节点的别名 | ||
color=#FF0000 # 设置节点颜色(十六进制) | ||
[Bitcoin] | ||
bitcoin.active=1 | ||
bitcoin.mainnet=1 # 或 bitcoin.testnet=1 用于测试网 | ||
bitcoin.node=bitcoind | ||
[Bitcoind] | ||
bitcoind.rpcuser=your_rpc_user | ||
bitcoind.rpcpass=your_rpc_password | ||
bitcoind.rpchost=localhost | ||
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 | ||
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 | ||
``` | ||
|
||
### 步骤 3:启动并初始化闪电网络节点 | ||
|
||
1. **初始化闪电网络节点**: | ||
- 使用以下命令启动 `lnd` 并生成钱包: | ||
```bash | ||
lncli create | ||
``` | ||
- 你将被要求设置密码并备份助记词,这对于保护你的资金非常重要。 | ||
|
||
2. **启动和连接**: | ||
- 启动 `lnd` 服务后,可以使用 `lncli` 命令管理和查询节点状态。例如: | ||
```bash | ||
lncli getinfo | ||
``` | ||
|
||
### 步骤 4:建立闪电网络支付通道 | ||
|
||
1. **获取资金**: | ||
- 首先为节点充值比特币。可以使用 `lncli newaddress` 获取节点地址,然后从外部钱包转账。 | ||
|
||
2. **打开通道**: | ||
- 使用以下命令来打开通道: | ||
```bash | ||
lncli openchannel --node_key=对方节点公钥 --local_amt=通道资金 | ||
``` | ||
- 其中 `node_key` 是对方节点的公钥,`local_amt` 是设置的通道资金数量。 | ||
|
||
3. **监控通道状态**: | ||
- 打开通道后,可以使用 `lncli listchannels` 查看通道状态,并确保通道正常运行。 | ||
|
||
### 步骤 5:管理和使用闪电网络节点 | ||
|
||
1. **发送和接收支付**: | ||
- 可以通过 `lncli` 发起支付,或生成支付请求让他人向你支付。 | ||
- 例如,生成收款请求: | ||
```bash | ||
lncli addinvoice --amt=金额 | ||
``` | ||
- 通过支付请求二维码或字符串,其他用户可以通过他们的闪电节点完成支付。 | ||
|
||
2. **关闭通道**: | ||
- 如果不再需要通道,可以通过以下命令手动关闭: | ||
```bash | ||
lncli closechannel --funding_txid=交易ID --output_index=输出索引 | ||
``` | ||
|
||
3. **备份和恢复**: | ||
- 为了防止意外情况,定期备份数据至安全位置。`lnd` 支持通道备份,可以使用 `lncli exportchanbackup` 导出备份文件。 | ||
|
||
### 小结 | ||
|
||
通过以上步骤,您可以成功配置并运行闪电网络节点。闪电网络通过支付通道的机制,降低比特币链上负载,实现了低成本、快速的小额支付。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
|
||
### 设置并启动闪电网络节点的 Shell 脚本 | ||
|
||
```bash | ||
#!/bin/bash | ||
# 设置变量 | ||
BITCOIN_USER="your_rpc_user" # 替换为你的比特币 RPC 用户名 | ||
BITCOIN_PASSWORD="your_rpc_password" # 替换为你的比特币 RPC 密码 | ||
BITCOIN_CONF_PATH="$HOME/.bitcoin/bitcoin.conf" | ||
LND_CONF_PATH="$HOME/.lnd/lnd.conf" | ||
# 步骤 1:安装必要的依赖项 | ||
echo "Updating system and installing dependencies..." | ||
sudo apt-get update -y && sudo apt-get upgrade -y | ||
sudo apt-get install -y wget jq unzip | ||
# 步骤 2:下载并安装 Bitcoin Core | ||
echo "Downloading and installing Bitcoin Core..." | ||
wget https://bitcoin.org/bin/bitcoin-core-24.0.1/bitcoin-24.0.1-x86_64-linux-gnu.tar.gz | ||
tar -xzf bitcoin-24.0.1-x86_64-linux-gnu.tar.gz | ||
sudo install -m 0755 -o root -t /usr/local/bin bitcoin-24.0.1/bin/* | ||
# 步骤 3:配置比特币节点 | ||
echo "Configuring Bitcoin node..." | ||
mkdir -p "$HOME/.bitcoin" | ||
cat <<EOF > "$BITCOIN_CONF_PATH" | ||
server=1 | ||
txindex=1 | ||
prune=600 # 如果存储空间有限 | ||
rpcuser=$BITCOIN_USER | ||
rpcpassword=$BITCOIN_PASSWORD | ||
EOF | ||
# 启动比特币节点 | ||
echo "Starting Bitcoin node..." | ||
bitcoind -daemon | ||
sleep 10 # 等待节点启动 | ||
# 步骤 4:下载并安装 lnd | ||
echo "Downloading and installing lnd..." | ||
wget https://github.com/lightningnetwork/lnd/releases/download/v0.15.0-beta/lnd-linux-amd64-v0.15.0-beta.tar.gz | ||
tar -xzf lnd-linux-amd64-v0.15.0-beta.tar.gz | ||
sudo install -m 0755 -o root -t /usr/local/bin lnd-linux-amd64-*/lnd | ||
sudo install -m 0755 -o root -t /usr/local/bin lnd-linux-amd64-*/lncli | ||
# 步骤 5:配置 lnd 节点 | ||
echo "Configuring lnd node..." | ||
mkdir -p "$HOME/.lnd" | ||
cat <<EOF > "$LND_CONF_PATH" | ||
[Application Options] | ||
alias=YourNodeAlias # 设置节点别名 | ||
color=#FF0000 # 设置节点颜色 | ||
[Bitcoin] | ||
bitcoin.active=1 | ||
bitcoin.mainnet=1 | ||
bitcoin.node=bitcoind | ||
[Bitcoind] | ||
bitcoind.rpcuser=$BITCOIN_USER | ||
bitcoind.rpcpass=$BITCOIN_PASSWORD | ||
bitcoind.rpchost=localhost | ||
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 | ||
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 | ||
EOF | ||
# 步骤 6:启动 lnd 节点 | ||
echo "Starting lnd node..." | ||
lnd --configfile="$LND_CONF_PATH" & | ||
# 步骤 7:等待 lnd 启动后初始化钱包 | ||
sleep 15 # 等待 lnd 完全启动 | ||
echo "Creating lnd wallet..." | ||
echo "Please follow the instructions to create a wallet for your lnd node:" | ||
lncli create | ||
echo "Lightning Network node setup is complete!" | ||
``` |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
闪电网络(Lightning Network,LN)是一种基于比特币区块链的**第二层支付协议**,旨在解决比特币主网的可扩展性和交易效率问题。它通过引入**支付通道**和**离线交易机制**,极大地减少了对链上交易的依赖,从而提升交易速度和降低成本。以下是闪电网络的主要技术原理。 | ||
|
||
|
||
### 1. **支付通道的概念** | ||
|
||
支付通道是指两个用户之间创建的**链下交易**路径,允许双方在通道内多次转账,而无需每笔交易都记录在主链上。只在开通和关闭通道时需要链上交易,以确保资金安全。这种方式被称为“链下交易”,通过支付通道,双方可以在不影响区块链的情况下快速、安全地互相转账。 | ||
|
||
- **开通通道**:用户 A 和用户 B 向一个多重签名地址存入比特币,该地址需要两方的签名才能支出资金。 | ||
- **更新余额**:两方可以通过交换新的余额分配签名,来更新支付通道的余额,而不进行链上记录。 | ||
- **关闭通道**:当用户希望关闭通道时,最后的余额分配会提交到链上,进行最终结算。 | ||
|
||
|
||
![offchain transaction](./imgs/offchain.png) | ||
|
||
### 2. **哈希时间锁定合约(HTLC)** | ||
|
||
HTLC 是闪电网络中的关键技术,用于确保链下交易的安全性。它通过**哈希锁定和时间锁定**的组合,让资金只有在特定条件满足时才会被转移,从而防止一方在交易完成前恶意撤回资金。 | ||
|
||
- **哈希锁定**:支付者生成一个随机数,并将其哈希值发送给接收者。接收者只有在知道该哈希值的原始输入时,才能解锁资金。 | ||
- **时间锁定**:如果接收者未在指定时间内解锁资金,支付者可以撤销交易。这防止了接收者长时间不领取资金的情况。 | ||
|
||
HTLC 使闪电网络能够跨越多个节点转账,从而形成**跨通道的支付路径**,实现了网络的互联。 | ||
|
||
### 3. **路由支付** | ||
|
||
在闪电网络中,支付不需要直接的支付通道。即使没有直接的链下通道,用户也可以通过多个中介节点实现转账。闪电网络中的节点将自动寻找**最优路径**来完成支付,这一过程被称为路由。 | ||
|
||
- **多跳支付**:通过多个节点传递支付,用户可以利用其他节点作为中转站发送资金。 | ||
- **路径发现和路由选择**:闪电网络使用路由协议(如 Onion 路由)找到最佳路径,确保资金在最短路径内传输,并提高了交易隐私性。 | ||
|
||
|
||
![route pay](./imgs/route.png) | ||
|
||
### 4. **即时交易与低费用** | ||
|
||
与比特币区块链的**确认时间**相比,闪电网络中的链下交易几乎是即时的,因为交易只需双方签名并在通道中达成一致。而且,闪电网络的交易费用通常较低,仅需支付通道的维护费用或微量的路由费用,这使得其适合处理**小额支付**和**高频支付**。 | ||
|
||
### 5. **去中心化网络结构** | ||
|
||
闪电网络的设计是去中心化的,节点自由加入和退出,且不依赖于单一服务器或第三方。用户既可以选择与其他节点建立通道,也可以选择关闭通道。每个节点都可以自主设置路由费用,以激励更多节点参与进来,从而扩大网络的支付能力和覆盖范围。 | ||
|
||
### 6. **链下结算和通道关闭** | ||
|
||
闪电网络中的所有链下交易都是基于承诺的状态更新协议。只有当通道关闭时,链下的最后交易状态才会记录在链上: | ||
|
||
- **双向承诺**:在链下交易的过程中,任何一方都可以选择关闭通道,最后的余额状态将提交到链上,并进行结算。 | ||
- **惩罚机制**:如果一方试图在链上提交过期的余额分配,另一方可以提交最新的状态,没收对方的余额。这种机制保证了用户不会恶意提交无效交易。 | ||
|
||
### 7. **闪电网络的优点和挑战** | ||
|
||
**优点**: | ||
- **扩展性**:通过链下交易和支付通道,大大减轻了区块链的负担。 | ||
- **低费用**:只在开通、关闭通道时支付链上交易费用,其余链下交易几乎无费用。 | ||
- **隐私性**:交易不直接记录在区块链上,增强了交易隐私性。 | ||
- **实时交易**:链下交易几乎是即时完成的。 | ||
|
||
**挑战**: | ||
- **通道流动性**:当通道内的资金耗尽时,需要重新注资或重新开通新通道。 | ||
- **网络连通性**:尽管闪电网络允许通过多跳支付进行路由,但找到稳定的路径可能会变得复杂。 | ||
- **脱机风险**:由于是链下交易,断开网络或节点意外退出可能会影响交易的正常进行。 | ||
|
||
### 示例:使用闪电网络支付流程 | ||
|
||
1. **Alice 和 Bob 开通支付通道**:Alice 和 Bob 创建一个多重签名地址,并将 5 BTC 存入其中。 | ||
![open channel](./imgs/open.png) | ||
|
||
2. **支付流程**:Alice 想给 Charlie 支付 1 BTC。Alice 和 Charlie 没有直接的通道,但 Bob 与 Charlie 之间有一个通道。因此,Alice 可以通过 Bob 将这笔金额转给 Charlie。 | ||
3. **HTLC 保护**:Alice 创建一个 HTLC,将 1 BTC 锁定到 Bob,要求 Charlie 提供随机数来解锁。Bob 通过 Charlie 完成支付。 | ||
4. **支付完成**:Charlie 提供随机数,Bob 获得资金解锁权,并最终完成 Alice 到 Charlie 的支付。 | ||
![transfer](./imgs/transfer.png) | ||
|
||
|
||
### 总结 | ||
|
||
闪电网络通过支付通道和 HTLC 实现了离线链下交易,同时通过去中心化的路由机制保证了可扩展性和交易隐私。尽管其实现和配置稍显复杂,但闪电网络为比特币和其他区块链提供了一种有效的扩容解决方案,极大地提升了区块链的应用潜力。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
HD钱包,全称为分层确定性钱包(Hierarchical Deterministic Wallet),是一种通过单一的种子(Seed)生成和管理多个密钥对的数字钱包。这种结构使得用户只需备份一次种子,即可控制所有衍生出的私钥和公钥,极大地简化了密钥管理的复杂性。 | ||
|
||
**HD钱包的主要特点:** | ||
|
||
1. **分层结构:** HD钱包采用树状结构,根节点由主密钥(Master Key)组成,子节点为从主密钥派生出的子密钥。这种分层设计允许用户根据需要生成不同层级的密钥,方便管理和分配。 | ||
|
||
2. **确定性:** 通过相同的种子,HD钱包可以生成相同的密钥序列。这意味着只要备份了种子,就可以在任何时候恢复所有的密钥和地址。 | ||
|
||
3. **增强的隐私性:** HD钱包可以为每笔交易生成不同的地址,避免重复使用同一地址,从而提高交易的隐私性。 | ||
|
||
**HD钱包的工作原理:** | ||
|
||
- **种子生成:** 用户首先生成一个随机数作为种子,通常通过助记词(Mnemonic)表示。助记词是一组易于记忆的单词序列,用于表示种子。 | ||
|
||
- **主密钥派生:** 通过种子,使用特定的算法(如HMAC-SHA512)生成主私钥和主公钥。 | ||
|
||
- **子密钥派生:** 从主密钥可以派生出多个子密钥,每个子密钥又可以派生出自己的子密钥,形成树状结构。这种派生过程可以根据需要进行多层次的扩展。 | ||
|
||
**HD钱包的优势:** | ||
|
||
- **简化备份:** 用户只需备份一次种子或助记词,即可恢复所有的密钥和地址,避免了逐个备份每个私钥的麻烦。 | ||
|
||
- **灵活的密钥管理:** 分层结构允许用户根据不同的用途或账户生成不同的子密钥,方便管理。 | ||
|
||
- **增强的安全性:** 通过生成不同的地址,减少了地址关联性,提升了交易的隐私性和安全性。 | ||
|
||
**HD钱包的标准:** | ||
|
||
HD钱包的概念最早由BIP32提案提出,随后BIP39引入了助记词的标准,BIP44则定义了多币种、多账户的路径标准。这些标准共同构建了当前HD钱包的基础。 | ||
|
||
**注意事项:** | ||
|
||
- **妥善保管助记词:** 助记词是恢复钱包的唯一凭证,一旦丢失或泄露,可能导致资产无法找回或被盗。 | ||
|
||
- **定期备份:** 虽然HD钱包简化了备份过程,但仍需定期检查备份的有效性,确保在需要时能够成功恢复。 | ||
|
||
总的来说,HD钱包通过分层确定性的设计,提供了高效、安全且灵活的密钥管理方式,已成为当前数字货币钱包的主流选择。 |
Oops, something went wrong.