xChar
·8 months ago

https://decert.me/tutorial/solidity/intro

Solidity 是专为以太坊平台设计的编程语言

1 账户

  1. 外部用户账户(EOA)
  2. 合约账户

特点:
地址格式相同,20字节的16进制数
交易只能由外部账户发起,所有Gas(手续费)由外部账户支付

2 账户状态

四个基本组成部分:
nonce:
分两种 1-一个账户的交易数量,2-工作量证明nonce(用于计算满足工作量证明的随机数)
EOA:从此账户发送的交易序号
合约账户:此账户创建的合约序号
balance:
拥有的以太币余额数量,单位:Wei, 1ether = 10^18 wei,以太币交易时,balance会改变。EOA和合约账户都有balance;合约账户使用代码管理所拥有的资金,外部用户账户则是使用私钥签名来花费资金;合约账户存储了代码,外部用户账户则没有。
storageRoot:
Merkle Patricia树的根节点哈希值。Merkle树会将此账户存储内容的哈希值进行编码,默认是空值。
codehash:
账户代码的hash值。
合约账户:合约代码被hash计算后的结果作为hashcode保存
EOA:空字符串hash值
可视化示例来总结上述内容:

3 以太币

以太坊的货币,类似于法币中不同的面额,用户最常用的是ether,开发者常用的是wei,wei是以太币中的最小单位,还有两个单位是finney和szabo,wei的衍生单位:Kwei、Mwei、Gwei

1 ether = 10^3 finney(即1000 finney)
1 ether = 10^6 szabo
1 ether = 10^18 wei
1 Gwei = 10^9 wei
1 Mwei = 10^6 wei

4 以太坊虚拟机(EVM)

一种虚拟计算机,用于执行智能合约与Dapp,EVM是以太坊核心组件之一,负责处理和执行智能合约代码。
工作原理与传统虚拟机类似,它专门用于区块链和智能合约。他是以太坊上的自动化合同。
执行智能合约:将智能合约字节码加载到内存,按照预定规则执行。
gas:防止恶意代码无限循环消耗资源。

5 以太坊客户端

是连接到以太坊网络的节点程序,EVM是客户端的重要组成,运行节点程序,即可成为以太坊网络节点之一。
两个层次
执行层:
负责处理交易执行,包括智能合约的部署执行
共识层:
负责处理共识算法,即出块和交易
执行层客户端:
Geth(官方-Go语言实现)、Nethermind(C#实现)和 Erigon(Go语言实现)。这些客户端用于处理以太坊网络上的智能合约操作和交易执行。
共识层客户端:
Prysm(Go语言实现)和 Lighthouse(Rust实现)。这些客户端用于参与共识过程,确保区块链网络的一致性和安全性。

6 钱包

管理账户的重要工具,可以使用钱包创建账户、交易签名,连接到区块链节点来执行交易。钱包本身并不存储用户的资产,而是管理访问这些资产的密钥和签名功能。
常见的移动端钱包 ImToken、Trust Wallet
网页钱包:metamask、Phantom(Solana)

7 Gas机制

防止恶意行为而引入,衡量执行操作需要的工作量的单位。相当于手续费

8 以太坊交易

三种类型

  1. 普通交易
  2. 创建合约
  3. 调用合约函数
{
  "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  "value": 0.0005,
  "data": "0x" // 可以包含消息或留言
}
这是一个非常简单的普通交易,它将一定数量的以太币转移到指定地址,
如果愿意,还可以在交易中包含一条消息。
{
  "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85", // 合约地址
  "value": 0.0,
  "data": "0x06661abd"
}
调用智能合约函数的信息封装在DATA字段中,将此交易信息发送到要调
用的智能合约的地址。假设我们要调用前面的count()函数,传递的
是 count()函数的选择器。
Loading comments...