比特币的账户结构
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并使交易成功上链,而带时间锁的交易会在时间锁过期后变成失效交易
比特币的全节 点为啥这么少?
是否一个用户一个节点?
不是,矿场,矿池等机构的存在
维护节点不是免费的, 全节点需要加载全部历史数据,意味看消耗大量的硬盘空间、 带宽、电、时间、精力等,比特币专业用户(矿场、专业个人、交易所、大商家、比特币服务供应商)们,有使力也有动力去维护至少个优质节点
有看法认为:低速节点是有害的,它们浪费网络资源,对安 全性并没有什么实质帮助(用完就关机像吸血骤一样);只有高速的、专业的节点才有益于比特币网络
以上是关于比特币的账户结构的主要内容,如果未能解决你的问题,请参考以下文章