投研分析师|加密行业研究员|前智能合约开发者 重复是一切技巧之本

Subscribe to 链上巫师
Share Dialog
<100 subscribers

承接前文区块链共识的后续学习,文章末尾会所使用的外部工具及链接,文内如出现知识性和理解性错误还请各位斧正,原创文章,完全开源,若能得转载不胜荣幸,推特会分享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机制,不能通过挖矿的方式获取测试币,只能通过水龙头领取。
连接到水龙头网站,这意味着让网站可以和我们的钱包交互。
测试网水龙头就是在测试网上获取测试币的地方。
总结:测试网是免费的,主网会有费用,部署后就被认为是上线了,测试网是不盈利的,所以不要滥用它,我们只用它来学习,不要在这些测试网上无限发送交易。

点击交易哈希就可以看到这个交易的细节,理解交易中发生了什么,是成为智能合约工程师必备的,也有助于了解整个生态。
交易哈希是在这个区块链上这笔交易的唯一ID,这个交易哈希标识了发送了0.1以太币到我们的地址的操作
gas价格越高,被写到区块里的可能性越高
唯一地址是唯一可以确认我们身份的东西。
区块链浏览器EtherScan,可以用它来查看不同的交易,地址和其他在区块链上发生的事情,我们可以通过EtherScan在以太坊主网上查看刚创建的地址。
当你创建一个交易时,就会有一个节点,或者叫矿工(miners)和验证者(validators),某个运行区块链软件的人,他们会被支付一小部分以太坊,Polygon或者其他区块链的原生代币,这些收入会激励人们运行节点,他们的收入是由Gas使用量决定的。
Gas是一个计算量的单位,要使用更多的计算资源,就需要支付更多的Gas。(对于发送以太币这样简单的交易,Gas比较便宜,对于像是铸造NFT,向某个Defi存钱这种复杂的交易,因为用到更多的计算,可能就会花费更多的Gas)
Gas价格乘以使用的Gas数量是交易手续费。每一个区块链都有不同的方式来计算Gas费用
Any transaction on the blockchain comes with paying gas(任何区块链上的交易,都需要支付交易手续费)
区块链越繁忙,你要付越多的Gas,如果很多人同时在发送交易那么就没有足够的资源处理所有的交易。

可能需要等待一分钟才能看到交易完成
怎么与区块链交互,怎么与协议交互,基于这些知识就可以与以太坊和协议交互。
哈希是一个独一无二的固定长度的字符串,用来代表一段数据,它是通过将数据传入"哈希函数"来生成的。
数据被SHA256哈希算法计算,然后哈希算法输出一个独一无二的哈希值。
这个哈希值是独一无二的,固定长度的字符串,这个字符串可以认证和代表传入的数据。
我们几乎可以传入任意长度的数据,虽然也会有一个数据上限,但实际上几乎可以在这里输入任何长度的数据。
哈希算法是一个函数,它可以计算一段数据,生成一个独一无二的哈希值。
BTC使用的是SHA256哈希算法
以太坊使用的是Keccak256哈希算法


把块高(Block),随机数(Nonce),数据(Data)组合起来,输入到哈希算法中。
点击挖矿后
Nonce改变了,哈希值现在开头有4个0
在本例当中矿工需要找到一个Nonce,找到的Nonce需要和块高 1 以及Data一起进行哈希运算,结果必须要以4个0开始,矿工要解决的问题,就是找到8和3开头的哈希值,他们唯一的解决方法就是一个一个试。

Nonce是答案,它是一个数字来解决这个"难题"。
这就是区块链矿工挖矿的过程,就是通过不断计算试错的过程来找到Nonce,而这个Nonce可以解决对应的"难题"
挖矿是找到区块链"难题"的"答案"的过程,节点通过挖矿来获得收入,同时不同区块链要解决的"难题"也不同。

把块高(Block),随机数(Nonce),数据(Data),前指针(Prev)组合起来,输入到哈希算法中。
前指针hash of previous block header(Prev):指向前一个区块的指针,它会指向前一个区块的哈希值(和前一个区块的哈希值一致),Prev全是0的区块,称为创世区块,创世区块的Prev会指向一个并不存在的区块。
(创世区块)Genesis Block:The first block in a blockchain(区块链中的第一个区块)
当我们谈到区块链时,会提到无法篡改,这就是它实现无法篡改的方式,因为当我们到前面的区块,去改变任何一个数据,其后面的区块链都会变得无效,因为没有一个区块里的Nonce能够生成正确的哈希值,解决难题。
区块链的历史数据几乎不可能被篡改,所以如果我们想要修改,那必须重新挖矿,计算量很大。
区块链中的区块由块高,Nonce,交易和前一个区块哈希值组成。这个区块的唯一哈希,可以通过这些数据创建出来,由于区块链的实现方式不同,这里可能有不同的信息,但都是以这些为基础。

很多人提到的P2P交易,就是指这里Peer(节点)的概念
运行在区块链上的每一个节点,它们的权重相同。
区块链上的每一个节点或者是运营主体都有着相同的权力。
决定哪条链是正确的链的方法非常简单,就是查看最后一个区块的哈希值,通过它来确定整个区块链的信息。最后一个区块的哈希值包含了前面所有的区块的信息。
区块链是由节点中的大多数控制着的,它们会彼此检查和对比,哪些是诚实节点,哪些是恶意节点没有独裁者,也没有一言堂,区块链的状态,是被大多数节点决定的。Nonce是用来得到这个哈希值的数字,它还用于定义帐户/地址的交易编号。

把块高(Block),随机数(Nonce),交易(Tx),前指针(Prev)组合起来,输入到哈希算法中。
区块链实际上是通过Solidity代码运行的,而非在这里将随机值放在Data区域,Solidity代码(智能合约)定义了链上不同区块和协议交互方式,
Private Key(私钥):只有密钥持有者知道,它用于签署交易。就像它名字一样,需要像密码一样保存,你会把它当成密码一样,对你所有的交易使用。
私钥是由随机数生成器生成的。
ECDSA算法:是DSA(电子签名算法)的一种,它可以根据私钥创建出公钥;ETH和BTC都使用这个算法。

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

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

你的私钥用来对信息签名,公钥让别人来验证签名是你的,别人没办法伪造你的私钥。
综上所述,我们可以在交易中使用签名算法,通过私钥,我可以对这个交易签名。

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

在MetaMusk中,助记词加上账户序号,我们就可以获得私钥。
我们的以太坊地址,实际上是公钥的一部分,为了获得以太坊地址,只需要用我们私钥创建的公钥,进行以太坊上的哈希运算,然后取20个字节(在以太坊中,账户地址为160位,表示为40个16进制数,在使用时要在开头加一个0x),这就是获得地址的方法,获取地址的具体方法不一样,因为每个区块链可能都不一样,但是我们要知道地址是怎么样获得的,它是公钥衍生出来的。
以上的方法创建和签名了一个可以发送的交易。
公钥:派生自您的私钥。任何人都可以看到它,并使用它来验证交易是否来自您,是通过对私钥使用签名算法得到的。
私钥(Private key) ||| ->公钥(Public key)->地址(Address)
MetaMask(最受欢迎的Web3钱包之一)
Blockchain Demo(学习演示工具)https://andersbrownworth.com/blockchain/
EtherScan(以太坊区块链浏览器)https://etherscan.io/