anthonyche / TechFantasy.Github.io

Zen of Tech
3 stars 0 forks source link

区块链的基本原理 #14

Open anthonyche opened 2 years ago

anthonyche commented 2 years ago

区块链

区块链是一个不断增长的全网总帐本

每一个完全节点都拥有完整的区块链,并且节点只信任最长的区块链,若伪造区块链则需全网51%的算力 image 区块链的结构决定了其不可篡改性。

区块链是一个一个区块组成的有序链表。

每个区块都记录了一系列交易,并且每个区块都指向前一个区块,形成链条。

如果观察某一区块,会发现每一个区块都有自己的区块哈希,并且通过记录上一个区块的哈希值来指向上一个区块。 每一个区块还有一个Merkle哈希用来确保该区块的所有交易记录无法被篡改。 区块链中的主要数据就是一系列交易,第一条交易通常是Coinbase交易,也就是矿工的挖矿奖励,后续交易都是用户的交易。

区块链的不可篡改特性是由哈希算法保证的。

哈希算法

哈希算法,又称散列算法,它是一个单向函数,可以把任意长度的输入数据转化为固定长度的输出: h=H(x)

通常用16进制表示哈希算法,通过输入很容易计算输出,但是若要反推只能暴力穷举

由于输入集无限大,输出集长度有限故输出有限,必然会出现哈希碰撞,即部分输入对应的输出是重复的。

哈希碰撞的本质是把无限的集合映射到有限的集合时必然会产生碰撞。我们需要计算的是碰撞的概率。很显然,碰撞的概率和输出的集合大小相关。输出位数越多,输出集合就越大,碰撞率就越低。

安全哈希算法还需要满足一个条件,就是输出无规律。输入数据任意一个bit(某个字节的某一个二进制位)的改动,会导致输出完全不同,从而让攻击者无法逐步猜测输入,只能依赖暴力穷举来破解。 H("hello-1") = 970db54ab8a93b7173cb48f55e67fd2c H("hello-2") = 8284353b768977f05ac600baad8d3d17

可以用哈希算法来确认输入是没有经过篡改的。

区块链的不可篡改性

区块链本身记录的就是一连串交易数据,所以区块链要保证所有交易不可篡改。

Merkle Hash

在区块头部有一个merkle hash字段,它记录了此次交易所有的merkle交易。 Merkle哈希是把一系列数据的哈希变成一个汇总的哈希。

anthonyche commented 2 years ago

RPC服务

Remote Procedure Call Protocol 一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

anthonyche commented 2 years ago

DOS攻击

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击 DOS包括故意攻击网络协议和通过野蛮手段残忍耗尽被攻击对象的资源。 服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。

anthonyche commented 2 years ago

eth_call RPC method

Parameters:

object - The transaction call object, should have this shape:

from - (optional)

String of the address the transaction is sent from.20bytes,

to -

String of the address the transaction is directed to. 20 bytes

gas - (optional)

Integer of the gas provided for the transaction execution.交易可用gas量,可选。eth_call不消耗gas,但是某些执行环节需要这个参数

gasprice - (optional)

 Integer of the gasPrice used for each paid gas encoded as a hexadecimal.

value - (optional)

Integer of the value sent with this transaction encoded as a hexadecimal. 
交易发送的以太数量

data - (optional)

String of the hash of the method signature and encoded parameters, see the Ethereum Contract ABI.
方法签名和加密参数的哈希

quantity or tag -

Integer block number, or the string 'latest', 'earliest' or 'pending',
整数块编号

eth_call立刻执行一个新的消息调用,无需在区块链上创建交易。

anthonyche commented 2 years ago

GAS

GAS对于以太坊网络来说至关重要, 正如汽车需要燃油一样,Gas是指在以太坊网络上执行特定操作所需要的计算工作量,由于每笔以太坊交易都需要计算资源才能执行,每笔交易都需要付费。 在这个方面上,Gas 是指在以太坊成功进行交易所需的费用。

Gas 费用是以太坊的货币以太 (ETH) 支付的。 Gas 价格以 Gwei 标明,Gwei 本身就是 ETH 的一个单位――每个 Gwei 等于 0.000000001 ETH (10^-9 ETH)。 例如,您可以说您的 Gas 成本为 1 Gwei,而不是说您的 Gas 成本为 0.000000001 以太。 “gwei”一词本身表示“giga-wei”,等于 100,000,000 wei。

也就是说, 1 Gwei = 10^9 wei, 1 Gwei = 10^-9 ETH, 1 wei = 10^-18 ETH, wei是以太坊网络中最小的单位。

假设 Alice 需要支付 1 ETH 给 Bob。 在交易中,gas 限额为 21,000 单位,gas 的价格是 200 gwei。总费用为:Gas 单位(限额) Gas 单价 例如 21,000 200 = 4,200,000 gwei 或者 0.0042 ETH

当 Alice 汇款时,将从 Alice 账户中扣除 1.0042 ETH。 Bob 将获得 1.0000 ETH。 矿工将得到 0.0042 ETH。

GAS限额

Gas 限额是指您愿意在交易中消耗的最大 gas 数量。 涉及智能合约的更复杂交易需要更多的计算工作,因此相比较简单的支付,它们需要更高的 gas 限额。 标准的 ETH 转账一般要求 gas 的限额为 21,000 单位。

例如,如果您对简单的 ETH 转账设置 50,000 gas 限额。EVM 将消耗 21,000,您将收到剩余的 29,000。 然而,如果您设置的 gas 太少,比如说,对于简单的 ETH 转账,gas 限额为 20,000。EVM 将消耗您 20,000 gas 试图实现交易,但不会完成。 然后,EVM 会恢复所有变化,

但由于矿工已经完成了价值 20k gas 的工作,所以 gas 被消耗掉了

anthonyche commented 2 years ago

双花攻击

即A转账给D,同时也用把相同的币转账给自己,通俗讲,就是把钱花两次,或者多次。依据最长链原则,节点会认可并延长当前最长链,如果当攻击者拥有超过50%算力,并且成功把交易写进区块,则双花发生并且合法。

anthonyche commented 2 years ago

图灵完备

指在可计算性理论里如果一系列操作数据的规则可用来模拟任何图灵机,那么它是图灵完备的。以太坊是图灵完备的,比特币不是的