Cover photo

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

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

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机制,不能通过挖矿的方式获取测试币,只能通过水龙头领取。

连接到水龙头网站,这意味着让网站可以和我们的钱包交互。

测试网水龙头就是在测试网上获取测试币的地方。

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

交易信息

post image

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

交易哈希是在这个区块链上这笔交易的唯一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,如果很多人同时在发送交易那么就没有足够的资源处理所有的交易。

post image

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

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

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

SHA256 Hash(SHA256 哈希)

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

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

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

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

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

BTC使用的是SHA256哈希算法

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

post image

Block(区块)

post image

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

点击挖矿后

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

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

post image

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

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

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

Blockchain(区块链)

post image

把块高(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(分布式的区块链)

post image

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

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

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

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

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

Token(代币)

post image

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

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

签名交易(Signing Transactions)

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

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

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

post image

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

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

post image

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

post image

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


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

post image


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

post image

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

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

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

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

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

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

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

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

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