:2026-04-02 3:42 点击:1
以太坊,作为全球领先的区块链平台,其核心魅力之一在于智能合约(Smart Contract),智能合约是在以太坊区块链上自动执行的、不可篡改的程序代码,它们在没有中间方的情况下、按照预设规则管理资产或执行协议,从去中心化金融(DeFi)到非同质化代币(NFT),再到去中心化自治组织(DAO),智能合约的应用无处不在,如何开始使用以太坊合约呢?本文将为你提供一个循序渐进的指南。
在动手之前,我们需要明确几个基本概念:
使用以太坊合约,你需要准备以下工具和环境:
Solidity by Juan Blanco、Hardhat for VS Code等,提供语法高亮、代码提示和编译功能。大多数开发框架(如Hardhat、Truffle)需要Node.js环境,并通过npm(或yarn)来管理依赖包。
我们以一个简单的“存储合约”(Storage Contract)为例,它允许你存储一个uint256类型的数字。
创建项目目录:
mkdir my-first-contract cd my-first-contract npm init -y
安装Hardhat(以Hardhat为例):
npm install --save-dev hardhat npx hardhat
按照提示选择"Create a basic sample project",这将创建一个简单的合约结构。
编写合约代码:
在contracts目录下,创建一个新的Solidity文件,例如Storage.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
/**
* @title Storage
* @dev 一个简单的存储合约,可以存储和检索一个数字。
*/
contract Storage {
uint256 private storedData;
event DataSet(uint256 value);
/**
* @dev 存储一个数字
* @param value 要存储的数字
*/
function set(uint256 value) public {
storedData = value;
emit DataSet(value);
}
/**
* @dev 检索存储的数字
* @return 存储的数字
*/
function get() public view returns (uint256) {
return storedData;
}
}
编译合约: 在项目根目录下运行:
npx hardhat compile
成功编译后,会在artifacts目录下生成ABI(Application Binary Interface)和字节码(Bytecode),ABI是合约与外界交互的接口规范,字节码是部署到EVM的实际代码。
部署合约是将编译好的字节码上传到以太坊网络(测试网或主网)的过程。
配置部署脚本:
在scripts目录下,你可以找到或创建一个部署脚本,例如deploy.js:
async function main() {
// 获取合约工厂
const Storage = await ethers.getContractFactory("Storage");
// 部署合约
const storage = await Storage.deploy();
// 等待部署完成
await storage.deployed();
console.log("Storage合约已部署到:", storage.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
配置网络:
在hardhat.config.js文件中,添加测试网配置,你需要确保MetaMask连接到对应的测试网,并且账户中有足够的测试ETH。
require("@nomicfoundation/hardhat-toolbox");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.9",
networks: {
sepolia: {
url: "https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID", // 替换为你的Infura项目ID或其他节点服务
accounts: ["YOUR_PRIVATE_KEY_HERE"], // 替换为你的测试网账户私钥(注意:不要将私钥提交到代码仓库!)
},
},
};
执行部署: 确保MetaMask连接到Sepolia测试网,然后运行:
npx hardhat run scripts/deploy.js --network sepolia
如果部署成功,控制台会输出合约的地址,这个地址就是你合约在以太坊网络上的唯一标识。

合约部署后,你可以通过调用其函数来与之交互。
通过Hardhat脚本调用:
创建一个新的脚本,例如interact.js:
async function main() {
const [deployer] = await ethers.getSigners();
console.log("使用账户部署:", deployer.address);
// 获取已部署的合约实例
const Storage = await ethers.getContractFactory("Storage");
const storage = await Storage.attach("YOUR_DEPLOYED_CONTRACT_ADDRESS"); // 替换为你的合约地址
// 调用get函数
let currentValue = await storage.get();
console.log("当前存储的值:", currentValue);
// 调用set函数
const tx = await storage.set(42);
await tx.wait(); // 等待交易确认
// 再次调用get函数
currentValue = await storage.get();
console.log("设置后的值:", currentValue);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
然后运行:
npx hardhat run scripts/interact.js --network sepolia
通过Web3与DApps交互: 在实际应用中,你通常会在前端(如React、Vue)应用中使用Web3.js或ethers.js库与合约交互。
BrowserProvider连接MetaMask。使用ethers.js在前端调用set函数:
import { ethers } from "ethers";
// 假设你已经有了provider,
本文由用户投稿上传,若侵权请提供版权资料并联系删除!