比特币交易过程二
发表于|更新于|技术笔记
|浏览量:
接上一篇文章,这张星图描绘了比特币交易细节中的脚本。
注意这也是后续比特币的继承者们对比特币不满意的地方。因为比特币交易脚本是基于栈堆的非图灵完备语言,后续的追求者希望在区块链的基础上运行强大的机器语言,让每个用户都可以见证其运行的过程的结果“智能合约”应运而生。当然,这里的图只简单指出比特币的交易脚本。
文章作者: TigerInYourDream
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 TID's Blog!
相关推荐
2019-09-21
使用比特币节点进行交易
使用比特币节点进行交易如果读过之前的完整的一系列文章,应该已经经历了从节点源代码编译,运行,和配置 rpc 的完全过程,本文在之前工作的过程上进行总结,使用比特币节点发起一笔交易。 注意:读了之前的文章也应该清楚一点,比特币节点代码和 rpc api 更新较快。本文依赖比特币 0. 18 版本,系统环境乌班图。 比特币发起交易步骤首先列出比特币交易的最主干的过程如下 提取UTXO 发起交易 对交易进行签名 广播交易 提取UXTO交易的最重要的部分就是一开始的提取UXTO的过程。根据官方的 RPC Api 。我们可以使用 listunspent 的api 来获取UTXO的列表。 这是交易过程中第一个会出现问题的地方,如果我们直接使用这个 api 会发现一个问题,我们可能会发现完全提取不倒信息。 这是因为我们想要发起交易,很大程度上依赖的是比特币节点的钱包的功能。(关于比特币全节点的概念,请参考《精通比特币》一书)。这个比特币地址如果和本节点上的钱包是没有关联的话,我们是无法得到UTXO的。 接下来介绍什么叫做关联:根据比特币早期的文档(文档版本比较老,可以去查阅早期...
2019-09-25
创建具有找零地址的交易
之前的文章讲了构建裸交易的过程,但是上文直接构建裸交易是没有创建找零地址的,所以输入和输出的差值都会成为矿工的交易费。极容易造成高额的交易费,所以这篇文章在之前的基础上使用 fundrawtransaction 来创建具有找零地址的交易。 先列出主干 创建一笔没有输入的交易 添加充足的未签名的的交易来满足交易需求 签名 广播 具体过程 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431...
2019-09-28
构建复杂交易
本文在之前的基础上构建复杂交易。 先对”复杂”进行定义 复杂指的是 我们使用两个交易输入,输出到两个地址上。且设定两个输入交易是输入不同的人的(输入属于不同的私钥)。 按照惯例列出主干过程 构建多输入,多输出的裸交易 依次进行签名 广播 因为之前的文章演示已经非常详细,故本文不在做额外展示,另外许多测试过程也不再列出,具体过程如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431...
2019-10-10
构建离线交易
本文是在之前的复杂交易的基础上进行的,离线签名主要是为了满足以下场景 我们都知道,正常的交易需要确认6次以后才可以被视作可信(confirm)交易。当我们需要从A到B再到C连续交易时,如果离线签名不存在,则必须在A到B的交易被确认后,再发起一次B到C的交易。而离线签名可以使我们做到A到B的交易在广播之前就立刻发起一个下一步交易,之后再进行广播。 按照之前惯例,列出离线签名的主干步骤 发起第一步交易,完成对交易的签名 在第一步交易未广播之前,发起第二笔交易 依次广播第一次交易和第二交易,完成整个交易过程 以上的交易中,提取UXTO,发起交易,签名的步骤和之前列出的交易类型是一致的,不可省略。下面列出发起离线签名的步骤,其中18步之前和前文的构建复杂交易是一致的,之后的步骤是发起离线签名的过程 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475...
2019-08-29
比特币交易基本问题
经过一段时间的学习,尝试去理解比特币和区块链的概念,也在阅读rust-bitcoin项目下的代码。现在来提出一个比特币交易的基本问题: 我们怎样去实现比特币交易?问题的产生问题的产生很简单,现在只有一个目的,想要在比特币网络上实现一次转账交易。在实现这个目标之前,我做了一些准备工作: 阅读了mastering bitcoin 参阅了 rust-bitcoin 项目下 rust-wallet的源码 阅读了bitcoinJ的源码,根据bitcoinJ的实现梳理出一个我认为的交易实现的过程 查阅了 rust-bitcoin 项目的子项目murmel,该项目是一个 SPV 节点的实现,截止目前还暂时无法运行 之前也在博客撰写了 比特币交易过程 的文章,可以在之前的博客看到。其中涉及熵的生成,助记词生成,秘钥的派生等钱包的概念。也在后续的文章中提炼出来交易过程中的脚本构建的过程。初步构建了比特币交易的流程。也有文章描述了SPV节点的概念,简单来讲 SPV 节点不存储完整的区块链信息,使用称为 merkle tree 的数据结构来验证交易信息。 初步思考第一层的准备工作完成之后...
2019-12-10
SPV节点获取merkerblock数据
在之前的文章中提到了SPV节点,一直说要写文章说明是什么是比特币SPV节点。网上有很多文章来描述这个问题,我之前也写过相关的文章,有兴趣的话可以回去查阅相关问题。简单来说,SPV**节点最主要的特点就是:只存储头信息(BlockHeader)。**所以他做到了存储数据规模大幅减少,只有完整数据的千分之一的水平。所以SPV节点适合在存储有限的设备上运行,比如手机客户端。但是本文的重点不是重复讲述SPV节点的概念的,而是换一个角度,从比特币网络协议入手,描述如何从全节点下载SPV所需的数据到节点上(SPV节点上)。这个所需的的信息,就是merkerblock。 本文的关键字是:”SPV节点”,”比特币网络协议”,”BIP47” 交易的基本问题在探讨如何和比特币网络进行信息交互之前先解释一个基本问题 实现比特币交易的形式有哪些? 虽然如此描述这个问题并不准确,但我还是按照自己的理解去解答这个问题,同时参照以上的图片来辅助说明。实现交易的形式有两类 借助于比特币全节点 借助于比特币的SPV节点 对于1,很明确。比特全节点有区块链完整的信息。获取任何交易信息,发起交易和广播不在话下...
公告
This is my Blog