一,比特币系统 运行原理 概述

一,比特币 VS 传统银行系统

传统银行交易均需以银行作为center来进行交易,如果买家要向卖家转账,其实质路径为:
买家 ----> 银行 ----> 卖家。
以支付宝转账为例,A向B发起转账后,处于后台的银行会将A,B的账户余额相应进行调整,以此,作为转账记录,记录A,B的消费记录。
在类似于银行的这类中心系统中,由于交易需要中心媒介的存在,因而,用户隐私难以得到保证,此外,为了支撑这类中心系统的工作,用户需要额外的花销,增加了不必要的支出
与这种中心化系统相比,比特币则是一种使用区块链的去中心化交易手段。比特币直接实现了 点对点 的交易,无需任何 中心系统 介入,较传统交易体系而言,用户的隐私得以在更大程度得到保证。

二,比特币系统运行机制概述

比特币是以 区块链技术 为核心的一种 加密数字货币,其实现了点对点的交易,而无需任何第三方的介入,从而保证了用户的隐私性。

比特币系统成员/节点:
根据成员目的,可将其分为以下2种:
普通节点:主要用比特币进行匿名交易,保证private;
特殊节点miner:通过搜索 符合要求的 nonce 争夺记账权的节点,这种行为在比特币中被称为mining,比特币也被称为数字黄金。
根据节点记录内容,可将系统节点分为以下2种:
轻节点 light node:仅记录了block header中的一些宏观信息,用于交易。无法验证double spending;
全节点full node / fully validating node:记录了block中所有信息,可以验证一笔交易是否为double spending;

比特币系统的有效运行 需要解决以下几个问题:
1,比特币如何产生?
BTC是凭空捏造的, 只有在 coinbase transaction中才能产生。
2,账本内容如何取得共识?
BTC system中,transaction list被记录在blockbody的merkle tree中,其根哈希值被记录在blockheader中,系统中full node可以通过追踪blockchain,而verify一个交易是否合法,继而确认新发布的block是否合法(1,block中交易合法否? 2,blockheader中的nonce值是否符合相应的要求? 3,blockheader中的target是否与 BTC system 设定一致?),而blockheader中merkle tree的根哈希值,则确保了 账本交易的不可更改性(账本一旦被更改,merkle tree的根哈希值会随之发生变动)。当一个block被确定为 不合法block 时,系统中的节点 会 在 新的分叉链上发布block,而将其 丢弃。
3,比特币系统 transaction safty 如何保证?
BTC system中 交易的安全性,主要依托于:密码学上的设立机制 && 共识协议,当一个node注册账户时,需要确保其在生成private key时,有足够随机 的 随机源,已保证private key的安全性。与此同时,要保证 system中 绝大部分 算力 为 honest,不会将非法交易 写入 block中。这个过程就像是用户到 银行取钱,为了确保 withdraw 的 安全性,一方面,用户要持有个人有效证件,且该证件不易被伪造,另一方面,要确保银行工作人员 操作的合法性,不会进行违规操作,只有同时满足了以上2点,才能保证 用户从银行 withdraw 的行为的安全性。

针对上述问题,简述BTC system运行机制:
比特币的交易有2种,一种为 铸币交易,一种为 转账交易。铸币交易 是一个 凭空造币 的过程,当用户节点通过挖矿,得到一个block时,系统会对该用户节点予以奖励,给予一定数额的比特币。这也是比特币系统中,唯一可以产生比特币的一种方式,是 系统->用户 的交易。最初在比特币系统中,每挖到一个block,系统会给出50BTC作为挖矿奖励,之后,每个21万个block,出块奖励会减半,到目前,出块奖励已经降到 12.5BTC.
而 转账交易 则为比特币系统中2个用户之间进行的直接交易。在这样的 p2p 交易 中,没有了类似银行系统这样的第三方的存在,可能会存在 double spending 的问题,为解决这种credit问题,比特币系统会将每笔交易都记录在block中, 通过追踪block,用户可以进行 0信用 交易,而无需担心上当受骗。下面就 比特币 的 记账原理 进行简述:
首先,我们需要知道,所谓的比特币系统,其实就是一个去中心化的区块链,每个区块均是由矿工辛苦劳作挖出,其上记录着比特币的所有交易信息,这些区块通过一定的密码学原理,链接在一起,其中的交易记录对于大众是public的,用户可以通过追踪交易记录,而确保交易的合法性。
由于比特币是一个去中心化的共享系统,为确保交易的不可篡改性,比特币采用了 mercle tree 的形式 来记录交易 信息,这些信息全都被记录在block中:
1,block由2部分组成:blockheader 和 blockbody,blockheader中记录着block的一些宏观信息(譬如:前一个blockheader的hash值,以及block中merkle root的hash值等),blockbody中则以merkle tree的形式详细记录了所有的交易 信息。
merkle tree 实际上是 二叉树 和 hash 两种方式结合起来的一个数据结构。二叉树保证了交易的可查找性,而hash则保证了交易的不可篡改性。merkle tree中的每一笔交易都拥有一个hash值,从底层开始,层层递进,上层交易的hash为其2个节点交易hash的一个和,如此类推,一直到merkle root的hash值。如果一个用户想要篡改交易记录,则这笔交易的hash就会发生变化,从而导致merkle root的hash发生变化,当系统中的其他节点发现该block的merkle root hash 发生异变,则认为该block是非法的,该block会由此作废(block中存储的交易记录要取得其他区块的分布式共识,否则则视为非法区块)。

在理论上,分布式共识是无法达成的,因为分布式的本质仍未异步性,不同节点的网络延迟不同,因此,在给定时间内,未必所有节点均能将结果返回。

通过这种方式,比特币保证了交易记录的不可篡改性,从而实现了交易可在 0信任 基础下进行。
如前所诉,比特币是一个去中心化的区块链,链上的各个block均由矿工所挖,这些block通过存储the hash of previous blockheader的方式而被链接起来。矿工通过挖矿获得block,可以获得一定数额的比特币作为奖励,除此以外,作为一个block的持有者,矿工可以通过记账的形式在每笔交易中收取一定的 transaction fee。上述2点也是促使矿工挖矿的主要动力。
需要提及的是,比特币系统中,出块儿的时间是固定的,大约每10min会出一个block,而每出2000个block,铸币奖励便会减少一半,且系统会根据出块儿的速度来自动调节挖矿难度,出块儿过快则增加难度,过慢则降低难度。而对于矿工来说,挖矿是一种很公平的劳动,其gain的多少只与其投入成正比。如果两个矿工算力相当,则投入时间多的矿工获得block的可能性更大。

通过对hash function的应用,比特币实现了block的链接(系统自生长)和 交易记录的不可篡改性。

以上,对比特币系统的数据结构,以及p2p交易的0credit机制进行了介绍,而在这个比特币系统中,存在着2种身份的使用者,其以2种节点形式呈现在比特币系统种。

在比特币系统中,存在2种类型的节点:全节点轻节点,全节点中记录着所有的transaction info,可以验证一个交易是否为double spending,而轻节点只保存了blockheader的一些info,无法对double spending进行验证(doublespending的验证,需要追踪用户交易记录,验证用户当前是否有可用于本次交易的比特币,而blockheader中只存储了merkleroot hash,并没有存储详尽的交易记录)。
上述两种节点对应着比特币中的两种身份:矿工(block持有者),普通用户。矿工除普通用户所享权力外,还需要负责对区块中的交易进行记录(在交易未执行时,矿工会将该笔交易记录在UTXO中,确认执行后,则会将其记录在block中)。

对于矿工而言,其在比特币系统中的主要行为是挖矿,以获取一定收益。
矿工通过算力和时间的投入,来寻找符合系统要求的nonce,生成block,从而获取一定的铸币奖励和transaction fee(从整个系统的角度来说,通过挖矿,系统实现了自生长性)。
挖矿公式:H(block header) <= target
系统给定一个target数值,矿工需要找到一个随机数nonce,使H(block header) 小于等于这个数值。
除了给定的256bit可找外,blockheader中的coinbase域也可用于搜索nonce。

block header 主要涵盖一些宏观信息,如:
比特币协议版本
hash of previous block header
target的十六进制编码
nonce
coinbase域
merkle roothash(决定了block body所包含的transaction list不可能被篡改)

而对于普通用户而言,其在比特币系统中进行交易,则更多的是为了确保交易的隐蔽性。
用户账户:public key , private key
用户交易地址:public key取hash
A向B购物:public key private key 归属
交易合法性验证:next input + previous output

初学者,理解难免有勿,欢迎批评指正

猜你喜欢

转载自blog.csdn.net/u014765410/article/details/122270545
今日推荐