本站域名已变更为https://blog.67v.cn,全新首页即将发布,尽情期待!!!

第三天:第一个智能合约,从 Remix 到本地链

环境跑起来了,今天写第一个智能合约。为了先把注意力放在语言本身,今天用 Remix(浏览器里的 IDE)写和部署,不碰任何工程化工具;第五天再把合约搬进 Foundry 工程做正式开发。

一份最小的可运行合约

打开 remix.ethereum.org,新建 Greeter.sol:

code
// 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% 开源合约的地基。

读完了点一下,作者能得积分

赞赏

如果这篇内容帮到了你,不妨请作者喝杯咖啡

分享 微博 QQ

发表评论

发表评论