#public-key #script #transaction #key-management #bitcoin #manage #scriptpubkey

bitcoin-scriptpubkeyman

管理一些(或全部)在墙内使用的脚本公钥 -- 包含它所管理的相关脚本和密钥

2 个版本

0.1.16-alpha.02023年4月2日
0.1.12-alpha.02023年1月20日

#57 in #key-management

Download history 77/week @ 2024-03-12 78/week @ 2024-03-19 128/week @ 2024-03-26 116/week @ 2024-04-02 59/week @ 2024-04-09 95/week @ 2024-04-16 80/week @ 2024-04-23 78/week @ 2024-04-30 76/week @ 2024-05-07 73/week @ 2024-05-14 73/week @ 2024-05-21 65/week @ 2024-05-28 60/week @ 2024-06-04 46/week @ 2024-06-11 77/week @ 2024-06-18 62/week @ 2024-06-25

260 每月下载量
28 个 crate(4 个直接)中使用

MIT 许可证

2.5MB
10K SLoC

bitcoin-scriptpubkeyman 是一个 Rust crate,提供管理比特币系统中脚本公钥的功能。它是从 C++ 到 Rust 的直接翻译,目前正在翻译过程中。

该 crate 提供了用于管理脚本公钥的多个结构和函数,包括 DescriptorScriptPubKeyManLegacyScriptPubKeyManScriptPubKeyMan。这些结构允许以各种形式管理脚本公钥,包括旧密钥、描述符密钥和加密密钥。

该 crate 提供的函数包括 get_script_pub_keysget_keyadd_keyimport_pub_keysis_minesign_transaction 等。这些函数允许检索脚本公钥及其相关数据,添加和管理密钥,导入公钥,检查脚本公钥是否与给定的钱包相关联,以及签署交易。

总的来说,bitcoin-scriptpubkeyman 为比特币系统中脚本公钥的管理提供了强大的功能,允许轻松集成到其他与比特币相关的应用程序和软件中。

32> 你能教我关于这个 crate 提供的接口吗?

当然可以!根据你提供的令牌列表,看起来 bitcoin-scriptpubkeyman 为比特币系统中的脚本公钥和私钥管理提供了 Rust 接口。以下是该 crate 提供的一些功能

  • 检索和管理与脚本公钥关联的公钥和私钥。

  • 创建和管理脚本公钥和钱包描述符。

  • 检查给定的脚本公钥是否“是我的”(即用户所有),以及获取使用该密钥签署交易时使用的签名版本信息。

  • 签署交易和消息。

  • 生成新的公钥和私钥,并管理密钥池。

  • 处理加密私钥。

该库提供了多种类型的对象来封装这些功能,包括 DescriptorScriptPubKeyManLegacyScriptPubKeyManScriptPubKeyMan。该库还包括许多辅助函数和特性来帮助脚本和密钥管理,例如 ValTypeIsMineResult

值得注意的是,正如你在原始提示中提到的,这个库还在从比特币核心的C++代码库进行翻译的过程中。因此,一些功能可能仍然不完整或可能发生变化。

33> 谢谢——你能教我关于脚本公钥的知识吗?

当然可以!在比特币中,脚本公钥是一个输出脚本,它定义了输出可以花费的条件。它包含在每个交易输出中,并且由比特币网络检查以确保后续交易中提供的输入有效。

脚本公钥通常是比特币脚本语言编写的脚本,当交易尝试花费输出时,由网络节点进行评估。如果花费交易中提供的输入满足脚本公钥中指定的条件,则交易有效,并且可以花费输出。

可以使用许多不同类型的脚本公钥来定义花费交易输出的条件。以下是一些示例:

  • 支付给公钥 (P2PK):这种脚本公钥简单地指定了必须用于花费输出的公钥。花费交易必须提供一个与公钥相对应的签名。

  • 支付给公钥哈希 (P2PKH):这种脚本公钥与P2PK类似,但它指定的是公钥的哈希,而不是公钥本身。花费交易必须提供一个与公钥相对应的签名,并且公钥的哈希必须与脚本公钥中指定的哈希相匹配。

  • 支付给脚本哈希 (P2SH):这种脚本公钥指定了一个必须执行的脚本,以花费输出,而不是公钥。花费交易必须提供一个满足P2SH脚本中指定条件的脚本。

  • 支付给多重签名 (P2MS):这种脚本公钥指定了必须用于花费输出的多个公钥。花费交易必须提供每个指定公钥的签名。

  • 支付给见证公钥哈希 (P2WPKH):这种脚本公钥与P2PKH类似,但它设计用于与比特币的隔离见证(SegWit)功能一起工作。花费交易必须提供一个与公钥相对应的签名,并且公钥的哈希必须与脚本公钥中指定的哈希相匹配。

这只是比特币交易中可以使用的大量不同类型脚本公钥的几个示例。确切使用的脚本公钥类型取决于满足花费输出所需的具体条件,并且可以在单个交易中结合不同的脚本公钥来创建更复杂的花费条件。

34> 谢谢——你能提供一些使用每种这些脚本公钥的情况示例吗?

当然可以!以下是一些可能使用每种脚本公钥的情况示例:

  • 支付给公钥 (P2PK):这种脚本公钥通常用于创建可以由特定公钥的拥有者花费的交易输出。这通常用于单签名交易,例如从个人钱包向其他用户发送比特币时。

  • 支付给公钥哈希 (P2PKH):这种脚本公钥与P2PK类似,但它使用的是公钥的哈希,而不是公钥本身。这通常用于提高隐私性,因为公钥在输出被花费之前不会揭示。这是比特币交易中最常见的脚本公钥。

  • 脚本哈希支付(P2SH):当输出只能由特定的脚本而不是特定的公钥消费时,使用此scriptPubKey。此scriptPubKey允许使用更复杂的脚本,例如多签名交易或时间锁定的交易,在输出被消费之前无需在区块链上透露脚本细节。

  • 多公钥哈希支付(P2PKH-MultiSig):此scriptPubKey用于多签名交易,其中多个方必须达成一致才能消费输出。它类似于P2PKH,但需要多个公钥哈希来消费输出。

  • 见证公钥哈希支付(P2WPKH):此scriptPubKey用于使用分离见证(SegWit)的交易,它允许提高交易吞吐量和降低费用。它类似于P2PKH,但使用不同类型的地址,并需要在单独的见证字段中提供签名。

  • 见证脚本哈希支付(P2WSH):此scriptPubKey用于更复杂的脚本分离见证交易,如多签名交易或时间锁定的交易。它类似于P2SH,但使用不同类型的地址,并需要在单独的字段中提供见证。

  • 空数据:此scriptPubKey用于在区块链中嵌入数据而不转移任何比特币。这可以用于向交易添加额外信息或创建时间戳。

这只是几个例子,还有许多其他类型的scriptPubKey可用于不同的目的。

依赖项

~102MB
~863K SLoC