当前位置: 首页 > news >正文

区块链与以太坊基础:环境搭建与智能合约部署

引言

随着区块链技术的迅猛发展,越来越多的开发者开始关注以太坊平台。作为全球最流行的智能合约平台,以太坊不仅为去中心化应用(DApp)的开发提供了基础设施,也推动了智能合约技术的普及。本篇博客将记录我在学习和搭建以太坊开发环境时的一些经验,涵盖基础概念、工具安装以及合约部署等内容。

1. 理解区块链与以太坊基础

1.1 账户与交易

在以太坊中,账户分为两类:

  • 外部拥有账户(EOA):由私钥控制,能够发起交易和交互智能合约。
  • 合约账户:由合约代码控制,不能直接发起交易,必须通过 EOA 调用。

以太坊的每个账户都有一个地址,用于标识账户,并存储它的余额。交易是由 EOA 发起的,通常包括发送 ETH、调用智能合约方法等操作。

交易结构:

  1. From:发送者地址。
  2. To:接收者地址,可能是 EOA 地址或合约地址。
  3. Gas:执行操作所需的计算资源。
  4. Nonce:确保交易顺序,防止重放攻击。
  5. Data:包含合约调用的输入数据。
1.2 Gas 与 Nonce
  • Gas:以太坊中的每个操作都需要消耗 Gas,Gas 是衡量计算和存储操作的单位。交易的发送者需要为 Gas 支付费用,Gas 价格由市场决定。
  • Nonce:是一个计数器,用于确保交易顺序。每个账户的 Nonce 值从 0 开始,每发一次交易,Nonce 就会递增。
1.3 EVM(以太坊虚拟机)

EVM 是以太坊网络的核心组件,它负责执行智能合约。每个交易都会被发送到 EVM 中执行,EVM 会计算合约代码,并返回执行结果。它保证了去中心化和跨节点的一致性。


2. 环境搭建:Foundry 与 Remix

为了开发和测试以太坊智能合约,我们需要安装一系列开发工具。以下是我在学习中使用的工具:

2.1 安装 Foundry

Foundry 是一个高效的以太坊开发工具集,包含以下几个关键工具:

  • forge:用来编译、测试、部署和验证智能合约。
  • cast:与合约交互,发送交易,检索链上数据。
  • anvil:运行本地以太坊节点,支持分叉功能。

安装 Foundry 非常简单,只需执行以下命令:

curl -L https://foundry.paradigm.xyz | bash
source ~/.zshenv
foundryup
2.2 安装 MetaMask

MetaMask 是一个浏览器插件钱包,能够与以太坊网络进行交互。通过 MetaMask,开发者可以管理账户、签署交易、调用智能合约。

安装 MetaMask 后,你需要设置钱包并连接到本地节点(例如 Anvil)或测试网(如 Rinkeby)。


3. 编译与部署第一个智能合约

3.1 编写 HelloWorld 合约

首先,我们在 RemixFoundry 中编写一个简单的智能合约。下面是一个简单的 HelloWorld.sol 合约:

pragma solidity ^0.8.0;contract HelloWorld {string public message;function setMessage(string memory newMessage) public {message = newMessage;}function getMessage() public view returns (string memory) {return message;}
}

这个合约包含两个函数:

  • setMessage:用来设置一个字符串消息。
  • getMessage:用来获取当前的消息。
3.2 编译与部署

Foundry 中,我们使用 forge build 来编译合约,然后通过 forge script 将合约部署到本地的 Anvil 节点上:

forge build
forge script script/Deploy.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast
3.3 获取 ABI 和字节码

部署成功后,我们可以通过 out/ 文件夹中的 Counter.json 文件获取 ABI字节码,这两个文件是与合约交互时所必需的。


4. 使用 cast 工具与合约交互

4.1 读取合约状态

可以使用 cast call 来读取合约的公共变量或视图函数。例如,查询 HelloWorld 合约中的 message

cast call <合约地址> "getMessage()"
4.2 修改合约状态

使用 cast send 来调用合约的非视图函数(即修改合约状态)。例如,调用 setMessage 函数设置新消息:

cast send <合约地址> "setMessage(string)" "Hello, Ethereum!" --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY

5. PlantUML 图示:部署与调用合约

5.1 部署合约流程

在这里插入图片描述

5.2 调用合约流程

在这里插入图片描述


---### **6. 总结与反思**通过这一天的学习,我已经掌握了区块链和以太坊的基础知识,并成功地搭建了开发环境。通过 **Foundry** 和 **Remix**,我编写、编译、部署并与智能合约进行了交互。同时,我也理解了 **Gas**、**Nonce** 和 **EVM** 等关键概念,以及如何通过 `cast` 工具与合约进行交互。
http://www.dtcms.com/a/617733.html

相关文章:

  • 二维码怎么在网站上做推广微信商店小程序制作教程
  • 毕业设计可以做哪些网站电子商务网站建设前期规划方案
  • Linux 磁盘挂载管理
  • 智能体知识库核心技术解析与实践指南——从文件处理到智能输出的全链路架构v1.2
  • 【Java 基础】 2 面向对象 - 构造器
  • dw6做网站linux做网站服务器那个软件好
  • 生成式人工智能赋能教师专业发展的机制与障碍:基于教师能动性的质性研究
  • 无锡锡山区建设局网站北京网站定制建设
  • 【Word学习笔记】Word如何转高清PDF
  • 小程序地图导航,怎样实现用户体验更好
  • 下流式接入ai
  • PDF无法打印怎么解决?
  • 南宁市网站建设哪家好企业网站模板html
  • 华为数据中心CE系列交换机级联M-LAG配置示例
  • 【HarmonyOS】性能优化——组件的封装与复用
  • 低代码平台的性能优化:解决页面卡顿、加载缓慢问题
  • 开源工程笔记:gitcode/github与性能优化
  • 微页制作网站模板手机上自己做网站吗
  • 基于51单片机的8路简易抢答器
  • Java设计模式精讲从基础到实战的常见模式解析
  • 柯美C654e打印机扫描复印有点画,怎么解决?
  • Vibe Coding之道:从Hulk扩展程序看Prompt工程的艺术
  • 【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
  • 宜兴市的城乡建设管理局网站泉州全网营销
  • Spring中使用Async进行异步功能开发实战-以大文件上传为例
  • 网络安全 | 深入解析XSS攻击与防御实战
  • 怎么做宇宙网站为何有的网站打不开
  • 做的网站文字是乱码wordpress upgrade文件夹
  • day1江协科技
  • Java案例拆解:junit/jvm一步到位