主页 > imtoken官方安卓版下载教程 > 区块链笔记——《区块链技术核心概念与原理详解》
区块链笔记——《区块链技术核心概念与原理详解》
3. 什么是比特币
* 凯恩斯《论货币》:货币是可以承载价值的一般等价物
* 铜币、金银:贵金属作为货币的价值取决于贵金属本身的价值
* 银票:信用货币,银票作为货币的价值取决于银行的背书
* 法定货币:信用货币(如人民币),纸币作为货币的价值取决于国家政府的背书
信用货币,就实物而言,只是一张纸,本身没有任何价值。
信用货币的价值来源于我们对信用货币的信任,或者说,来源于我们对银行和政府的信任。
* 一串数字
类似于金、银、铜、纸都可以作为货币,数字也可以作为货币。
数字货币的价值来自于每个人对数字的信任,这在区块链中被称为共识。
每个人都相信数字是有价值的,数字可以作为货币。 比如卖馒头的人认得这个号码,就可以用这个号码买馒头; 如果卖手机的人认得这个号码,就可以用这个号码买手机。
* 财产只由你自己控制:银行不能动我们的¥,财产只由你自己的私钥控制
* 无通货膨胀:银行增发纸币不会贬值,比特币总量为2100万枚
* 无假钞:任何作弊支付都无法得到比特币网络中其他矿工的确认,因此无法完成支付
* 流通好:全球无缝流通,点对点流通
* 集中式系统:通常有一个中央服务器来存储所有数据。
存储在中央服务器中的是最终结果。 如果中央服务器的数据被篡改,则无法验证。
因为只有一方拥有数据,其他节点无法验证数据的真实性。
* 去中心化系统:数据不再仅仅存储在中央服务器中,而是存储在比特币网络中的各个节点中。
如果将每个节点比作一台电脑,记账数据将存储在每台电脑中。
[问题] 每台电脑存储一个账本数据。 如果某台电脑的账本与其他电脑的账本不同,以哪个账本为准?
4. 比特币原理 4.1 如何验证账本? (哪个分类帐有效?)
【不同账本的场景】
正确的账本分别存放在王二、张三、李四、赵五的电脑里。
张三偷偷把余额从30改成了300。
此时,张三的账本与王二、李四、赵五三人的账本不一致。 以谁的账本为准?
比特币网络中有数百万个账本,每个账本都有海量记录。
每次转账,都要和这几百万账本一一核对。 这种效率是不可接受的。
* 哈希函数:哈希(原始信息)=摘要信息
* 特征:
1)同一个原始信息,同一个哈希函数总能得到同一个摘要信息
2)原始信息稍有改动,就会散列出无法识别的摘要信息
3) 摘要信息不能反推原始信息
账本通常包含的信息:序号、记账时间(时间戳)、交易信息。
散列分类帐以获得摘要,例如 787635A。
如果汇总信息与他人的汇总信息一致,则说明该账本信息与他人的账本信息一致。
这样一来,相比于比对账本的原始信息,比对汇总的效率会大大提高。
序列号、时间戳、哈希值、交易记录保存后,就形成了一个区块。
序号、时间戳、Hash值称为区块头
在对第二个账本进行hash时,加上第一个账本的Hash值,得到第二个账本的汇总信息,如456635B。
如果第二台账的汇总信息一致,则说明第二台账的信息与第一台账的汇总信息一致。
第一台账的汇总信息是一致的,也就是第一台账的信息是一致的。
以此类推,第三个账本的信息是一致的,第二个和第一个账本的信息也是一致的。
每个账本都会产生自己的区块,所有这些区块串联起来的结构称为区块链。
每个节点在检查数据时,只需要检查最后一个块的摘要信息。
如果最后一个区块的汇总信息相同,则说明整个区块链的账本是一致的,从而可以完成高效的账本验证。
4.2 归属问题(某个账户中的比特币属于谁?)
某个账户中的比特币属于谁?
谁可以在这个账户下支付比特币?
刷卡的时候需要提供两个东西:银行卡+密码。 如果银行卡卡号和密码与银行系统中的一致,即可支付。
如果存在欺诈行为,银行将检查帐户所有者。
开户时,我们确认了我们对该账户的所有权
比如有诈骗账户,0001账户有一笔200元的款项给0002账户,
如果银行确认存在欺诈行为,银行可能会撤销该账户。
在点对点交易中,如何在没有第三方(如银行)参与的情况下确定账户的归属?
账号用地址表示,转账过程就是将比特币从一个地址转账到另一个地址。
账本上不保存任何个人信息,谁可以使用这个地址进行支付,谁就拥有这个账户。
比特币用一个地址来代表一个账户,一个地址有对应的私钥。
谁拥有这个私钥,谁就可以使用这个地址进行支付。
比特币地址和私钥是非对称关系,私钥可以通过一系列的哈希运算得到比特币地址。
但是比特币地址不能反转私钥。
谁拥有该地址的私钥,谁就可以使用该地址进行支付。
此时,所有权问题就变成了:如何在不泄露私钥的情况下证明我们拥有一个地址的私钥。
签署交易分为两步:
① 对交易进行哈希处理,得到交易摘要
② 用私钥对摘要进行签名
签名计算完成后,支付节点将在整个比特币网络中进行广播。
广播内容包括交易的原始信息和交易的签名信息。
整个广播过程是一个循环过程。
当节点收到广播并通过验证后,将再次广播给已知的相邻节点。
其他节点收到广播信息后,会验证:
验证签名信息是否为付款方使用私钥对交易信息进行签名生成。
签名和验证是逆操作:签名是一个加密过程,验证是一个解密过程。
关于隐私:整个账本没有任何个人信息,保证了比特币的隐私性。
关于安全:银行卡里的¥可以被银行冻结。 在比特币中,只要我们不泄露私钥,账户的¥是安全的。
4.3 为什么要参与记账? (挖矿) 4.3.1 为什么要记账?
既然要付出成本,为什么还要让节点参与记账呢?
这个奖励也是比特币发行的过程。
4.3.2 挖矿——工作量证明
记账有奖励。 每次记账时,系统都会向记账账户发放一定数量的比特币。
如果大家同时记账,就会出现账目不一致的情况,必须要有一定的规则来限制大家的账目:
① 一段时间内(一般10分钟),只有一个人可以预订成功
② 通过解决密码学问题(即工作量证明)来竞争获得唯一的记账权
③ 其他节点复制记账结果
在解决密码难题时,存在一定的随机性。
而记账是可以得到奖励的,所以大家形象的把记账挖矿的过程叫做。
在验证账本时,每次记账时,都将上一个账本的Hash值和当前账本信息一起作为Hash的原始信息。
如果只是这样一个过程,显然每个人都可以轻松完成记账。
为了保证一段时间内只能一个人记账,就需要增加记账的难度。
因此,比特币系统要求Hash值满足一定的条件(必须以N个0开头,比如18)。
为了满足Hash值以N个0开头,在计算Hash值时必须引入一个变量(输入信息的任何细微变化都会导致Hash值发生变化)。
通过不断改变随机数的值,每次都会得到一个新的Hash值,总能找到N个0开头的Hash值。
第一个找到 N 个从 0 开始的哈希值的节点可以获得唯一的记账权。
① 收集广播中未记录在账本中的交易
② 验证交易有效性(交易签名是否正确,支付地址是否有足够余额)
③ 添加交易给自己转账(挖矿奖励)
如果一个节点比其他节点更快地找到哈希值,则整个交易集将被打包到区块链中。
这样,打包的节点就得到了这个奖励。
该块的哈希值以 18 个零开头。
Hash值是一个十六进制的字符串比特币属于,每一位的取值范围是0-F,所以为0的概率是1/16。
那么连续18位全部为0的概率为1/(16的18次方),即理论上尝试Hash运算的次数为16的18次方。
这么大的计算量需要非常大的计算设备投资,消耗非常大的电量。
目前还没有独立的矿工进行挖矿,因为可能几十年都没有办法计算出符合要求的Hash值。
现在基本上是矿工联合起来组成矿池进行挖矿。 矿池中的矿工按照算力的百分比分享收益。
从经济角度来看,只要挖矿还有利润,总会有新的矿工加入,加剧竞争,提高算力难度。
因此,挖矿会消耗更多的算力和电力,这样一来,最终的成本就会接近于收益。
4.4 以谁的书为准? (共识机制)
第一个完成工作量证明的节点优先拥有唯一记账权,可以打包区块获得奖励。
每个矿工独立完成工作量证明,所以会出现一种情况:
在比特币系统中,没有中心化的仲裁机构,仲裁裁决无法通过。
矿工如何协商达成共识比特币属于,让大家同意使用谁打包区块?
在比特币系统中,这个问题被称为共识机制。
在经济生活中,每个人都追求利润的最大化
一个节点的工作量只有在其他节点同意的情况下才有效:
新打包的区块需要其他节点进行验证,验证通过后才会加入区块链。
并且在网络上传播,打包区块的节点也获得收益。
如果不遵守规则,打包的区块将不会被添加到区块链中,因此不会获得任何收入。
因此,节点会自发遵守约定,从而达成共识。
如果两个节点同时完成工作量证明,使用谁的区块?
每个节点只识别累计工作总量最大的区块链。
每个节点都是独立的,独立选择累计工作量最大的区块链,对这条区块链进行扩展。
共识机制的最终目标是保证比特币运行在工作量最大的区块链上。
主链:包含区块最多的链
同时,两名矿工各自获得工作量证明的解,各自打出一个数据包(#3458A,#3458B),并在网络上广播。
每个接收到有效块的节点都会将这个新块拼接到主链中。
两个区块在传播时,有的节点先收到#3458A,有的节点先收到#3458B,有的节点同时收到#3458A和#3458B。
收到#3458A 的节点将在主链上扩展#3458A。
收到#3458B 的节点将在主链上扩展#3458B。
同时收到#3458A和#3458B的节点会比较这两个区块,选择工作量大的区块扩展主链。
另一条链保存为备用链,因为备用链可能会被用作主链,因为后面会产生更多的块。
这会创建一个分叉。
收到#3458A块的节点会以#3458A为父块,在#3458A之后打包。
收到#3458B块的节点将使用#3458B作为父块,并在#3458B之后打包。
这时候两条链竞争,但总会有一方先发现工作量证明,然后传播解决的区块。
例如,以#3458B为父块的节点生成#3459B并传播它。
然后以#3458A作为父块的节点,收到#3458B和#3459B后,发现#3459B的链更长,
#3458A所在的链将被丢弃,#3459B所在的链将作为主链。
这解决了分叉问题。
由于网络的不确定性,有时节点会先收到#3459B,而不是#3458B。
此时#3459B将作为孤块放入孤块池。
一旦节点收到#3458B,就可以链接块。
比特币将区块间隔设计为 10 分钟,这是更快的交易确认和更低的分叉概率的折衷。
更短的区块生成间隔将允许更快地确认交易,但也会使分叉更频繁。
较长的区块生成间隔会减少分叉的次数,但会使交易确认时间变长。
完整的工作量机制:工作量证明+最长链的选择。