我正在玩比特币区块链来学习 Scala 和一些有用的库。目前我正在尝试使用 SCodec 解码和编码块,我的问题是 vectorOfN 函数将其大小作为 Int。如何在保留完整值范围的同时使用长字段作为大小。换句话说,是否有 vectorOfLongN 函数?
这是我的代码,如果我使用 vintL 而不是 vlongL,它可以很好地编译:
object Block {
implicit val codec: Codec[Block] = {
("header" | Codec[BlockHeader]) ::
(("numTx" | vlongL) >>:~
{ numTx => ("transactions" | vectorOfN(provide(numTx), Codec[Transaction]) ).hlist })
}.as[Block]
}
您可以假设为 Blockheader 和 Transactions 实现了适当的编解码器。实际上,vlong 被用来简化这个问题,因为比特币使用自己的编解码器来处理可变大小的整数。