# Web3.0学习树|2.区块链通识 Ⅱ

By [链上巫师](https://paragraph.com/@looplove) · 2022-11-16

---

**承接前文区块链共识的后续学习，文章末尾会所使用的外部工具及链接，文内如出现知识性和理解性错误还请各位斧正，原创文章，完全开源，若能得转载不胜荣幸，推特会分享Coding学习,生活日常和NBA等内容。**

[https://twitter.com/hanjin\_long](https://twitter.com/hanjin_long)

### 目录

*   **链上的第一笔交易**
    
    *   交易细节
        
    *   测试网梗概
        
    *   交易信息
        
*   **Gas**
    
*   **区块链运作机制(哈希,区块,签名)**
    
    *   SHA256 Hash
        
    *   Block
        
    *   Blockchain
        
    *   Distributed Blockchain
        
    *   Token
        
*   **签名交易(Signing Transactions)**
    
*   文章所引用的外部工具及链接
    

### 链上的第一笔交易

#### 交易细节

> 在区块链上发送交易之前，我们需要先设置好一个钱包，这里使用MetaMask(最流行,最好用的钱包之一)，注意记好自己的秘密恢复词(助记词)，**绝对不要共享它**。同一个助记词能够让我们创建多个账户，它能让我们进入自己MetaMask中所有的账户，账户的地址是我们公开的身份，但是不同的账户也有独一无二的私有身份，也就是账户的私钥。助记词可以让你进入多个账户，私钥只能让你进入这些账户中的一个。可以把私钥认为是账户的密码，它可以让你创建交易。

Concept(概念)Can Access(可以进入)Private or Public(保密还是公开)Mnemonic(助记词)All of your accounts(你所有的账户)Keep Private!(严格保密)Private Key(私钥)1 of your accounts(私钥对应的账户)Keep Private!(严格保密)Public Address(公共地址)Nothing(什么都没有)It's public(完全公开)

#### 测试网梗概

> 网络表单:我们可以接入的所有网络。
> 
> 以太坊主网,可以发送交易来使用真正的钱
> 
> 测试网:用来测试我们的代码，与代码交互，看看它们是否正常运行。
> 
> 我们将使用测试网和本地环境测试我们的代码，测试智能合约。
> 
> 因为测试网不是商业服务，服务不会太稳定，现在比较稳定的测试网是Goerli的测试网(Goerli ether scan)
> 
> Goerli采用POA机制，不能通过挖矿的方式获取测试币，只能通过水龙头领取。
> 
> 连接到水龙头网站，这意味着让网站可以和我们的钱包交互。
> 
> 测试网水龙头就是在测试网上获取测试币的地方。

**总结**:测试网是免费的，主网会有费用，部署后就被认为是上线了，测试网是不盈利的，所以不要滥用它，我们只用它来学习，不要在这些测试网上无限发送交易。

#### 交易信息

![](https://storage.googleapis.com/papyrus_images/4133bbdb7a1b02ece18c763a5e79b5ba1dbd4749092951bcc26580a4fde9734a.png)

点击交易哈希就可以看到这个交易的细节，**理解交易中发生了什么，是成为智能合约工程师必备的，也有助于了解整个生态**。

> 交易哈希是在这个区块链上这笔交易的唯一ID,这个交易哈希标识了发送了0.1以太币到我们的地址的操作
> 
> gas价格越高,被写到区块里的可能性越高

唯一地址是唯一可以确认我们身份的东西。

区块链浏览器EtherScan，可以用它来查看不同的交易，地址和其他在区块链上发生的事情，我们可以通过EtherScan在以太坊主网上查看刚创建的地址。

### Gas

当你创建一个交易时,就会有一个节点,或者叫矿工(miners)和验证者(validators),某个运行区块链软件的人,他们会被支付一小部分以太坊,Polygon或者其他区块链的原生代币,这些收入会激励人们运行节点,他们的收入是由Gas使用量决定的。

Gas是一个计算量的单位,要使用更多的计算资源,就需要支付更多的Gas。(对于发送以太币这样简单的交易,Gas比较便宜,对于像是铸造NFT,向某个Defi存钱这种复杂的交易,因为用到更多的计算,可能就会花费更多的Gas)

Gas价格乘以使用的Gas数量是交易手续费。每一个区块链都有不同的方式来计算Gas费用

**Any transaction on the blockchain comes with paying gas(任何区块链上的交易,都需要支付交易手续费)**

区块链越繁忙,你要付越多的Gas,如果很多人同时在发送交易那么就没有足够的资源处理所有的交易。

![](https://storage.googleapis.com/papyrus_images/264aa1832b35d830607152cfb0716c0414cbe626c05f7048f3540cefd095b0bb.png)

可能需要等待一分钟才能看到交易完成

**怎么与区块链交互,怎么与协议交互,基于这些知识就可以与以太坊和协议交互。**

### 区块链运作机制(哈希,区块,签名)

#### SHA256 Hash(SHA256 哈希)

**哈希是一个独一无二的固定长度的字符串,用来代表一段数据,它是通过将数据传入"哈希函数"来生成的。**

数据被SHA256哈希算法计算,然后哈希算法输出一个独一无二的哈希值。

这个哈希值是独一无二的,固定长度的字符串,这个字符串可以认证和代表传入的数据。

**我们几乎可以传入任意长度的数据,虽然也会有一个数据上限,但实际上几乎可以在这里输入任何长度的数据。**

哈希算法是一个函数,它可以计算一段数据,生成一个独一无二的哈希值。

**BTC使用的是SHA256哈希算法**

**以太坊使用的是Keccak256哈希算法**

![](https://storage.googleapis.com/papyrus_images/038c41704f48b9ef8733bb64853eb9e72c46f28793007994651d724b7b2756e9.png)

#### Block(区块)

![](https://storage.googleapis.com/papyrus_images/9d5ad2e9658ca41240cb9546bc05d9dccb30f18dc9fe59370801fca8293b6b21.png)

**把块高(Block),随机数(Nonce),数据(Data)组合起来,输入到哈希算法中。**

点击挖矿后

Nonce改变了,哈希值现在开头有4个0

> **在本例当中**矿工需要找到一个Nonce,找到的Nonce需要和块高 1 以及Data一起进行哈希运算,结果必须要以4个0开始,矿工要解决的问题,就是找到8和3开头的哈希值,他们唯一的解决方法就是一个一个试。

![](https://storage.googleapis.com/papyrus_images/1f86f0c168a9b501017b8d8b757e279795cc3b9515db41c5a9a89005c72f13ab.png)

Nonce是答案,它是一个数字来解决这个"难题"。

这就是区块链矿工挖矿的过程,就是通过不断计算试错的过程来找到Nonce,而这个Nonce可以解决对应的"难题"

**挖矿是找到区块链"难题"的"答案"的过程,节点通过挖矿来获得收入,同时不同区块链要解决的"难题"也不同。**

#### Blockchain(区块链)

![](https://storage.googleapis.com/papyrus_images/9cc3092046e02d5d506e88036b72056649f5911694de4fe1e013d6006df43a97.png)

**把块高(Block),随机数(Nonce),数据(Data),前指针(Prev)组合起来,输入到哈希算法中。**

> 前指针hash of previous block header(Prev):指向前一个区块的指针,它会指向前一个区块的哈希值(和前一个区块的哈希值一致),Prev全是0的区块,称为创世区块,创世区块的Prev会指向一个并不存在的区块。
> 
> (创世区块)Genesis Block:The first block in a blockchain(区块链中的第一个区块)

当我们谈到区块链时,会提到无法篡改,这就是它实现无法篡改的方式,因为当我们到前面的区块,去改变任何一个数据,其后面的区块链都会变得无效,因为没有一个区块里的Nonce能够生成正确的哈希值,解决难题。

区块链的历史数据几乎不可能被篡改,所以如果我们想要修改,那必须重新挖矿,计算量很大。

区块链中的区块由块高,Nonce,交易和前一个区块哈希值组成。这个区块的**唯一哈希**，可以通过这些数据创建出来，由于区块链的实现方式不同，这里可能有不同的信息，但都是以这些为基础。

#### Distributed Blockchain(分布式的区块链)

![](https://storage.googleapis.com/papyrus_images/a463ec29cade16861736905c069e3bd71a5f2964fc0cae35095eb70d0e03c25e.png)

很多人提到的P2P交易,就是指这里Peer(节点)的概念

运行在区块链上的每一个节点,它们的权重相同。

区块链上的每一个节点或者是运营主体都有着相同的权力。

决定哪条链是正确的链的方法非常简单,就是查看最后一个区块的哈希值,通过它来确定整个区块链的信息。最后一个区块的哈希值包含了前面所有的区块的信息。

区块链是由节点中的大多数控制着的,它们会彼此检查和对比,哪些是诚实节点,哪些是恶意节点没有独裁者,也没有一言堂，区块链的状态,是被大多数节点决定的。**Nonce是用来得到这个哈希值的数字，它还用于定义帐户/地址的交易编号。**

#### Token(代币)

![](https://storage.googleapis.com/papyrus_images/ee6621f80b4436721b434e0b9f3ac82b72b7320774f4a4d45a787b0c7c4f50e0.png)

把块高(Block),随机数(Nonce),交易(Tx),前指针(Prev)组合起来,输入到哈希算法中。

区块链实际上是通过Solidity代码运行的,而非在这里将随机值放在Data区域,Solidity代码(智能合约)定义了链上不同区块和协议交互方式,

### 签名交易(Signing Transactions)

Private Key(私钥):只有密钥持有者知道,它用于签署交易。就像它名字一样,需要像密码一样保存,你会把它当成密码一样,对你所有的交易使用。

私钥是由随机数生成器生成的。

ECDSA算法:是DSA(电子签名算法)的一种,它可以根据私钥创建出公钥;ETH和BTC都使用这个算法。

![](https://storage.googleapis.com/papyrus_images/855aca308df35886d3877165343756061118e54cdbbaca8b2776ae0a3bbe9ba8.png)

* * *

仍旧是使用ECDSA签名算法去创建**信息的签名**。

这个签名算法的强大之处是,你可以使用私钥创建信息签名,但是别人不能从信息签名中得到你的私钥。

![](https://storage.googleapis.com/papyrus_images/6c49e49e0f6404d3f84103ec01c3ef01fc4ce3fc96a09781f772e56261ef0fdb.png)

* * *

通过ECDSA和私钥创建出的公钥,任何人都可以验证这是你的签名。

![](https://storage.googleapis.com/papyrus_images/1192c8e48dd874b852c27aeee680d01f216a098c2f7f6ff0ccc3607d35592453.png)

你的私钥用来对信息签名,公钥让别人来验证签名是你的,别人没办法伪造你的私钥。

* * *

综上所述,我们可以在交易中使用签名算法,通过私钥,我可以对这个交易签名。

![](https://storage.googleapis.com/papyrus_images/18369cc9ef00fd3761fe827c4c09d74ba2ec36bf1856b0775ed1b26670fc7ec5.png)

* * *

* * *

世界上任何人都可以验证这个交易。

![](https://storage.googleapis.com/papyrus_images/b60a75570c9dd5479a37cf0ce57afc199e3dbd677c183cf6b36ecf927885ceb4.png)

* * *

在MetaMusk中,助记词加上账户序号,我们就可以获得私钥。

我们的以太坊地址,实际上是公钥的一部分,为了获得以太坊地址,只需要用我们私钥创建的公钥,进行以太坊上的哈希运算,然后取**20个字节(在以太坊中,账户地址为160位,表示为40个16进制数,在使用时要在开头加一个0x)**,这就是获得地址的方法,获取地址的具体方法不一样,因为每个区块链可能都不一样,但是我们要知道地址是怎么样获得的,它是公钥衍生出来的。

以上的方法创建和签名了一个可以发送的交易。

公钥:派生自您的私钥。任何人都可以看到它，并使用它来验证交易是否来自您,是通过对私钥使用签名算法得到的。

私钥(Private key) ||| ->公钥(Public key)->地址(Address)

### 文章所使用的外部工具及链接

MetaMask(最受欢迎的Web3钱包之一)

Blockchain Demo(学习演示工具)[https://andersbrownworth.com/blockchain/](https://andersbrownworth.com/blockchain/)

EtherScan(以太坊区块链浏览器)[https://etherscan.io/](https://etherscan.io/)

---

*Originally published on [链上巫师](https://paragraph.com/@looplove/web3-0-2)*
