比特币与以太坊的基本知识简介

比特币

比特币是由中本聪提出的一种数字货币。

比特币不依靠任何货币机构,是一种去中心化的记账机制,由所有节点共同维护一个账本,用户的比特币信息通过这个账本计算所得。

POW

比特币采用POW(Proof of Work)作为共识机制。

POW,即工作量证明,为了向区块链中添加新区块,矿工必须不断更换区块头中的nonce值,直到区块头的散列值满足前面的若干位都为0。

最先找到该nonce值的矿工将获得创建新区块的资格,然后比特币系统会给该矿工一定的BTC作为奖励,这个奖励就是挖出的比特币。

P2P网络

所有比特币用户组成的点对点,去中心化网络。

地址

比特币地址由公钥的散列值生成,通常人们会为每一次比特币交易创建不同地址,从而确保匿名性。

钱包

使用比特币的客户端称为钱包,可通过钱包生成密钥对(公钥和私钥),公钥用于生成地址,接受比特币,私钥用于创建交易时进行签名。

区块链

比特币区块链就是保存比特币全部交易的公共账簿。

每个区块上记录了若干交易,整个比特币区块链记录了所有地址至今为止的所有交易。

从而对任意一个地址,每个人都能计算出它当前所拥有的比特币数量,以此来验证该地址是否有能力支付相应的比特币。

每个区块的第一条交易为“系统给矿工支付若干BTC”。

传统概念中,区块链的数据应该存储在每一个节点上,但由于个人机的存储容量有限,区块链上的数据存储在一些有能力且有意愿的节点上,其中每个节点都保存了完整的数据。

全节点:保存有整个区块链数据的节点,可参与挖矿,寻找最长链并判断分叉,全节点一直在线。

轻节点:利用Merkle Tree的特性,轻节点只需保存Block Header以及与自己相关的交易细节。轻节点并不一直在线,它只能检测哪一条是最长链,轻节点无法验证大多数交易的合法性,也无法验证区块链网络中新发布区块的正确性。

交易

假设Alice向Bob支付1BTC

  1. Bob创建密钥对(公钥B和私钥b)
  2. Bob根据公钥B生成地址B,并发送给Alice
  3. Alice创建密钥对(公钥A和私钥a)
  4. Alice根据公钥A生成地址A
  5. Alice创建交易:“从地址A向地址B发送1BTC”,并使用私钥a对交易签署数字签名
  6. Alice将交易发送至P2P网络
  7. 不久后,该交易与其他交易一起被合并为一个区块,并添加到区块链中
  8. 添加的区块被P2P网络确认后,该交易就成立了

比特币中使用的数字签名算法为ECDSA,椭圆曲线为secp256k1。

状态

比特币系统的“状态”指所有已经被挖出的且没有花费的比特币,即未花费的交易输出(UTXO)的集合。

每个UTXO都有其面值和所有者,UTXO不可分割。

如 Alice:$50 是由许多不同面值的UTXO组成的。

一个UTXO只能用于一笔交易,如果矿工发现该UTXO之前已经支付过别人,则存在双花的问题,故该交易不能通过矿工的核验。

UTXO的最小面值是1聪,\(1聪=1*10^{-8}BTC=0.00000001BTC\)

UTXO的面值不固定,在交易后会创建新的UTXO。

如Alice有一个面值为25BTC的UTXO,要向Bob支付11.7BTC。则创建交易后,Alice支付了一个面值为25BTC的UTXO,Bob收到了一个面值为11.7BTC的UTXO,同时Alice收到了一个面值为13.3BTC的UTXO(找零的钱)。

侧链

侧链协议允许资产在比特币区块链和其他区块链之间互转。

即以比特币区块链作为主链,其他区块链作为侧链,二者通过双向挂钩,实现比特币从主链转移到侧链进行流通。

侧链可以是一个独立的区块链,有自己按需定制的账本、共识机制、交易类型、脚本和合约的支持等。当比特币在侧链流通时,主链上对应的比特币会被锁定,直到比特币从侧链回到主链。

为什么以太币数量有限

比特币是一个通缩模型,BTC的总量是2100万。首先比特币系统会保持大约每10分钟产生一个新区块,四年会产生约21万个区块。而每个区块的奖励每四年减半,从2008年的每个区块50BTC开始,即分别是50、25、12.5、6.25、3.125……将这些数字累加起来,你会发现无限接近于100。

于是

21万*50+21万*25+21万*12.5+……
=21万*(50+25+12.5+6.25……)
=21万*100
=2100万

比特币系统通过调整POW中所需0的位数来保持恒定速率。

以太坊

以太坊拥有图灵完备的以太坊虚拟机,可使任何人都能创建合约和去中心化应用。

智能合约

以计算机程序的方式来缔结和运行各种合约。

智能合约是运行在以太坊虚拟机中的应用,可以接受来自外部的交易请求和事件,通过触发运行提前编写好的代码逻辑,进一步生成新的交易和事件,可进一步调用其他智能合约。

智能合约就是合约账户里的代码,每当合约账户收到一条消息,合约内部的代码就会被激活。

账户

以太坊使用账户来记录系统状态(比特币使用UTXO)。每个账户存储余额信息、智能合约代码和内部数据存储等。以太坊通过在不同账户之间转移数据,来实现更为复杂的逻辑。

以太坊账户分为两种类型:

  1. 合约账户:存储要执行的智能合约代码,只能被外部账户来调用激活。
  2. 外部账户:以太币拥有者账户,对应到某公钥。账户包括nonce、balance、StorageRoot、codeHash等字段,由个人来控制。

当合约被调用时,存储在其中的智能合约会在矿工处的虚拟机中自动执行,并消耗一定的燃料。燃料(Gas)通过外部账户中的以太币进行购买。

交易

以太坊的交易指从一个账户到另一个账户的交易数据,交易数据可以是以太币或合约执行参数。

以太坊采用交易作为合约执行操作的最小单位。

EIP-1559提案实施之前的交易字段(现在被称为Type 1):

to:目标账户地址
value:转移的以太币数量
nonce:确定交易顺序
gasprice:燃料单价(即1Gas是多少Gwei)
gaslimit:交易消耗的最大Gas值
signature:签名信息
data: 交易数据

EIP-1559提案将gasprice替换为以下字段(被称为Type 2):

基本费用(Base Fee):在以太坊上发送交易所需的最低Gas价格
最高优先费用(MaxPriority Fee):用户愿意向矿工支付的Gas价格
最高费用(Max Fee):用户愿意支付的最高Gas价格(基本费用+优先费用)

燃料(Gas)

用于控制某次交易执行指令的上限,防止各种无用的计算浪费。每执行一条合约指令会消耗一定的燃料。(可将以太坊比作一台机器,机器运行需要燃料)

当交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态,不过已经支付的交易费用无法收回。如果交易终止时还有燃料,则剩余燃料将退还给发送者。

以太坊中,每个操作指令都有明文规定的Gas消耗量。交易消耗的Gas是所有操作指令消耗的Gas之和,交易完成时虚拟机将反馈总消耗Gas量,称为gasused。要支付的手续费即为gasused*gasprice。

图片

EIP-1559之前(Type 1),燃料单价越高,越容易被矿工打包到区块中。若燃料单价设置地较低,则可能需要等待很长时间才能被打包。

EIP-1559之后(Type 2),最高优先费用越高,越容易被矿工打包。

消息

一个合约有能力向其他合约发送消息。这里的“消息”是一个虚拟的对象,它不仅不会被序列化,而且只存在于以太坊的执行环境中。一个消息类似于一笔交易,不过消息是由合约产生的。

例如一个正在执行代码的合约,当执行到CALL语句时,就会产生并执行一个消息。合约之间通过消息来相互作用。

消息内容包括:

  • 消息的发送者(隐含)
  • 消息的接收者
  • 以太币数量
  • 一个可选的数据字段
  • gaslimit值

以太坊虚拟机

以太坊虚拟机是智能合约的运行环境。

同一个智能合约往往需要在多个以太坊虚拟机(多个节点)中同时运行多份,以确保整个区块链数据的一致性和高度容错性。

以太币

以太币是以太坊网络中的货币。以太币主要用于购买Gas支付给矿工。以太币可通过挖矿获得,也可以通过他人转账或直接在交易市场购买。

以太币的最小单位是wei,\(1 ether(以太币) = 10^{18} wei\)

挖矿

目前以太坊的共识机制与比特币相同,仍然是POW,不过以太坊使用的工作量证明算法是Ethash(比特币使用SHA256)。

Ethash在执行时需要消耗大量内存,这意味着很难制造出专门针对Ethash的芯片(比特币目前有ASIC作为专业的挖矿芯片)。

以太坊计划将POW变更为POS(权益证明),届时将不再需要矿工。

以太坊在实施EIP-1559提案后,由于每次交易都会焚毁基本费(Base Fee),所以以太币可能会成为一个通缩模型。

posted @ 2022-01-20 14:17  lnjoy  阅读(518)  评论(0编辑  收藏  举报