Skip to content

Commit

Permalink
Merge pull request #1163 from paris-10/main
Browse files Browse the repository at this point in the history
feat: add OP_CHECKMULTISIGVERIFY example
  • Loading branch information
jasonandjay committed Aug 4, 2024
2 parents 3073f40 + a912416 commit 4f6c28b
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 7 deletions.
27 changes: 26 additions & 1 deletion BTC/Advanced/Multisign/OP_CHECKMULTISIGVERIFY/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,29 @@

`OP_CHECKMULTISIGVERIFY` 结合了 `OP_CHECKMULTISIG``OP_VERIFY` 的功能。其主要目的是在验证多重签名后,立即判断验证结果并返回执行状态。

脚本构建和签名过程可以参考[OP_CHECKMULTISIG](../OP_CHECKMULTISIG/README.md),这里不再赘述。
脚本构建和签名过程可以参考[OP_CHECKMULTISIG](../OP_CHECKMULTISIG/README.md),这里不再赘述。

### 具体案例
在babylon业务中,会把用户的资产质押到一个Taproot地址里。根据官方披露的三条解锁路径都需要OP_CHECKSIGVERIFY来验证签名然后执行后续逻辑
1. 时间锁路径,质押者到期可以赎回
```js
<Staker_PK> OP_CHECKSIGVERIFY <Timelock_Blocks> OP_CHECKSEQUENCEVERIFY
```

2. 解绑路径,质押者提前赎回
```
<StakerPk> OP_CHECKSIGVERIFY
<CovenantPk1> OP_CHECKSIG
<CovenantPk1> OP_CHECKSIGADD ... <CovenantPkN> OP_CHECKSIGADD
<CovenantThreshold> OP_GREATERTHANOREQUAL
```

3. 质押者作恶,惩罚路径
```js
<StakerPk> OP_CHECKSIGVERIFY
<FinalityProviderPk> OP_CHECKSIGVERIFY
<CovenantPk1> OP_CHECKSIG <CovenantPk1> OP_CHECKSIGADD ... <CovenantPkN> OP_CHECKSIGADD
<CovenantThreshold> OP_GREATERTHANOREQUAL
```

相关交易可以查看:https://mempool.space/zh/signet/tx/ceb126550481ecb69b45929b2b5869fd3975a707e6100b368d6cc15e4434ad9d
4 changes: 2 additions & 2 deletions BTC/Basic/payment/P2PKH.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG

OP_DUP // 复制栈顶的元素
OP_HASH160 // 弹出栈顶元素,计算其SHA-256散列,然后计算RIPEMD-160散列
OP_PUSHBYTES_20 // 推送20字节到栈顶
OP_PUSHBYTES_20 // 推送20字节的公钥哈希到栈顶
18e1fad25b2983d5dbb2e2b96e3ce756a69b3bc2 // 公钥哈希
OP_EQUALVERIFY // 比较栈顶元素
OP_EQUALVERIFY // 比较栈顶元素是否匹配
OP_CHECKSIG // 验证数字签名

```
Expand Down
10 changes: 9 additions & 1 deletion BTC/Basic/payment/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,12 @@ OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG

# 常见支付方式

- [P2PKH](./P2PKH.md)
| 支付方式 | 全称 | 地址前缀 | 脚本类型 | 主要特点 | 示例地址 |
|----------|-------------------------|----------|----------|-------------------------------------------------|---------------|
| [P2PKH](./P2PKH.md) | Pay-to-Public-Key-Hash | 1 | P2PKH | 最常用,公钥哈希方式,隐私性好,地址以 "1" 开头 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
| [P2SH](./P2SH-P2PKH.md) | Pay-to-Script-Hash | 3 | P2SH | 支付到脚本的哈希值,支持复杂的脚本,地址以 "3" 开头 | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy |
| [P2WPKH](./P2WPKH.md) | Pay-to-Witness-Public-Key-Hash | bc1q | P2WPKH | 使用隔离见证(SegWit),更低交易费用,地址以 "bc1q" 开头 | bc1qar0srrr7xf6h4g1ks7zft6wz7x4n7pkjkcn6lq |
| P2WSH | Pay-to-Witness-Script-Hash | bc1q | P2WSH | 使用隔离见证,支持复杂脚本,地址以 "bc1q" 开头 | bc1qrp33g0q0s6fphxtww9g4ndzsd74ny3rps6m74dxg7mjsg5c0z9rhdj |
| [P2TR](./P2TR.md) | Pay-to-Taproot | bc1p | P2TR | 使用 Taproot 功能,优化脚本执行和隐私,地址以 "bc1p" 开头 | bc1p4gr63h6fp9hrkwpf4sjwx4s34a5w6b6ptfhl5k7vph3ykq6s5h7gx5m |


16 changes: 13 additions & 3 deletions BTC/Basic/tools/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,22 @@

## 可用工具

### dust计算
### [dust计算](./dust.md)

- **描述**:在比特币网络中,“尘埃”(Dust)是一个专有术语,它指的是一种非常小的比特币金额,这种金额小到它的交易费用可能会超过这笔金额本身的价值。因此,从经济角度来看,发送这样一笔交易是不划算的。
- **影响**:尘埃限制的存在主要是为了防止网络被大量的微小交易所拥堵,这些交易可能是无效的或试图进行“尘埃攻击”(发送大量的小额交易到多个地址,以试图追踪这些地址的所有者)。因此,比特币网络通过设置尘埃限制来保护网络不被这种小额交易滥用。

### base58 编码/解码
### [base58 编码/解码](./base58.md)

- **描述**:Base58是一种二进制到文本的编码方式,主要用于编码比特币地址。
- **使用方法**:Base58编码主要用于生成人类可读的公钥哈希(即比特币地址)和私钥的可导入格式。这样的格式不仅容易被人识别和处理,也方便在不同的应用和服务之间进行交易和管理。
- **使用方法**:Base58编码主要用于生成人类可读的公钥哈希(即比特币地址)和私钥的可导入格式。这样的格式不仅容易被人识别和处理,也方便在不同的应用和服务之间进行交易和管理。

### [Bech32 编码/解码](./bech32.md)

- **描述**:Bech32 是一种字符编码方案,设计用于提高比特币地址的可读性和纠错能力。它是一种人类可读的编码方式,主要用于比特币隔离见证(SegWit)地址的表示。
- **使用方法**:Bech32 编码用于生成比特币隔离见证地址(例如,P2WPKH 和 P2WSH 地址)。它采用了一个包含 32 个字符的字符集,使得地址既易于手动输入,又具有较强的错误检测能力。Bech32 地址以“bc1”开头,后跟若干字符,提供了更高的错误检测能力和更好的用户体验。

### [Bech32m 编码/解码](./bech32m.md)

- **描述**:Bech32m 是 Bech32 的一种变体,专门用于 Taproot 地址的编码。它与 Bech32 在结构上类似,但引入了不同的错误检测机制,以增强对 Taproot 地址的支持。
- **使用方法**:Bech32m 编码用于生成 Taproot 地址,这种地址以“bc1p”开头。Bech32m 提供了改进的错误检测能力,适合用于 Taproot 地址的使用。它在 Bech32 基础上增加了一些功能,确保 Taproot 地址具有更好的数据完整性和错误校验能力。

0 comments on commit 4f6c28b

Please sign in to comment.