从零学习加密货币 2 加密货币(比特币)与挖掘 《Distributed Ledgers & Cryptocurrencies》

区块链的本质

博文
这是补充的内容:
区块链的本质是什么呢?是信任。
假设我们要买书,我们凭什么愿意相信远在千里之外的卖书的商家,并且给他付钱呢?因为在个交易过程中,我们把新人托付给了国家机构或者大型企业。我们和买书人之间是不信任的,但是因为国家和大型企业在背后,我们愿意让他们做见证,这也是一种比较常见的增加互信的方式。

而区块链是解决这样问题的一个方法。他是一个分布在全球各地,能够协同运转的数据库存储系统。传统数据库的读写权限掌握在一个公司或者一个集权手中,这就是中心化的特征。区块链认为,任何有能力假设服务器的人都可以参与其中,来自全球各地的掘金者部署了自己的服务器,并连接到区块链网络中,成为分布式数据库存储系统的一个节点

一旦加入,你就会享有和其他节点完全一样的权利和义务。与此同时,对于区块链上开展服务的人,可以往这个系统中的任意节点进行读写操作,最后全世界所有节点会根据某种机制进行一次又一次的同步,而实现区块链网中所有节点的数据完全一致。

这个数据库中的记账不是由个人或者谁来决定的,是由所有节点共同维护,所以单一节点无法纂改,只有同时控制整个网络超过51%的节点和计算能力的时候才可以,因此解决了信任危机。

加密

在这里插入图片描述

hashing

把一个任意长度的字符串转化成一个固定长度的字符串

  • 不连续性。两个相近的字符串会产生非常不同的hashes
  • 非常难逆向工程(reverse engineer)
  • 因此这是一种加密(encryption)

bitcoin “address”

  • 一个比特币的地址是一个26-35长度的字母数字字符串,在Base58Check encoding下,以1或者3作为首位
    在这里插入图片描述
  • 比特币的地址是一个公钥的hash(上文讲过的加密方式)或者是一个脚本的hash
  • 两个常见的这种地址的交易类型:
    (1)P2PKH = Pay-to-Public-Key-Hash
    (2)P2SH = Pay-to-Script-Hash
  • 这个adress代表付款的目的地,也起到赎回付款的功能(这句话没看懂)

P2PKH

公钥怎么转换成比特币地址?
在这里插入图片描述
先把公钥通过double hash加密,然后在通过Base58Check编码,就变成address了
在这里插入图片描述
我们要记住,私钥可以通过Elliptic Curve Multiplication 变成公钥,然后公钥可以通过Hashing Function变成比特币地址,但是这是不可逆袭的。

Merkle path

  • merkle path的作用是给定一个叶子节点和叶子节点的merkle path和root,可以验证叶子节点在这个merkle tree中,作为存在性证明,在区块链里用于验证某个交易是否存在。
    在这里插入图片描述
    这个例子实在是复杂,但是这个原理不难,大家一看就会:
  • 现在有ABCDEFGHIJKLMNOP这么多的交易,我们假设要证明交易K存在在交易列表。我们需要交易K的hash:Hk
  • 要知道root
  • 要知道merkle path,就是图中的蓝色块
    先通过HK和HL得到HKL,然后和HIJ得到HIJKL,以此类推

比特币

基本组成

  • 一个satoshi = 1 0 8 10^{-8} Bitcoin
  • 一个MilliBit = 0.001 Bitcoin
  • 总共有2,099,999,997,690,000个satoshis也就是大约21,000,000个比特币BTC
  • 比特币是一个peer-to-peer p2p 的网络:
    在这里插入图片描述

比特币脚本语言

  • 语言名称**“Script”**
  • 这个语言被设计的非常简单,有广泛的应用
  • 不依赖硬件,内存占用小,可用在嵌入式中
  • 不会保存状态
  • 不允许循环和其他的复杂操作
  • 这意味着每一个脚本都有着可以预测的执行时间。
  • not Turing-complete
  • 以太坊Ethereum 是为了让Turing-complete computation 在区块链上实现开发的

turing-complete computation(百度百科)

在这里插入图片描述
在这里插入图片描述

钱包Wallets

  • 这是一个主要的用户接口
  • 管理着用户比特币的入口
  • 管理着密钥和地址
  • 可以追踪当前的账户收支
  • 允许创建交易和签名交易
    大概是这个样子的:
    在这里插入图片描述

交易过程

在这里插入图片描述

扫描二维码关注公众号,回复: 8890592 查看本文章

inputs和outputs之间的差值,就是交易费用:
在这里插入图片描述
在这里插入图片描述
假设有一个从Joe到Alice到Bob到Gopesh的交易链,
在这里插入图片描述
这个就告诉我们,比特币可以从一个人交易多个人,也可以多个人交易一个人,还可以自己交易给自己,但是每个操作都会有一些手续费。

交易

对于大多数的交易,有两个部分:

  • 比特币的数量,用satoshis的单位计量
  • 一个加密的脚本,叫“encumbrance”(外壳)
    在这里插入图片描述
    预期的接收者应该提供一些东西来兑现这个支付,因为被加密了
    通常是提供他们的签名(私钥的编码)和比特币地址(他们公钥的hash加密)
    也可以提供他们的签名和一个脚本的加密
    一些交易中,需要在解锁前提供某些其他东西

UTXO

  • Unspent Transaction Output 是一个输出,将会用来作为后续交易的输入
  • UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。
    在这里插入图片描述
    我们假设一个这样的场景:张三挖到12.5 枚比特币。过了几天,他把其中 2.5 枚支付给李四。又过了几天,他和李四各出资 2.5 比特币凑成 5 比特币付给王五。

比特币的区块链账本里记录的是一笔又一笔的交易。

每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。

比特币交易遵守几个规则:
第一,除了 coinbase交易之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。
第二,任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。

标准交易

这个问题的核心,就是需要什么,才能取得加密的支付

  • P2PKH = Pay-to-Public-Key-Hash
    一个公钥的hash,也就是比特币地址是需要的z
  • P2PK = Pay-to-Public-Key
    这个主要用在coinbase transactions
  • Multi-sig(Multiple-signature)
    限制在15密钥之内
  • Pay-to-Script-Hash(P2SH)

挖掘与共识

共识的四个部分
在这里插入图片描述

A共识

  • 就是每个节点检查,是否违反了下面的标准
    在这里插入图片描述

B共识

比特币挖掘

先来了解一些基本知识:

  • 新的比特币被产生,大概每10分钟一个
  • 每210,000个区块,大概是每四年,这个挖矿速率会下降50%
  • 因此矿工的收入基本从挖矿,变成了交易手续费用

coinbase reward

之前提到过这个,现在讲一下

  • 比特币第一次被挖矿发现之后,是怎么给矿工的呢,是每个区块的第一次交易。这个交易就是Generation transaction或者Coinbase transaction
  • 这些交易没有UTXO inputs

挖矿的问题(待查询)

Proof-of-Work被设计成挖矿的障碍。这是Sybil攻击的一种形式


举一个例子:两个骰子
当扔两个骰子,有多少种可能的情况当总投掷数位一个定值?
好比,当你投2次,两个筛子有多少种可能的情况?
在这里插入图片描述
这是骰子总和,总共有36种情况,小于3的有一种;
。。。。。。
小于9的有26中,小于10的有30中,小于11的有33中,小于12的有35种。
所以比特币越到后来越难挖到。

C/D共识

验证一个新的区块

看看就行了,简单过了,目前还理解不了这一块
在这里插入图片描述

exercises

在这里插入图片描述

发布了47 篇原创文章 · 获赞 4 · 访问量 2268

猜你喜欢

转载自blog.csdn.net/qq_34107425/article/details/104074038