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
每月下载 180,037 次
用于 250 个 软件包(直接使用6个)
39KB
726 行
Coins Core
coins-core
是 UTXO 交易的抽象描述。它提供了一系列特质,为 UTXO 交易构建提供一致接口。Coins 的特质确保在交易构建过程的各个步骤中类型保持一致,并在构建多个链(例如比特币主网和比特币测试网)上的交易时允许代码重用。
许多 UTXO 链开发者熟悉的概念已经被泛化。交易被建模为 Input
和 Output
的集合。而不是地址或脚本,Output
特质有一个关联的 RecipientIdentifier
。同样,而不是出点,Input
特质有一个关联的 TXOIdentfier
。
通过实现这些特质并扩展实现以包含特定网络的函数,可以添加对其他链的支持。我们已在 bitcoins
软件包中提供了适用于比特币链(主网、测试网和签名网)的实现。
类型布局
序列化特质
Ser
特质是一个简单的序列化 API,使用 std::io::{Read, Write}
。实现者定义了类型的二进制序列化格式以及 JSON 序列化。交易类型必须实现 Ser
,因为提供的 txid
逻辑假设可以访问 serialize
方法。
Ser
有一个关联的 Error
类型。大多数基本类型可以简单地使用提供的 SerError
。然而,更复杂的(反)序列化将需要实现自定义错误类型来处理(例如)无效交易。这些类型必须能够轻松地从 SerError
或 std::io::Error
实例化。
交易类型
这些描述了交易组件。
TXOIdentfier
唯一标识一笔交易输出。在比特币中,这被称为输出点。Input
描述了交易输入。它有一个相关的TXOIdentfier
来标识正在消耗的TXO,并且可以扩展辅助信息(例如比特币的nSequence
字段)。RecipientIdentifier
标识新的TXO的接收者。在比特币中,这些是公钥脚本。Output
描述了交易输出。它有一个相关的RecipientIdentifier
和一个Value
类型。Transaction
是一组要消耗的Input
和要创建的Output
的集合。其相关的Digest
类型描述了其交易ID,必须由其相关的HashWriter
生成。这允许交易指定用于生成其sighash摘要和其TXID的摘要算法。
编码器类型
编码器在面向人类的数据和协议数据之间进行转换。特别是地址和RecipientIdentifier
之间。
Address
是一种描述网络地址语义的类型。对于比特币来说,这是一个枚举,其成员包装了一个String
。AddressEncoder
具有相关的Address
和RecipientIdentifier
类型。它公开了encode_address
、decode_address
和string_to_address
,以便在它们之间进行转换。
构建器类型
交易构建器提供了一个方便的接口来构建Transaction
对象。它具有相关的Transaction
和AddressEncoder
类型,并确保它们使用相同的RecipientIdentifier
。这允许我们在构建器上提供一个简单的pay(value, address)
接口。
网络类型
网络类型确保了一组实现类型之间的类型一致性,提供了统一的接口来访问它们。这旨在成为实现库的主要入口点。它保证Builder
、AddressEncoder
和Transaction
类型使用相同的Error
、相同的RecipientIdentifier
、相同的TXOIdentfier
和相同的Address
类型。它提供了对AddressEncoder
相关函数的透传,并提供了一个方便的方法来实例化一个新的构建器。
依赖关系
~2.2-3MB
~45K SLoC