-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
267 additions
and
2 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
67 changes: 67 additions & 0 deletions
67
i18n/zh-CN/docusaurus-plugin-content-docs/current/contract/bitcoin-scripts/p2ms.md
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 |
---|---|---|
@@ -1,4 +1,71 @@ | ||
--- | ||
sidebar_position: 5 | ||
--- | ||
|
||
# P2MS(支付到多签)脚本 | ||
|
||
介绍P2MS输出。 | ||
|
||
## 什么是P2MS输出? | ||
|
||
P2MS(Pay-to-MultiSig,即“支付到多重签名”)是比特币网络中一种允许多个签名者共同管理一笔资金的交易输出类型。这种机制通常用于增加安全性和容错性,例如在多方共管的企业资金账户中。P2MS输出可以指定需要多少个签名者的签名才能花费这笔资金,从而提供灵活的多重签名解决方案。 | ||
|
||
## P2MS输出的结构 | ||
|
||
P2MS输出的脚本被称为锁定脚本(scriptPubKey),它的典型结构如下: | ||
|
||
``` | ||
m <公钥1> <公钥2> ... <公钥n> n OP_CHECKMULTISIG | ||
``` | ||
|
||
在这个脚本中: | ||
|
||
- `m`:表示需要多少个签名才能花费这笔资金(最小签名数)。 | ||
- `<公钥1> <公钥2> ... <公钥n>`:这些是参与多重签名的公钥。 | ||
- `n`:表示总共有多少个公钥参与(最大签名数)。 | ||
- `OP_CHECKMULTISIG`:这是一个操作码,用于验证提供的签名是否满足所需的最小签名数。 | ||
|
||
为了更好地理解P2MS输出,让我们拆解其脚本: | ||
|
||
1. `m`:指定所需的最小签名数。 | ||
2. `<公钥1> <公钥2> ... <公钥n>`:提供多个公钥。 | ||
3. `n`:指定公钥的总数。 | ||
4. `OP_CHECKMULTISIG`:验证签名是否满足`m`个有效签名。 | ||
|
||
## P2MS输出的特点 | ||
|
||
1. **增加安全性**:P2MS输出允许多个签名者共同管理一笔资金,减少单点故障的风险。如果一个签名者的私钥泄露,攻击者仍然需要其他签名者的私钥才能花费资金。 | ||
2. **灵活性**:P2MS输出可以根据需求设置签名阈值(m)和参与签名的总人数(n)。例如,可以设置3-of-5签名,即需要5个公钥中的任意3个签名才能花费资金。 | ||
3. **复杂性**:与P2PKH输出相比,P2MS输出的脚本更复杂,需要更多的计算和验证步骤。虽然增加了安全性,但也增加了使用的复杂性和交易的字节大小。 | ||
|
||
## P2MS输出的使用场景 | ||
|
||
P2MS输出在需要多方共管或增强安全性的场景中非常有用。以下是一些典型的使用场景: | ||
|
||
1. **企业资金管理**:企业可以使用P2MS输出来设置多重签名账户,确保需要多个授权人签名才能花费公司资金。 | ||
2. **联合投资**:多个投资者可以使用P2MS输出共同管理一笔投资资金,只有在达成共识后才能花费。 | ||
3. **家庭财务安全**:家庭成员可以设置多重签名账户,确保家庭资金的安全管理。 | ||
|
||
## P2MS交易的示例 | ||
|
||
以下是一个P2MS交易的简化示例: | ||
|
||
- 锁定脚本(scriptPubKey): | ||
``` | ||
2 <公钥1> <公钥2> <公钥3> 3 OP_CHECKMULTISIG | ||
``` | ||
|
||
- 解锁脚本(scriptSig): | ||
``` | ||
OP_0 <签名1> <签名2> | ||
``` | ||
|
||
当花费这笔比特币时,需要提供解锁脚本,其中包含满足最小签名数的签名。在这个示例中,需要至少两个签名才能花费资金。验证过程如下: | ||
|
||
1. `OP_0`:由于比特币脚本中的一个小bug,需要先放一个无效的操作码(通常是`OP_0`)在栈顶。 | ||
2. `<签名1> <签名2>`:提供两个有效签名。 | ||
3. `OP_CHECKMULTISIG`:从栈中取出签名和公钥,验证是否满足至少两个签名的要求。 | ||
|
||
## 结论 | ||
|
||
P2MS输出作为一种允许多重签名验证的交易类型,在比特币网络中提供了增强的安全性和灵活性。它适用于需要多方共管的场景,如企业资金管理、联合投资和家庭财务安全。尽管其脚本结构相对复杂,但P2MS输出的使用可以显著提高资金管理的安全性。理解P2MS输出对于深入掌握比特币的高级用法和多重签名机制具有重要意义。 |
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
70 changes: 70 additions & 0 deletions
70
.../zh-CN/docusaurus-plugin-content-docs/current/contract/bitcoin-scripts/p2pkh.md
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 |
---|---|---|
@@ -1,4 +1,74 @@ | ||
--- | ||
sidebar_position: 4 | ||
--- | ||
|
||
|
||
|
||
# P2PKH(支付到公钥哈希)脚本 | ||
|
||
介绍P2PKH输出。 | ||
|
||
## 什么是P2PKH输出? | ||
|
||
P2PKH(Pay-to-PubKeyHash,即“支付到公钥哈希”)是比特币网络中最常见的一种交易输出类型。它比早期的P2PK(Pay-to-PubKey)输出提供了更好的隐私和安全性。P2PKH输出允许比特币支付给一个公钥哈希,而不是直接支付给公钥,从而在一定程度上保护了接收方的隐私。 | ||
|
||
## P2PKH输出的结构 | ||
|
||
P2PKH输出的脚本被称为锁定脚本(scriptPubKey),它的典型结构如下: | ||
|
||
``` | ||
OP_DUP OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG | ||
``` | ||
|
||
为了理解这个脚本,让我们拆解它的各个部分: | ||
|
||
1. **OP_DUP**:复制栈顶元素。 | ||
2. **OP_HASH160**:对栈顶元素进行RIPEMD-160哈希运算(之前是SHA-256哈希)。 | ||
3. **\<公钥哈希>**:接收方的公钥哈希。 | ||
4. **OP_EQUALVERIFY**:验证栈顶的两个元素是否相等,如果不相等,则中止并返回错误。 | ||
5. **OP_CHECKSIG**:检查签名是否有效。 | ||
|
||
在P2PKH交易中,发送方的解锁脚本(scriptSig)需要提供: | ||
|
||
1. 签名:证明发送方对这笔交易的授权。 | ||
2. 公钥:与锁定脚本中的公钥哈希匹配。 | ||
|
||
## P2PKH输出的特点 | ||
|
||
1. **增强的隐私性**:P2PKH输出只包含公钥的哈希值,而不是直接包含公钥。这使得追踪接收方的公钥变得更加困难,从而增强了隐私性。 | ||
2. **改进的安全性**:由于直接包含公钥的交易容易受到潜在的量子计算攻击,P2PKH输出通过使用公钥哈希提供了一层额外的安全性。量子计算机要破解哈希值比破解公钥更加困难。 | ||
3. **广泛使用**:P2PKH输出是比特币交易中最常见的输出类型,广泛应用于各种交易场景中。 | ||
4. **支持轻量级客户端**:P2PKH输出使得轻量级客户端(如SPV钱包)能够更高效地验证交易,因为这些客户端只需要检查公钥哈希,而不是处理完整的公钥。 | ||
|
||
## P2PKH输出的使用场景 | ||
|
||
P2PKH输出在比特币网络中被广泛使用,几乎涵盖了所有普通用户的日常交易。以下是一些典型的使用场景: | ||
|
||
1. **个人钱包交易**:大多数比特币钱包默认使用P2PKH输出来接收比特币。 | ||
2. **商家支付**:许多在线商家和服务提供商使用P2PKH地址来接收客户的比特币支付。 | ||
3. **交易所转账**:交易所用户进行比特币充值和提现时,通常使用P2PKH输出。 | ||
|
||
## P2PKH交易的示例 | ||
|
||
以下是一个P2PKH交易的简化示例: | ||
|
||
- 锁定脚本(scriptPubKey): | ||
``` | ||
OP_DUP OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG | ||
``` | ||
|
||
- 解锁脚本(scriptSig): | ||
``` | ||
<签名> <公钥> | ||
``` | ||
|
||
当接收方要花费这笔比特币时,他们需要提供解锁脚本,其中包含一个有效的签名和与公钥哈希匹配的公钥。验证过程如下: | ||
|
||
1. `OP_DUP`:复制解锁脚本中的公钥。 | ||
2. `OP_HASH160`:对公钥进行哈希运算,生成公钥哈希。 | ||
3. `OP_EQUALVERIFY`:验证计算得到的公钥哈希是否与锁定脚本中的公钥哈希匹配。 | ||
4. `OP_CHECKSIG`:使用提供的公钥验证签名的有效性。 | ||
|
||
## 结论 | ||
|
||
P2PKH输出作为比特币网络中最常见的交易输出类型,提供了增强的隐私和安全性。它的结构使得比特币支付更加安全和隐私,适用于各种交易场景。从个人钱包到商家支付,P2PKH输出在比特币生态系统中扮演了重要角色,推动了比特币的广泛应用和普及。理解P2PKH输出对于深入了解比特币交易机制和提升比特币使用安全性具有重要意义。 |
74 changes: 74 additions & 0 deletions
74
i18n/zh-CN/docusaurus-plugin-content-docs/current/contract/bitcoin-scripts/p2sh.md
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 |
---|---|---|
@@ -1,4 +1,78 @@ | ||
--- | ||
sidebar_position: 6 | ||
--- | ||
|
||
# P2SH(支付到脚本哈希)脚本 | ||
|
||
## 什么是P2SH输出? | ||
|
||
P2SH(Pay-to-Script-Hash,即“支付到脚本哈希”)是比特币网络中一种强大的交易输出类型。它允许将复杂的条件和脚本隐藏在一个哈希值中,只有在实际花费时才需要公开这些脚本。这种机制极大地提高了比特币交易的灵活性和隐私性,同时简化了用户的操作。 | ||
|
||
## P2SH输出的结构 | ||
|
||
P2SH输出的锁定脚本(scriptPubKey)与P2PKH(Pay-to-PubKeyHash)输出类似,但它包含一个脚本哈希而不是公钥哈希。典型的P2SH锁定脚本如下: | ||
|
||
``` | ||
OP_HASH160 <脚本哈希> OP_EQUAL | ||
``` | ||
|
||
在这个脚本中: | ||
|
||
- `OP_HASH160`:对栈顶的元素进行RIPEMD-160哈希运算(先进行SHA-256哈希,然后进行RIPEMD-160哈希)。 | ||
- `<脚本哈希>`:这是一个20字节的哈希值,表示锁定脚本的哈希。 | ||
- `OP_EQUAL`:检查栈顶的哈希值是否等于提供的脚本哈希。 | ||
|
||
## P2SH交易的特点 | ||
|
||
1. **灵活性**:P2SH输出允许使用复杂的脚本和条件,而这些脚本和条件在生成交易时并不需要公开。只有在花费时才需要提供完整的解锁脚本。 | ||
2. **隐私性**:由于锁定脚本在生成交易时被哈希隐藏,P2SH输出提高了交易的隐私性。观察者无法从交易输出中直接看到具体的条件和脚本。 | ||
3. **简单的地址格式**:P2SH地址以“3”开头,使其与其他类型的比特币地址区别开来。用户只需提供P2SH地址,无需了解背后的复杂脚本。 | ||
|
||
## P2SH交易的使用场景 | ||
|
||
P2SH输出在许多需要复杂条件的交易场景中非常有用。以下是一些典型的使用场景: | ||
|
||
1. **多重签名**:P2SH输出可以用于多重签名账户,只有满足特定数量的签名者签名后,资金才能被花费。这简化了多重签名的管理。 | ||
2. **时间锁定**:P2SH输出可以包含时间锁定条件,使得资金在特定时间之前无法被花费。 | ||
3. **条件支付**:P2SH输出可以用于设置复杂的条件支付,如智能合约和去中心化应用(DApps)。 | ||
|
||
## P2SH交易的示例 | ||
|
||
以下是一个P2SH交易的简化示例: | ||
|
||
1. **锁定脚本(scriptPubKey)**: | ||
``` | ||
OP_HASH160 <脚本哈希> OP_EQUAL | ||
``` | ||
|
||
2. **解锁脚本(scriptSig)**: | ||
``` | ||
<解锁数据> <锁定脚本> | ||
``` | ||
|
||
在这个示例中,锁定脚本包含一个脚本哈希。在花费时,解锁脚本需要提供满足条件的解锁数据和原始锁定脚本。 | ||
|
||
## 多重签名P2SH交易示例 | ||
|
||
假设我们有一个2-of-3的多重签名P2SH交易: | ||
|
||
1. **锁定脚本(scriptPubKey)**: | ||
``` | ||
OP_HASH160 <多重签名脚本哈希> OP_EQUAL | ||
``` | ||
|
||
2. **多重签名脚本**: | ||
``` | ||
2 <公钥1> <公钥2> <公钥3> 3 OP_CHECKMULTISIG | ||
``` | ||
|
||
3. **解锁脚本(scriptSig)**: | ||
``` | ||
OP_0 <签名1> <签名2> <多重签名脚本> | ||
``` | ||
|
||
在这个多重签名交易中,锁定脚本只包含多重签名脚本的哈希值。要花费这笔资金,解锁脚本需要提供两个签名和原始的多重签名脚本。 | ||
|
||
## 结论 | ||
|
||
P2SH输出是一种灵活且强大的比特币交易输出类型,允许使用复杂的条件和脚本,同时提高了隐私性和安全性。通过将复杂的脚本隐藏在哈希值中,P2SH输出简化了用户的操作,并为各种高级用例(如多重签名和时间锁定)提供了支持。理解P2SH输出对于全面掌握比特币的脚本系统和交易机制具有重要意义。 |
1 change: 0 additions & 1 deletion
1
i18n/zh-CN/docusaurus-plugin-content-docs/current/contract/metacontract.md
This file was deleted.
Oops, something went wrong.