第三天:第一个智能合约,从 Remix 到本地链
环境跑起来了,今天写第一个智能合约。为了先把注意力放在语言本身,今天用 Remix(浏览器里的 IDE)写和部署,不碰任何工程化工具;第五天再把合约搬进 Foundry 工程做正式开发。
一份最小的可运行合约
打开 remix.ethereum.org,新建 Greeter.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract Greeter {
string private greeting;
event GreetingChanged(string oldGreeting, string newGreeting, address changer);
constructor(string memory _greeting) {
greeting = _greeting;
}
function greet() external view returns (string memory) {
return greeting;
}
function setGreeting(string calldata _greeting) external {
emit GreetingChanged(greeting, _greeting, msg.sender);
greeting = _greeting;
}
}逐行拆一下这份合约里的固定套路:
SPDX-License-Identifier:开源协议声明,没有它编译器会告警;pragma solidity ^0.8.24;:声明编译器版本范围,0.8 之后整数溢出默认受保护,不用再写 SafeMath;string private greeting:状态变量,写进链上存储,改它就要花 gas;event:事件是链上的”日志”,前端靠监听事件感知合约发生了什么;view:只读函数,链下调用不花 gas,上链也不花。
在 Remix 里部署到本地 anvil
Remix 左侧 Deploy 面板 → Environment 选 Custom - Http Provider,地址填 http://127.0.0.1:8545。连上后账户列表就是 anvil 那 10 个测试账户。填一个初始问候语,点 Deploy——几秒钟后合约就”上链”了,左侧会出现合约实例,展开就能调 greet() 和 setGreeting()。
点 setGreeting 改一次内容,再回终端看 anvil 的输出:emit GreetingChanged(...) 的事件日志赫然在列。到此你应该建立第一个体感——合约部署就是把字节码写进链上存储,函数调用就是一笔交易。
踩坑提醒
- Remix 默认连的是 Remix 自己的虚拟机,记得切到 Custom Provider,否则部署的链和 MetaMask 里的对不上;
- anvil 重启后链会清空,之前部署的合约地址会失效,属正常现象;
- Solidity 版本差异不小,教程代码跑不起来时先核对
pragma和编译器版本是否一致。
明天我们把 Solidity 的核心语法一次过完:mapping、struct、modifier 和错误处理,这些是读懂 90% 开源合约的地基。
读完了点一下,作者能得积分
赞赏
如果这篇内容帮到了你,不妨请作者喝杯咖啡
赞赏
如果这篇内容帮到了你,不妨请作者喝杯咖啡
选个金额
微信扫码扫一下,金额 ¥6
- 扫码后按所选金额支付即可
- 赞赏完全自愿,与积分、红包互不影响
发表评论