> 技术文档 > 以太坊技术基础与应用

以太坊技术基础与应用


以太坊技术基础与应用

在这里插入图片描述

以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。
以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。

一、课程结构调整与开发工具

1.1 课程结构调整

  • 目标:兼顾原理与实践,每次课程一半讲原理,一半讲编程操作,配套课后任务强化实践。
  • 工具选择:初期使用浏览器 IDE(如 Remix)方便入门,后续过渡到本地开发环境(如 Hardhat)。

1.2 Remix 工具简介

在这里插入图片描述
Remix是一个具有嵌套路由的全栈式React框架。 由于Remix使用Vite,因此需要为Remix Vite插件提供Vite配置。 可以将Remix用作服务器端框架,而根本不使用任何浏览器JavaScript。使用loader加载数据的路由约定,使用action和HTML表单的变化,以及在URL处呈现的组件,可以提供许多Web项目的核心功能集。

  • 功能:支持智能合约编写、编译、部署及交互,内置 JavaScript VM 测试网,无需配置即可快速验证代码。
  • 优势:适合新手入门,提供可视化界面查看合约状态、交易详情等。

二、智能合约基础与实践

2.1 智能合约结构解析

// SPDX-License-Identifier: MITpragma solidity ^0.8.14;contract HelloWorld { // 状态变量(公共,自动生成 getter 函数) string public message = \"Hello, World!\"; // 构造函数:部署时初始化状态变量 constructor(string memory initMessage) { message = initMessage; } // 可写函数:修改状态变量 function updateMessage(string memory newMessage) external { message = newMessage; }}

2.2 关键组件说明

  1. 状态变量:存储在区块链上,永久保存,如 message
  2. 构造函数constructor,部署合约时执行,用于初始化参数。
  3. 函数可见性
    • external:仅外部调用(如其他合约或钱包)。
    • public:内部和外部均可调用,自动生成接口。
  4. 修饰符
    • view:只读,不修改状态(如获取 message)。
    • pure:既不读也不修改状态。

三、ERC-20 通证合约实践

3.1 标准 ERC-20 合约框架

import \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";import \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\";contract MyToken is ERC20, ERC20Burnable { uint8 public constant DECIMALS = 18; uint256 public constant INITIAL_SUPPLY = 10_000_000 * 10**18; constructor() ERC20(\"MyToken\", \"MTK\") { _mint(msg.sender, INITIAL_SUPPLY); }}

3.2 关键功能实现

  • 铸造(Mint):通过 _mint 函数增加代币总量(通常仅限管理员)。
  • 销毁(Burn):调用 burn 函数减少指定地址代币数量。
  • 转账(Transfer):继承 ERC20 接口,直接调用 transfer 函数实现地址间转账。

四、以太坊基础概念

4.1 账户类型

类型 特点 外部账户(EOA) 由私钥控制,可发起交易,无代码存储,如 MetaMask 钱包地址。 合约账户 部署智能合约生成,有代码和存储,通过交易触发执行,无私钥。

4.2 交易(Transaction)

  • 组成
    • to:接收方地址(外部账户或合约账户)。
    • value:转账的 ETH 数量(若调用合约,可为 0)。
    • data:调用合约的函数数据(如函数选择器、参数)。
    • gasLimit/gasPrice:Gas 相关参数,控制交易成本和优先级。
  • 流程:签名交易 → 广播至网络 → 矿工打包确认 → 状态变更。

4.3 Gas 机制

  • 定义:执行交易或合约所需的计算资源费用,以 ETH 支付。
  • 公式Gas Fee = gasUsed × gasPrice
  • 优化
    • 避免循环遍历大量数据(如数组)。
    • 使用 call 替代 transfer 自定义 Gas 消耗(需谨慎)。

五、MetaMask 与测试网交互

5.1 MetaMask 配置

  1. 添加测试网
    • Rinkeby:Chain ID 4,RPC URL https://rinkeby.infura.io/v3/YOUR_KEY
    • Goerli:Chain ID 5,RPC URL https://goerli.infura.io/v3/YOUR_KEY
  2. 获取测试币:通过水龙头网站(如 Goerli Faucet)免费领取测试 ETH。

5.2 合约部署与交互

  1. 部署流程
    • Remix 中选择 Injected Web3 环境(需打开 MetaMask 并连接测试网)。
    • 点击 Deploy,确认 MetaMask 弹出的交易签名请求。
  2. 交互操作
    • 调用合约函数时,MetaMask 会提示签名交易,确认后等待区块确认。

六、课后任务与进阶方向

6.1 基础任务

  1. Hello World 合约
    • 使用 Remix 编写合约,实现字符串存储与修改功能,分别在 JavaScript VM 和 Rinkeby 测试网部署。
  2. ERC-20 代币合约
    • 基于 OpenZeppelin 库编写代币合约,实现转账、销毁功能,测试网验证。

6.2 进阶任务

  1. 权限控制合约:添加管理员角色,仅管理员可铸造代币(提示:使用 onlyOwner 修饰符)。
  2. 跨链交互:通过 Chainlink 预言机获取链下数据,实现合约动态逻辑(如价格触发转账)。

6.3 学习资源

  • 文档:Solidity 官方文档、OpenZeppelin 合约库。
  • 工具:Hardhat 官方教程、Ethers.js 文档。

七、安全与最佳实践

7.1 安全提醒

  • 私钥保管:使用纸和笔记录助记词,多重备份,避免电子存储。
  • 合约审计:重要合约需通过第三方审计(如 Certik、慢雾),避免逻辑漏洞(如重入攻击、溢出漏洞)。

7.2 最佳实践

  • 代码简洁性:智能合约代码应尽量简洁,避免复杂逻辑,降低漏洞风险。
  • 版本控制:指定 Solidity 版本号(如 pragma solidity ^0.8.14),避免兼容性问题。

总结
以太坊开发需结合工具使用、合约设计及区块链基础概念,通过实践任务逐步掌握从编写、部署到交互的全流程。后续课程将深入本地开发环境(Hardhat)和高级主题(如 Layer 2、零知识证明),建议持续练习并关注行业最新动态。