我最初在比特币堆栈交换上有这个问题,但我被告知,因为它至少部分是一个编码问题,所以在SO上更有意义。
我使用golang的btcd作为创建处理事务的服务器端工具的基础。我找到了一个很好的example来创建一个基本的单输入一输出事务来让我开始实现,而且我还有read the documentation heavily技术细节在这里。我也非常重视其他btcsuite库,试图获得更多洞察力。要明确的是,我不期望任何这些工具发布交易或类似的事情;我知道这是用btcd编写的,特别是出于非常非常好的理由。我只是想使用这些工具来创建我稍后可以发布的有效交易。
我仍然对实现多输入,多输出事务以及我们在其上使用的脚本的细节感到非常困惑。一些主题:
在我上面链接的HelloBitcoin示例中的create Transaction example中,整体魔法发生在接近结束时:
buffer.Write(version)
buffer.Write(inputs)
buffer.Write(inputTransactionBytesReversed)
buffer.Write(outputIndexBytes)
buffer.WriteByte(byte(scriptSigLength))
buffer.Write(scriptSig)
buffer.Write(sequence)
buffer.Write(numOutputs)
buffer.Write(satoshiBytes)
buffer.WriteByte(byte(scriptPubKeyLength))
buffer.Write(scriptPubKey)
buffer.Write(lockTimeField)
我觉得有很多未解决的问题如何扩展它以处理多个输入和多个输出。对于输入,是否就像将所有输入事务转换为little-endian一样简单,注意inputs
中的正确数字,并从那里开始?对于输出,您是否只有satoshiBytes
到scriptPubKey
的单个块?我在文档中找不到这一切是如何粘合在一起的,而在这一点上我觉得我需要一些帮助来解决这个问题。在此先感谢您的帮助 - 如果我们能够得到这两点的答案,我可能最终会从这些不可避免的结果中提出更多问题。