比特币的账户结构

Posted 阿洋太爱大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币的账户结构相关的知识,希望对你有一定的参考价值。

比特币的交易

        1.交易时,你需要向收款方地址发送比特币

        2.你要花的BTC,要么来自以前别人发给你的BTC,要么是你挖出来的,每一份这样的钱叫UTXO(未花费的交易输出)

        3.一个交易里面,发送的部分为输入,接受的部分为输出

        4.在广播交易的时候,节点会检查输入是否为真实有效的UTXO(每个节点监测着以百万为单位的所有UTXO)

        5.一旦使用一个UTXO,就必须全部花完,除了给接受者以外,可以选择把零钱给自己的另外一个地址,于是也就产生了两个新的UTXO

        6.每个UTXO都带有一个使用条件,即提供了该地址地址所对应的私钥所做的签名,才被认可

        7.每个挖矿的节点在上一个区块产生后,在内存、交易池中把上一个区块已经打包的交易删除掉,把已经收到但尚未打包的交易打包,并开始不停的计算,试图作出符合条件的Hash

        8.所有输入的BTC减去输出的BTC,就是给矿工的手续费

 UTXO的缺点

1.可表达的状态少

        UTXO只能是已花费或者未花费状态, 没有给需要任何其它内部状态的多阶段合约或者脚本留出生存空间,意味着UTXO只能用于建立简单的、一次性的合约,UTXO更像是一种二进制控制位

2.区块链盲点(Blockchain-blindness)

        UTXO的脚本只能看到自己这条历史轨迹,无法看到区块链的数据的全貌,这导致了功能性扩展受到了限制,在花费比特币的过程中需要小心翼的组合UTXO,这也导致了系统状态逻辑复杂,不适合设计成智能合约的基础结构

3.价值盲点(Value- blindness)

          基于账户模型的余额在花费过程中,可以任意的按值存取,它仅取决于程序能表示的最小精度 UTXO脚本不能提供非常精细的金额控制2 UTXO要求必须全部移动,如果要满足一个 目标值金额,对组合UTXO算法的要求会比较高,采用许多有不同面值的UTXO,方面要求尽可能地精确, 另一方面又要求输入输出的数量尽可能的小

比特币的交易组成

一个交易包括:

1.版本号

代表了交易使用了哪些功能

2.输入

定义了那些币会被花费

3.输出

定义了币流向了哪里

4.时间锁

定义了交易在什么时间后才会生效

比特币交易的input内容:

每个input 包含四个字段:

1.父交易的ID:每个交易有哈希值,用来索引交易

2.父交易的output字段:该UTXO在那个交易中的输出顺序号

3.签名脚本:该UTXO的解锁脚本,主要是签名和公钥

4.序列号

比特币交易的output内容:

        每个output包含两个字段:

amount和公钥脚本

其中amount字段是以聪为单位转账的比特币数量,小端序

公钥脚本,锁定脚本(locking script,主要是公钥hash值+签名验证脚本只有提供解锁脚本(主要是公钥本身+签名值)才能解锁,才能被花掉),公钥脚本与签名脚本类似,可以理解为给接收方的箱子加锁,只能被掌握钥匙的接收方打开。

比特币交易 时间锁

在大多数交易里,它被设置为0,用来表示立即执行

如果每个input的序列号都是ffffffff,时间锁将不生效

时间锁以小端序占据4个字节

实践中,时间锁的主要问题:

1.时间锁过期后不能确保交易会执行,可能手续费不够了

2.交易的发起方可以在锁定期结束前使用对应的input并使交易成功上链,而带时间锁的交易会在时间锁过期后变成失效交易

比特币的全节 点为啥这么少?

是否一个用户一个节点?

不是,矿场,矿池等机构的存在

维护节点不是免费的, 全节点需要加载全部历史数据,意味看消耗大量的硬盘空间、 带宽、电、时间、精力等,比特币专业用户(矿场、专业个人、交易所、大商家、比特币服务供应商)们,有使力也有动力去维护至少个优质节点

有看法认为:低速节点是有害的,它们浪费网络资源,对安 全性并没有什么实质帮助(用完就关机像吸血骤一样);只有高速的、专业的节点才有益于比特币网络

以上是关于比特币的账户结构的主要内容,如果未能解决你的问题,请参考以下文章

区块链: 技术驱动金融 - 第3章 比特币的运行机制

比特币诸相非相

比特币的区块结构解析

如何防止double spending

区块链比特币学习 - 1 - 交易

比特币的底层逻辑