# Ethereum基础

### Ethereum (PoS) 运行逻辑

1. **交易**：用户通过以太坊网络发起交易，例如转账、创建智能合约或调用智能合约的功能。每个交易包含有关发起人、接收人、转移金额、数据以及为了防止欺诈而支付的手续费（gas费）的信息。
2. **交易验证**：交易被网络中的节点接收，并进行由验证者进行初步验证，例如检查交易的数字签名和账户余额。
3. **区块的形成**：一旦交易被验证，它们会被网络中的验证者收集并放入区块中。在创建区块的过程中，会根据交易所附带的手续费（高费用可能优先处理）来选择交易。
4. **使用权益证明：**
   * 验证者的参与者将他们的以太币作为“抵押”锁定，以获得处理交易和创建新区块的机会。验证者的选择基于他们的抵押金额和其他因素，如随机性。
   * 验证者对新区块中的交易进行验证并提议新区块。其他验证者会对这个区块进行检查，并通过一个共识过程对其进行认证。
5. **区块的确认**：一旦区块被网络广泛接受（多数节点同意并在其各自的区块链版本上添加该区块），该区块就被视为已确认。确认的区块将连接到区块链上，所有其中的交易也随之被最终确认。

<figure><img src="https://1519527010-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7UJxm1gCnqCpQPPfK1k7%2Fuploads%2FSkMUOm9pmZUWaRjNbjgk%2Fimage.png?alt=media&#x26;token=2fcff437-9ca5-4be2-9f6e-1080cb1f80ef" alt=""><figcaption></figcaption></figure>

### 智能合约运行举例

#### 当我通过借贷协议抵押了 10 ETH并借出了 100 USDC，整个过程在以太坊区块链上是如何进行的？

#### 1. **合约调用**

首先，你会通过以太坊钱包或应用与借贷平台的智能合约进行交互。这通常通过调用智能合约的特定函数开始，例如，你可能会调用一个名为`deposit`的函数来抵押 10 ETH，并调用`borrow`函数来借出 100 USDC。

#### 2. **交易创建和签名**

如同任何以太坊交易，你需要指定交易的具体参数，如：

* **To（目标地址）**：智能合约的地址。
* **Value（数值）**：抵押的ETH数量（10 ETH）。
* **Data（数据）**：包含你要调用的合约函数及其参数的特定信息，如借出100 USDC。
* **Gas Limit 和 Gas Price**：为了执行这些操作，你需要设置合适的Gas限制和价格。

交易生成后，你需要使用你的私钥对其进行签名，以验证你的身份并授权交易。

#### 3. **广播和网络验证**

签名的交易被广播到以太坊网络。网络节点接收到交易后，将执行以下检查：

* **验证签名和Nonce**：确保交易没有被篡改，并且是连续的。
* **检查账户余额**：确保你有足够的ETH来支付Gas费用和抵押。

#### 4. **智能合约执行**

一旦交易被验证，矿工将其包括在新的区块中。执行交易时，以太坊虚拟机（EVM）会按照智能合约编码的逻辑进行操作：

* **抵押ETH**：智能合约记录你抵押的 10 ETH，并可能在内部账户余额中为你发放相应的代币（如cETH或其他代表你抵押份额的代币）。
* **借出USDC**：根据合约逻辑和当前协议的状态（如流动性、抵押率等），合约计算并批准你借出 100 USDC 的请求。这通常涉及到检查你的借贷条件是否满足，如抵押物足够覆盖借款。

#### 5. **状态更新和记录**

智能合约执行所有操作后，合约的状态将更新（如借款记录、新的余额等），这些状态变更被记录在区块链上。完成后，合约也会发出事件或日志，这可以被前端应用捕捉并相应地更新用户界面。

#### 6. **确认交易**

当区块被矿工挖掘并添加到区块链上后，其中的交易（包括你的合约操作）被视为已确认。通常建议等待若干确认以确保交易的不可逆性。

通过这一流程，以太坊可以确保即使是复杂的借贷操作也能安全、透明且不可篡改地执行。智能合约的代码质量和逻辑严密性对于系统的整体安全性至关重要，因为合约代码一旦部署，其逻辑就固定下来，任何错误或漏洞都可能被利用。
