比特币是由中本聪提出的一种数字货币。
比特币不依靠任何货币机构,是一种去中心化的记账机制,由所有节点共同维护一个账本,用户的比特币信息通过这个账本计算所得。
POW
比特币采用POW(Proof of Work)作为共识机制。
POW,即工作量证明,为了向区块链中添加新区块,矿工必须不断更换区块头中的nonce值,直到区块头的散列值满足前面的若干位都为0。
最先找到该nonce值的矿工将获得创建新区块的资格,然后比特币系统会给该矿工一定的BTC作为奖励,这个奖励就是挖出的比特币。
P2P网络
地址
比特币地址由公钥的散列值生成,通常人们会为每一次比特币交易创建不同地址,从而确保匿名性。
钱包
使用比特币的客户端称为钱包,可通过钱包生成密钥对(公钥和私钥),公钥用于生成地址,接受比特币,私钥用于创建交易时进行签名。
区块链
比特币区块链就是保存比特币全部交易的公共账簿。
每个区块上记录了若干交易,整个比特币区块链记录了所有地址至今为止的所有交易。
从而对任意一个地址,每个人都能计算出它当前所拥有的比特币数量,以此来验证该地址是否有能力支付相应的比特币。
每个区块的第一条交易为“系统给矿工支付若干BTC”。
传统概念中,区块链的数据应该存储在每一个节点上,但由于个人机的存储容量有限,区块链上的数据存储在一些有能力且有意愿的节点上,其中每个节点都保存了完整的数据。
全节点:保存有整个区块链数据的节点,可参与挖矿,寻找最长链并判断分叉,全节点一直在线。
轻节点:利用Merkle Tree的特性,轻节点只需保存Block Header以及与自己相关的交易细节。轻节点并不一直在线,它只能检测哪一条是最长链,轻节点无法验证大多数交易的合法性,也无法验证区块链网络中新发布区块的正确性。
交易
假设Alice向Bob支付1BTC
- Bob创建密钥对(公钥B和私钥b)
- Bob根据公钥B生成地址B,并发送给Alice
- Alice创建密钥对(公钥A和私钥a)
- Alice根据公钥A生成地址A
- Alice创建交易:“从地址A向地址B发送1BTC”,并使用私钥a对交易签署数字签名
- Alice将交易发送至P2P网络
- 不久后,该交易与其他交易一起被合并为一个区块,并添加到区块链中
- 添加的区块被P2P网络确认后,该交易就成立了
比特币中使用的数字签名算法为ECDSA,椭圆曲线为secp256k1。
状态
比特币系统的“状态”指所有已经被挖出的且没有花费的比特币,即未花费的交易输出(UTXO)的集合。
每个UTXO都有其面值和所有者,UTXO不可分割。
如 Alice:$50 是由许多不同面值的UTXO组成的。
一个UTXO只能用于一笔交易,如果矿工发现该UTXO之前已经支付过别人,则存在双花的问题,故该交易不能通过矿工的核验。
UTXO的最小面值是1聪,1聪=1∗10−8BTC=0.00000001BTC1聪=1∗10−8BTC=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的位数来保持恒定速率。
2|0以太坊
以太坊拥有图灵完备的以太坊虚拟机,可使任何人都能创建合约和去中心化应用。
智能合约
以计算机程序的方式来缔结和运行各种合约。
智能合约是运行在以太坊虚拟机中的应用,可以接受来自外部的交易请求和事件,通过触发运行提前编写好的代码逻辑,进一步生成新的交易和事件,可进一步调用其他智能合约。
智能合约就是合约账户里的代码,每当合约账户收到一条消息,合约内部的代码就会被激活。
账户
以太坊使用账户来记录系统状态(比特币使用UTXO)。每个账户存储余额信息、智能合约代码和内部数据存储等。以太坊通过在不同账户之间转移数据,来实现更为复杂的逻辑。
以太坊账户分为两种类型:
- 合约账户:存储要执行的智能合约代码,只能被外部账户来调用激活。
- 外部账户:以太币拥有者账户,对应到某公钥。账户包括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,1ether(以太币)=1018wei1ether(以太币)=1018wei
挖矿
目前以太坊的共识机制与比特币相同,仍然是POW,不过以太坊使用的工作量证明算法是Ethash(比特币使用SHA256)。
Ethash在执行时需要消耗大量内存,这意味着很难制造出专门针对Ethash的芯片(比特币目前有ASIC作为专业的挖矿芯片)。
以太坊计划将POW变更为POS(权益证明),届时将不再需要矿工。
以太坊在实施EIP-1559提案后,由于每次交易都会焚毁基本费(Base Fee),所以以太币可能会成为一个通缩模型。
标签:UTXO,以太,基本知识,比特,区块,合约,交易 From: https://www.cnblogs.com/ok888/p/16860727.html