比特币如何运作

跟風遠走 提交于 2019-12-04 19:06:55

概要

比特币诞生于 2009 年, 已经有 10 年多的历史. 但是, 依然是知道的人多, 了解其运作原理的人少.
区块链的概念是伴随着比特币的流行而兴起的, 但是区块链并仅仅是比特币, 它是更广泛的技术. 比特币其实就是区块链的一种应用形式, 也是目前最成功的形式.

比特币中的概念其实并不复杂, 只是这种去中心化的形式和我们已经熟悉的方式大相径庭, 才会觉得难于理解.
我根据自己的理解整理了比特币中的相关概念, 并将自己对其中流程的理解整理如下, 希望能有所帮助.

比特币中的一些概念

这些概念是理解比特币整个运作的基础, 不先理解这些概念, 是无法理解比特币的运作机制的.

地址(Address)

用户可以产生任意数量的私钥, 并基于这些私钥构建一个公钥.
地址是基于一个公钥得到的, 并且被用来标识比特币系统中一笔金额的接收者 一个公/私钥对被用来唯一地标识某个地址(以及相应的一笔金额)的拥有者

输出(Output)

一个输出是一个元组, 包含一定数额的比特币以及一个使用条件.
绝大多数情况下, 使用条件需要一个和某地址对应私钥相关联的有效签名

输入(Input)

一个输入是一个元组, 包含对前面一个已经创建的输出的引用, 以及用于该输出中使用条件的一组参数(签名) 这些参数将证明交易创建者有权使用所引用的输出

未花费的交易输出(UTXO, Unspent Transaction Output)

UTXO 是比特币中很重要的概念. 比特币没有账户余额的概念, 每个账户(地址)的余额就是这个地址相关的所有 UTXO 中输出的值总和

交易(Transaction)

交易是一个数据结构, 描述了一次比特币的转移(使用者到接收者)的情况.
一个交易包含很多输入和新创建的输出, 这些输入将导致所引用的输出变为已使用(即: 从 UTXO 中删除), 此外, 新创建的输出将被增加到 UTXO 中.

工作量证明(Proof-of-Work)

工作量证明机制使得一个参与者可以向其他参与者证明, 他已在一段时间内持续使用了一定数量的计算资源

区块(Block)

一个区块是一个数据结构, 在一个节点局部状态之上累计的改变将打包在区块中并传递给整个网络.
一个区块包含了一组交易, 一个指向上一个节点的引用, 和一个随机数(即在工作量证明阶段找到的随机数)
一个区块包含了本区块创建者(矿工)所接受并存放在自己记忆池中的所有交易, 这些交易都是在上一个区块之后产生的.
一个节点在找到一个有效的随机数来满足它的工作量证明函数后, 将广播一个区块

奖励交易(Reward Transaction)

在一个区块内的第一个交易被称为奖励交易, 发现该区块的矿工将获得一定数量的新比特币以奖励它确认了一组交易.
奖励交易有一个名义上的输入, 其输出的总和包括一个定额的补贴加上被该区块所确认的所有交易的交易费之和.
比特币的交易有一个规则: 所有输入之和必须大于或等于所有输出之和. 只有奖励交易是唯一的 例外

Blockchain

从创世区块开始, 到某个叶节点为止的最长路径, 被称为区块链.
区块链的作用是维护一个一致的交易历史, 而所有节点最终都将在唯一的区块链(交易历史)上达成一致

比特币如何完成交易

比特币说到底就是一种虚拟货币, 最终目的是为了完成交易.
所以, 理解了它是怎么交易的, 也就能对它放心使用.

下面用问答的形式来解释虚拟币的交易

交易的信息包含哪些?

比特币的一次交易包含可以同时包含多个买方和多个卖方, 因为是电子货币, 所谓一次交易其实就是一个描述交易的数据结构, 这个数据结构包含:

  1. 一个或者多个 输入, 即买方
  2. 一个或者多个 输出, 即卖方
  3. 其他一些信息, 比如交易有效期等等
  4. 输入的总金额一般都大于输出的总金额

输入和输出的概念见上一节(比特币中的一些概念)内容.

是不是输入的总金额总是大于输出的总金额?

因为比特币是去中心化的, 所以交易需要交易参与者以外的人来确认.
所以, 一般的交易中, 输入的总金额总是大于输出的总金额, 多余的那部分比特币用于奖励给参与确认交易的客户端(矿工)

但是, 有些交易是特殊的, 比如在每个区块中的第一个交易, 这个交易中输入的总金额为 0, 输出的金额是奖励给打包区块矿工的比特币数量.
目前是 50 个, 这个数量每 4 年减半一次, 这也确保了比特币的数量是有限的, 不会无限增长下去.

什么是区块, 区块和交易有什么关系?

区块是多个交易的打包, 打包进区块的交易都是确认的交易, 不能再修改.
要获取创建区块的权利, 需要挖矿, 所谓挖矿, 就是完成工作量证明, 比特币的工作量证明就是比谁先算出符合要求的 HASH 值.
算出这个值, 就有权利打包下一个区块, 并获得相应的比特币奖励.

比特币现在的市值这么高, 所有才有那么多愿意去挖矿的矿工去尝试不断的计算符合要求的 HASH 值

不断增长的区块怎么存储?

每次新创建的区块都是接在上一个之后, 新的区块除了保存自己的 HASH 值之外, 也保存着上一个区块的 HASH 值.
所有的区块都完整的存储在所有使用比特币的客户端上, 所有的区块是一个链式的结构, 这也是区块链这个名字的由来.
由于每个人都有完整的区块链记录, 所有造假才会困难, 除非能修改 50% 以上的客户端的区块链记录.

同时有 2 个区块同时创建会怎么样?

比特币是分布式的, 挖矿也没有限制, 谁都可以参与, 所以同时有 2 个或者多个区块同时被创建也很正常.
但有多个区块同时被创建时, 也就是区块链出现分叉时, 比特币是这么处理的: 如果出现分叉, 那么分叉之后, 先达到 6 个区块的那个分支, 被认为是主链,
另一个分叉被废弃. 被废弃的分叉上的交易, 如果和主链上的交易冲突, 就废弃, 不冲突就放在交易池, 等待下一次新的区块打包时再确认.

比特币的交易时间多长?

比特币的区块 10 分钟打包一次, 一个交易最多 10 分钟就能确认, 但是由于存在分叉的风险, 一般 6 个区块之后基本就能完全确认交易.
也就是说, 比特币的交易, 最多需要将近 1 个小时才能完全确认, 这个也是比特币不适合快速交易的缺点.

接下来.....

比特币是区块链的一次成功尝试, 虽然它有很多的缺点, 但是它首次让去中心化的货币成为现实.
关于它的疑问, 可以留言在评论中, 我会力所能及的尽量回复, 如果谁能帮忙回答, 也请不吝赐教!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!