这个课怎么说呢?一开始听的时候云里雾里的,学完UTXO之后就感觉逐渐明了许多,还挺有趣。还有一天考试了,抓紧复习一波~

密码学基础

首先区块链是一种底层技术,而比特币只是区块链技术的一个应用案例。事实上除了比特币,还有以太坊等应用也是基于区块链设计的,只不过近几年比特币似乎热度更高罢了。
区块链这个词挺火的,但去某度一搜资料简直一言难尽……讲了一大堆有的没的区块链特点和似是而非的东西。区块链的精髓还是在于去中心化,即通过密码学以及一系列设计的协议,来取代传统金融交易中中心机构的位置。区块链最底层的东西还是密码学那一套,可以算作密码学的实际应用,大概涉及到哈希(SHA-256)、签名算法(ECDSA) 以及公私钥的概念,这里稍微写一下。

哈希函数可以看做是一种特殊的函数,将任意长度的消息映射到指定长度,得到的结果一般称为摘要(digest),记为 y=H(x)。哈希函数的三种特性:

  1. 抗碰撞性:无法找到两个值,x和y,x≠y,而H(x)=H(y)。对于不了解密码学的人而言,这一点想一下也许会觉得挺离谱的。输入为任意长度,而输出为指定长度。那么输入长度大于输出长度的时候,映射一定是多对一的,但神奇的密码学和神奇的哈希函数能够保证在计算上找到碰撞是不可行的,即找到它们需要巨大的计算资源和时间。
  2. 隐秘性:隐秘性保证,如果我们仅仅知道哈希函数的输出y=H(x),则没有可行的办法算出输入值。即不能知道y之后反推x。这也保证了哈希函数的单向性和不可逆性。
  3. 谜题友好:如果一个哈希函数具备谜题友好特性,这就意味着对于这个谜题没有一个解决策略, 比只是随机地尝试x取值会更好。意思说为了得到一个指定的摘要y,没有比暴力枚举x更好的取巧的办法。哈希函数的输出对于输入极其敏感,即使是输入中最微小的变化也会导致完全不同的输出。这种属性被称为雪崩效应

看到这里应该能感受到哈希函数的神奇之处,即通过很小的一个数据量,就可以概括任意长度的数据。如果要验证某一个数据,则可以通过哈希后与给出的摘要进行比对。并且一旦数据有一丁点错误,最后哈希出来的结果天差地别。

签名算法直接看下图即可。
签名算法
公钥即身份。在比特币交易中,一个人可以有多个账户。xx给xx转账也是通过地址的形式(公钥的哈希,可以直接理解成公钥)进行。

区块是什么

区块结构
可以看到,区块就是一个数据单元,可以想象成C/C++中的一个结构体。哈希指针:把某一块的数据进行哈希后填入下一块数据的某个地址中,从而实现“链”的效果。通过哈希指针构建一个链表,我们就将这个数据结构称为区块链(block chain)。在上面这个结构中,就是把前一个区块的数据进行哈希,哈希之后的值放入当前区块的数据部分,以此形成链条。怎么说,这跟哈希函数本来的 Merkle–Damgård 结构挺像的。

补充一下,区块链的第一个区块称为创世块(这名字也是逆天),由创始人中本聪在2009年1月3日创建。这个创世块包含了上述的那条消息,作为一个时间戳和政治声明,标志着比特币网络的开始。除了这条消息,比特币的创世块还包含了50个比特币的奖励,但这些比特币特殊地无法被花费。

UTXO模型

这部分内容本质上是记账的问题,传统账本: xx用户 xx余额
传统记账模式需要维护用户和余额,验证某一笔交易是否合法(比如余额是否充足),需要查看用户的余额。但对于比特币这是不可行的,分布式系统难以实时知晓账户余额,没有一个集中式的账本。
根本问题还是在于,从集中式系统到分布式系统转变时,很多传统的方式难以解决新形势下的问题。区块链在本质上可以被看作是一个分布式的总账本。
下面给出UTXO示意图:
UTXO例
UTXO
每笔交易输入部分记录花费交易的人,输出部分记录交易的比特币给谁,这里的“谁”这是用公钥来代表,公钥即身份。一个人想要花费自己的比特币,自然就需要引用某个输出部分的公钥为自己的交易(这里自然也不能重复引用),同时用私钥进行签名,证明他们拥有愿意花费这些比特币。同时从图中也可以看到,交易可以有多个输出。所以引用的时候通过TxID(交易ID)以及索引(第几个输出)的方式来花费比特币。

P2PKH && P2SH

  1. P2PKH(Pay to Public Key Hash):
    定义: P2PKH是最常见的比特币交易类型。在这种交易中,比特币被发送到一个特定的地址,该地址是接收者公钥的哈希值。
    锁定脚本(ScriptPubKey): 通常包括接收者的公钥哈希(也就是比特币地址),要求任何想要花费这些比特币的人提供匹配的公钥和有效的签名。
    解锁脚本(ScriptSig): 发送者在花费比特币时提供自己的公钥和签名来证明他们拥有相应的私钥。

  2. P2SH(Pay to Script Hash):
    定义: P2SH是一种更高级的交易类型,它允许用户发送比特币到一个脚本的哈希值,而不是直接发送到一个公钥哈希。
    锁定脚本(ScriptPubKey): 包含一个脚本哈希。与P2PKH不同,这个脚本可以是任何复杂条件,如多重签名或其他条件。
    解锁脚本(ScriptSig): 当花费比特币时,花费者必须提供满足原始脚本条件的数据,包括原始脚本本身。
    把比特币支付给某个脚本地址,脚本的哈希值是×××取款的时候,提供上述哈希值对应的脚本,同时提供数据能通过脚本的验证

比特币脚本

把交易的输入脚本(scriptSig),和上一笔交易的输出脚本(scriptPubKey)串联起来。串联脚本必须被成功执行以后,才能获得资金。输出脚本负责指定解锁这笔花费的条件,输入脚本提供解锁花费的东西。最常见的比特币交易:通过某人的签名获得他在前一笔交易中获得的资金。交易输出描述为:凭借哈希值为X的公钥,以及这个公钥所有者的签名,才能获得这笔资金。为了实现这个逻辑,使用比特币脚本。这个即对应P2PKH的交易类型。实际上可以使用P2SH,随意地为比特币支付设定条件,

比特币脚本语言Forth: 简单的堆栈式编程语言(stack-based)

  • 每个指令只被执行一次,线性的,无法循环执行
  • 非图灵完备

放三张P2PKH脚本的示意图在这里。
P2PKH脚本
P2PKH流程
脚本流程

锁定时间(lock_time):指定某个时间或者区块高度(高度是指某个区块在整个区块链中的位置或序号)。没有达到这个高度或者日期时间之前,交易不会被打入区块中(即矿工不会在交易池中选择该交易)。对于一般的P2PKH交易,锁定时间设为0即可。锁定时间是为了支持更多复杂和定制化的交易类型,一般的P2PKH交易用不到。(这个可以用来完成跨链原子交易,这里不细说了)

交易是什么

交易是一个包含了多个字段和信息的数据结构,以下是比特币交易中包含的主要信息和字段:

  1. 交易ID:这是交易的唯一标识符,通过对交易数据进行哈希运算生成。每笔交易都有一个独特的交易ID。
  2. 交易输入:交易输入指定了来自之前交易的比特币资金。每个输入包含以下信息:
  • 交易引用:指向之前交易的交易ID和输出索引。
  • 签名脚本:包含一个解锁脚本,证明了发送方有权使用这些比特币。
  1. 交易输出:交易输出指定了接收方的比特币地址和金额。每个输出包含以下信息:
  • 比特币地址:接收方的比特币地址。
  • 输出金额:发送给接收方的比特币数量。
  • 锁定脚本:包含一个锁定脚本,指定了谁可以花费这笔钱。
  1. 版本号:标识交易的版本,用于指示交易的格式和规则。
  2. 锁定时间:指定了交易的锁定时间,可以是区块高度或时间戳。如果锁定时间尚未到达,交易将被视为无效。
  3. 序列号:通常用于控制交易的替代规则,一般情况下,这个字段会设置为最大值。
  4. 交易费用:这是交易的一部分,通常由发送者支付给矿工,以鼓励他们包含交易到区块中。交易费用由交易输入金额减去输出金额计算得出。

轻量节点 vs 全节点

全节点:需要把完整的共识区块链存储下来。随着比特币交易越来越多,全节点需要存储的数据量也越来越大。
轻量节点:简单付款验证(Simple Payment Verification) SPV客户端,

  • 只存储他们所关心的,需要进行核验的部分交易
  • SPV节点只验证相关交易;依赖全节点去验证网络上的其他所有交易
  • 只下载区块头,需要几十MB数据(VS 几十GB or More)

交易怎么记账?

问题:一笔账是否成功记录在区块链上?传统方式(集中式系统):对照账本一笔一笔帐比对,数据庞大,困难,需要遍历所有交易数据。新方式:Merkle Tree
MerkleTree
简单说,叶子结点是交易的哈希值,父节点的值等于两个儿子节点值并在一起哈希。

  • Auth:认证路径
  • Sib:兄弟节点(相对于认证路径来说)Sib类似于“证据”
  • 相较于传统比对的方法,不需要全部交易量,只需要树高级别的交易量(即log级别的交易量)

只能说是哈希函数的妙用了。根节点最后的哈希取决于所有事物以及他们之间的哈希顺序(即建树过程),最终把 Merkle Root 存在区块头中。而如果要验证某个交易是否在这个区块中,只需要拿到兄弟节点,然后不断哈希最后与根节点的值比对即可。算法上来说,大概是O(n)到O(logn)的一个优化。下面以一个轻量级客户端为例(即只存储块头部分的数据),给出验证交易在某一区块上的流程:

  1. 轻节点请求验证:
    轻节点(例如一个运行在手机上的比特币钱包)需要验证某个交易是否被包含在特定区块中。它知道该交易的哈希值,并且可能知道它所在的区块号。

  2. 全节点提供Merkle路径:
    轻节点将其请求发送到一个或多个全节点。全节点查找该交易,在Merkle树中定位它,并构建从该交易到Merkle根的路径。这个路径包括所需的所有兄弟哈希值。

  3. 轻节点接收并验证:
    轻节点接收到Merkle路径后,开始从交易哈希值出发,逐步向上计算,每一步都将其与路径中的相应兄弟哈希值组合并哈希。当轻节点完成所有哈希计算后,它会得到一个哈希值,它应该与它从网络中已知的区块头的Merkle根相匹配。

  4. 比对Merkle根:
    如果计算出的哈希值与区块头中的Merkle根相匹配,那么交易确实存在于该区块中。如果不匹配,则交易不在该区块中,或者提供的信息有误。

通过这种方式,即使轻节点没有存储整个区块链的所有交易数据,它们也能有效地验证单个交易,而不会牺牲安全性或完整性。这使得轻节点可以在资源有限的环境中运行,如智能手机或其他低功耗设备,同时仍能保持与区块链网络的高度兼容性和安全性。

一次交易的流程

  1. 创建交易
    发起人准备:用户(比如Alice)决定发送比特币给另一个用户(比如Bob)。Alice使用她的钱包软件来创建一笔交易。在这个交易中,她会指定Bob的地址和要发送的金额。
    交易细节:交易会包含输入(指向Alice之前收到且尚未花费的比特币)和输出(指定Bob的地址和金额)。
    签名:Alice的钱包使用她的私钥对交易进行数字签名,这表明她批准这笔交易。sig = sign(msg,sk)

  2. 广播交易
    网络广播:签名的交易被发送到比特币网络。这通常是通过Alice的钱包软件自动完成的,将交易数据广播给网络中的节点。

  3. 交易验证
    节点验证:网络中的节点(比如矿工和其他参与者)接收到交易后,会验证签名和交易的有效性(确保Alice有足够的比特币,交易格式正确,没有双重支付等)。
    传递:一旦一个节点验证了交易,它会将交易传递给其他节点,这样交易很快就会在整个网络中传播开来。

  4. 交易池(内存池)
    等待打包:一旦验证通过,交易会进入每个节点的内存池(也称为交易池),等待被矿工打包到新的区块中。

  5. 挖矿确认
    区块创建:矿工从内存池中选择交易,开始构建新的区块。矿工通常会优先选择交易费用高的交易。
    解决工作量证明:矿工需要解决一个难题(工作量证明),这通常需要大量的计算工作。成功解决难题的矿工有权将新区块添加到区块链上。
    新区块广播:当矿工成功挖出一个包含该交易的区块时,他会将这个区块广播给网络中的其他节点。

  6. 区块确认
    节点验证区块:其他节点接收到新区块后,会验证所有交易的有效性以及工作量证明的正确性。
    添加到区块链:一旦验证通过,每个节点将新区块添加到它们的区块链副本中。这时,Alice的交易被认为是确认了一次。

  7. 进一步确认
    更多区块的添加:随着时间的推移,更多的区块被挖出并附加到包含Alice交易的那个区块后面。每增加一个区块,Alice的交易就获得一个额外的确认。
    安全性增加:通常来说,当一笔交易被确认6次(即有6个区块被添加到包含交易的区块之后)后,它被认为是非常安全和不可逆转的。

矿工挖矿

比特币是大约每十分钟出一个块,即全网算力都计算符合某个条件的哈希值。由于没有其他办法,只能暴力穷举。矿工“挖矿”的时候,会从交易池中选出准备打入区块的交易。之后把这些交易哈希生成 Merkle Root 放在区块头,然后不断尝试枚举nonce的值,试图让区块头的哈希值满足给定的谜题要求。其详细过程如下:

  1. 选择交易:
    交易池:矿工从网络的交易池(也称为内存池或mempool)中选择交易。这些是用户发起但尚未被任何区块确认的交易。
    交易费:矿工通常会根据交易费(用户支付给矿工的费用以优先处理交易)来选择交易。交易费越高,交易被选中的可能性越大。
    注意,这里也需要把矿工自己的CoinBase交易包含进去,即用来奖励矿工创建区块的交易。

  2. 构建Merkle树:
    交易哈希:矿工将选择的交易各自进行哈希,每个交易的哈希成为Merkle树的叶子节点。
    生成Merkle Root:通过对叶子节点进行一系列配对和哈希运算,最终生成一个单一的哈希值,即Merkle根。这个值将代表区块中所有交易的完整性信息。

  3. 准备区块头:
    区块头信息:矿工将Merkle根以及其他相关信息(如版本号、前一个区块的哈希、时间戳、难度目标等)放入新区块的区块头中。

  4. 工作量证明:
    尝试不同的nonce:矿工开始不断变更区块头中的nonce值。对于每个不同的nonce,矿工都会计算区块头的哈希值。矿工的目标是找到一个nonce值,使得区块头的哈希值满足网络设定的难度目标。

  5. 新区块的创建:
    成功找到nonce:当矿工找到一个符合条件的nonce后,新的区块就被创建。这个区块包含了所选交易(区块体)和区块头(含Merkle根和有效nonce)。

  6. 广播区块:矿工将这个新区块广播到比特币网络。其他节点接收到新区块后,会验证其所有交易和工作量证明的有效性。如果验证成功,其他节点将这个新区块添加到他们各自的区块链副本中。

这里又一次展现了哈希函数的魅力。基于哈希函数的单向性:挖矿很难,但容易验证。

具体来说矿工怎么获得区块奖励?
创建的区块中有一笔特别的交易,造币(Coinbase)交易,它是区块中的第一笔交易,用于奖励挖掘该区块的矿工。相应的问题来了,我们都知道每笔交易需要引用另一笔交易的UTXO,需要填写索引和Txid,造币交易没有可引用的输出,这个空缺的字段用来填其他的东西(例如额外的随机数、矿池的标识信息,甚至是特定的消息或注释),这个字段称为 Coinbase。如果遍历nonce的取值空间还没有找到一个有效区块时(都不满足谜题的哈希要求),那就改动coinbase字段(该字段可能还包含其他的信息)中的随机数。所以事实上正确的临时随机数组合:头部随机数(nonce)+币基随机数(coinbase)。给一个挖矿伪代码。
CPU挖矿
温馨提醒:如果有nkuer看到这里,或许可以背一下这个伪代码,今年直接考了(哭)

针对区块链挖矿,在硬件上进行了“定制”,形成专用集成电路技术挖矿 (ASIC),ASIC矿机代表了加密货币挖矿领域的专业化和高效化。简单说就是干硬件的专门针对挖矿进行优化,从芯片设计上就开始想办法让上面伪代码的计算能够更快,属于应用需求驱动了。但相应的,这东西运营成本很高,需要消耗大量的电力。CPU->GPU->FPGA->ASIC->…本质上还是专业化和高效化的过程,从原始人到三体人的过程。个人PC想要挖出区块无异于痴人说梦。对于一个小矿工而言,挖矿就是赌博游戏。更有效的思路:一组矿工可以形成一个矿池共同挖矿,并指定一个币基接收人-矿池管理员,矿池就成了比特币矿工互相之间的保险。矿池管理员根据大家的工作量按照比例分配奖励。即一起合作不能摸鱼。矿池的优点:小矿工容易参与,也有一定的收益;网络管理员负责组装区块,网络更新变得更加容易。缺点:(算力)中心化管理;整个网络中进行校验交易的全节点数目在下降。ASIC的出现违背了比特币网络去中心化的初衷,一些大的专业化集约化矿厂占据了支配地位。网络的挖矿集中在少数几个大型矿厂手中可能会增加网络受到51%攻击的风险,即如果一个实体控制了超过50%的计算力,它可能有能力操纵网络交易。所以后来一些新的加密货币采用了ASIC抵抗性的挖矿算法,以鼓励更广泛的个人参与,尝试保持更高程度的去中心化。

综上总结一下矿工的选择策略:

  1. 需要包括哪些交易?(优先选择交易费高的交易)
  2. 对哪一个区块进行挖矿运算?(优先选择最长的区块链上继续下挖)
  3. 在同一高度的多个区块中做选择?(优先选择被监听到的那一个区块)
  4. 什么时候宣布新的区块?(默认做法是立刻宣布)

挖矿的改进思路

针对上面ASIC矿机带来的问题,可能的思路:算力消耗大向内存消耗大转变,但也需要考虑“易于验证”的特点,不能验证也需要耗费巨大的内存。这里放一种可能的方案。
内存挖矿1
内存挖矿2
上图与PoW的主要区别在于挖矿过程不仅仅依赖于计算能力,还结合了存储能力,这意味着矿工必须有效地管理和访问存储的数据才能参与挖矿过程。矿工在解决挖矿谜题的同时,通过存储文件的片段来证明他们为网络提供了存储资源。这种机制的目的将挖矿的辅助效应从纯粹的计算转变为对社会有价值的数据存储,使得挖矿的能量和资源消耗得到更有意义的利用。

分布式共识机制

比特币的分布式共识机制是一种确保网络中所有参与者(节点)同意特定状态(如交易和账本)的方法。这种共识不需要中央权威机构来验证或确认交易,而是依靠网络中的独立节点通过共同遵守一套规则来实现。以下是比特币分布式共识机制的组成部分:

  1. 工作量证明(Proof of Work, PoW):
    挖矿:在比特币网络中,节点(矿工)通过解决一个称为工作量证明(PoW)的复杂数学问题来竞争生成新的区块。这个问题的解决方案难以找到,但易于验证。
    难度调整:网络定期调整这个问题的难度,以确保大约每10分钟生成一个区块。具体来说,就是调整需要的哈希值有多少个前导0,0越多难度越大。

  2. 最长链规则:
    链选择:当存在多个版本的区块链时(例如,由于几乎同时生成的区块),网络遵循最长链规则,即选择总工作量最大的链作为有效链。
    安全和稳定性:这个规则鼓励矿工在现有的链上继续构建,因为只有最长链上的区块才会得到奖励。

  3. 共识达成:
    交易验证:节点独立验证每个交易和区块的有效性(确保签名有效,没有双重支付等)。
    区块确认:一旦区块被网络接受并添加到区块链上,它就会被进一步确认,随着在其之后增加更多的区块,它的状态变得更加确定和不可逆转。

  4. 激励机制:
    区块奖励和交易费:矿工成功挖掘新区块时会获得新生成的比特币(区块奖励)和区块中所有交易的手续费作为奖励。
    经济激励:这种激励机制鼓励矿工遵循规则并维护网络的安全和稳定。

可以看到,矿工最后得到的收益即是每个交易包含的交易费,以及挖出区块所得到的奖励。具体来说,最初的区块奖励为50比特币,之后每产生210 000个区块(大约4年),区块奖励将被减半,根据等比数列求和公式,最终一共是21000000个比特币。目前,区块奖励在矿工收入里面占比超过99%。但是区块奖励每4年减半,最终出块奖励会变得很低。从长期来看,比特币奖励将从固定的挖矿奖励为主,转变为交易费为主。

黑客攻击

基于以上的机制,如果某个黑客想攻击区块链系统,在已有链上进行分叉。则需要考虑下面的问题:

  • 最长链规则:比特币网络中的节点总是认为最长的链是正确的链。要想实现分叉并使之成为最长链,攻击者需要持续地拥有超过网络一半的算力。如果算力不够是比不赢的。
  • 节点验证:即使攻击者成功创建了更长的链,网络中的节点(尤其是全节点)会验证新链上的所有交易和区块。如果发现异常或不一致,节点可以拒绝接受攻击链。(这里可以根据诚实大多数原理得出)
  • 经济成本:这样的攻击非常昂贵,因为它涉及大量的电力和计算资源。此外,成功的攻击可能会降低整个网络的信任度和比特币的价值,从而进一步降低攻击的潜在收益。

区块的传播与交易传播类似,哪个区块被纳入长期共识链取决于其他节点选择在哪个区块上扩展区块链。核验一个区块:

  • 确认区块头部; 确定哈希值在给定范围;
  • 确认区块里面的每个交易;最长的一条区块链进行扩展

比特币网络

Flooding算法(gossip协议):Flooding算法或Gossip协议是一种在网络中传播信息的方法,常用于分布式系统和网络中以确保信息的快速、可靠传递。这种算法的核心思想是节点之间相互“闲聊”(gossiping),即每个节点随机地向其他几个节点发送信息,这些节点再向其他节点传播信息,如此类推,直到所有或大多数节点都收到了信息。信息可以迅速在网络中传播,因为每个接收信息的节点都会向多个其他节点传播该信息。同时同一信息会被多次发送给网络中的某些节点,确保了即使在一些节点或连接失败的情况下,信息仍然能够到达大部分或所有节点,保证网络的稳定性和可靠性。对于节点来说,处理收到的交易消息的流程:

  1. 对每个前序交易的输出运行核验脚本
  2. 校验是否有双重支付
  3. 检查这笔交易信息是不是已经被本节点接收过
  4. 节点只会接收和传递在白名单上的标准脚本

跨链原子交换

加密数字货币除了比特币外,还有很多其他的(如莱特币),它们都是基于区块链技术,只不过可能采取不同的共识算法和挖矿谜题。Alice want to sell a quantity a of altcoin to Bob in exchange for a quantity b of his bitcoin.说人话就是如何交换两种不同的数字货币,两种数字货币位于不同的链上,同时交易要么发生要么不发生,且需保证公平性,称为跨链原子交换(Atomic Cross-chain Swap)。具体步骤如下:
跨链原子交换
跨链原子交换
主要使用下面两种机制来保障交易的正确性和公平性:

  • 哈希锁: 保证只有知道正确秘密的参与者才能解锁和领取资金。
  • 时间锁: 确保如果交换没有在特定时间内完成,资金可以返回给原始所有者。

比特币相关的内容至此结束,下面写一点区块链2.0的技术。

权益证明

权益证明(Proof of Stake,简称PoS)是区别于工作量证明(Proof of Work,简称PoW)的另一种加密货币的共识机制,用于确认交易并创建新的区块,旨在更高效、更环保地实现分布式共识。原理:在PoS系统中,区块的创建者通过持有和投注(即锁定)一定数量的加密货币来选出,而不是通过解决复杂的计算问题(像PoW系统中的挖矿)。基本流程:

  • 选择创建者:区块的创建者是根据其持有的货币数量和持有时间(以及可能的其他因素)来选择的。通常,持有更多货币或持有时间更长的节点有更大的几率被选为新区块的创建者。
  • 验证交易:选中的节点负责验证交易,并创建新的区块。一旦其他节点验证了这个区块,它就会被添加到区块链上。
  • 奖励:创建区块的节点通常会收到交易费用作为奖励,有时还会收到新创建的货币。

权益证明相较于工作量证明更有效率,可节省大量在挖矿时浪费的电脑资源,并避免特殊应用集成电路造成网络中心化。

以太坊与智能合约

  • 智能合约(smart contract):存储在区块链上的程序,由各节点运行,需要运行程序的人支付手续费给节点的矿工或权益人,用的是 Solidity 语言来编写
  • 代币(tokens):智能合约可以创造代币供分布式应用程序使用。分布式应用程序的代币化让用户、投资者以及管理者的利益一致。代币也可以用来进行首次代币发行。
  • 权益证明(proof-of-stake):见上。
  • 燃料(gas):由交易手续费的概念扩展,在运行各种运算时需计算燃料消耗量,并缴交燃料费,包括发送以太币或者其他代币也被视为一种运算动作。部署在区块链上的智能合约程序需要精打细算,因为每一行代码都会消耗gas。
  • 分布式应用程序:以太坊上的分布式应用程序不会停机,也不能被关掉。