12 个版本 (6 个重大更新)

0.12.0 2024年7月27日
0.11.1 2024年6月9日
0.8.7 2023年8月23日
0.8.3 2023年3月15日
0.2.2 2021年4月4日

#15 in #cryptocurrency

Download history 37401/week @ 2024-04-28 37677/week @ 2024-05-05 40416/week @ 2024-05-12 37419/week @ 2024-05-19 36441/week @ 2024-05-26 40014/week @ 2024-06-02 46175/week @ 2024-06-09 43689/week @ 2024-06-16 44409/week @ 2024-06-23 38543/week @ 2024-06-30 38620/week @ 2024-07-07 41093/week @ 2024-07-14 45397/week @ 2024-07-21 42501/week @ 2024-07-28 44003/week @ 2024-08-04 45891/week @ 2024-08-11

每月下载 180,037
用于 250 软件包(直接使用6个)

MIT/Apache

39KB
726

Coins Core

coins-core 是 UTXO 交易的抽象描述。它提供了一系列特质,为 UTXO 交易构建提供一致接口。Coins 的特质确保在交易构建过程的各个步骤中类型保持一致,并在构建多个链(例如比特币主网和比特币测试网)上的交易时允许代码重用。

许多 UTXO 链开发者熟悉的概念已经被泛化。交易被建模为 InputOutput 的集合。而不是地址或脚本,Output 特质有一个关联的 RecipientIdentifier。同样,而不是出点,Input 特质有一个关联的 TXOIdentfier

通过实现这些特质并扩展实现以包含特定网络的函数,可以添加对其他链的支持。我们已在 bitcoins 软件包中提供了适用于比特币链(主网、测试网和签名网)的实现。

类型布局

序列化特质

Ser 特质是一个简单的序列化 API,使用 std::io::{Read, Write}。实现者定义了类型的二进制序列化格式以及 JSON 序列化。交易类型必须实现 Ser,因为提供的 txid 逻辑假设可以访问 serialize 方法。

Ser 有一个关联的 Error 类型。大多数基本类型可以简单地使用提供的 SerError。然而,更复杂的(反)序列化将需要实现自定义错误类型来处理(例如)无效交易。这些类型必须能够轻松地从 SerErrorstd::io::Error 实例化。

交易类型

这些描述了交易组件。

  • TXOIdentfier唯一标识一笔交易输出。在比特币中,这被称为输出点。
  • Input描述了交易输入。它有一个相关的TXOIdentfier来标识正在消耗的TXO,并且可以扩展辅助信息(例如比特币的nSequence字段)。
  • RecipientIdentifier标识新的TXO的接收者。在比特币中,这些是公钥脚本。
  • Output描述了交易输出。它有一个相关的RecipientIdentifier和一个Value类型。
  • Transaction是一组要消耗的Input和要创建的Output的集合。其相关的Digest类型描述了其交易ID,必须由其相关的HashWriter生成。这允许交易指定用于生成其sighash摘要和其TXID的摘要算法。

编码器类型

编码器在面向人类的数据和协议数据之间进行转换。特别是地址和RecipientIdentifier之间。

  • Address是一种描述网络地址语义的类型。对于比特币来说,这是一个枚举,其成员包装了一个String
  • AddressEncoder具有相关的AddressRecipientIdentifier类型。它公开了encode_addressdecode_addressstring_to_address,以便在它们之间进行转换。

构建器类型

交易构建器提供了一个方便的接口来构建Transaction对象。它具有相关的TransactionAddressEncoder类型,并确保它们使用相同的RecipientIdentifier。这允许我们在构建器上提供一个简单的pay(value, address)接口。

网络类型

网络类型确保了一组实现类型之间的类型一致性,提供了统一的接口来访问它们。这旨在成为实现库的主要入口点。它保证BuilderAddressEncoderTransaction类型使用相同的Error、相同的RecipientIdentifier、相同的TXOIdentfier和相同的Address类型。它提供了对AddressEncoder相关函数的透传,并提供了一个方便的方法来实例化一个新的构建器。

依赖关系

~2.2-3MB
~45K SLoC