Solidity 智能合约开发实战:从零构建 PiggyBank 存钱罐合约

目录

    • [1. 项目概述](#1. 项目概述)
    • [2. 初始合约代码](#2. 初始合约代码)
    • [3. 合约功能完善](#3. 合约功能完善)
      • [3.1 增加显式存款函数](#3.1 增加显式存款函数)
      • [3.2 重新部署合约](#3.2 重新部署合约)
    • [4. 环境准备与部署](#4. 环境准备与部署)
      • [4.1 配置 Remix 和 MetaMask](#4.1 配置 Remix 和 MetaMask)
    • [5. 合约部署实战](#5. 合约部署实战)
      • [5.1 部署过程](#5.1 部署过程)
      • [5.2 部署成功确认](#5.2 部署成功确认)
      • [5.3 合约地址与验证](#5.3 合约地址与验证)
    • [6. 合约测试与验证](#6. 合约测试与验证)
      • [6.1 钱包余额测试](#6.1 钱包余额测试)
      • [6.2 Remix 存款操作](#6.2 Remix 存款操作)
      • [6.3 MetaMask 直接发送](#6.3 MetaMask 直接发送)
      • [6.4 提取功能测试](#6.4 提取功能测试)
      • [6.5 合约信息查看](#6.5 合约信息查看)
    • [7. 总结与资源](#7. 总结与资源)
      • [7.1 项目总结](#7.1 项目总结)
      • [7.2 学习资源](#7.2 学习资源)
      • [7.3 下一步建议](#7.3 下一步建议)

1. 项目概述

本文将带领大家从零开始,使用 Solidity 语言开发一个简单的 PiggyBank(存钱罐)智能合约。通过这个实战项目,你将学习到:

  • Solidity 智能合约的基本结构
  • 状态变量、事件、函数的定义与使用
  • 合约部署到 Sepolia 测试网络的完整流程
  • 使用 Remix IDE 和 MetaMask 进行合约交互
  • 合约功能的测试与验证

2. 初始合约代码

首先,我们创建一个基础的 PiggyBank 合约,包含以下核心功能:

solidity 复制代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract PiggyBank {
    // 状态变量:记录存钱罐的主人
    address public immutable owner;

    // 事件:记录存款和取款操作
    event 存款(address indexed sender, uint amount);
    event Withdraw(uint amount);

    // 构造函数:初始化时设置合约部署者为主人
    constructor() {
        owner = msg.sender;
    }

    // 存款函数:允许任何人发送ETH存入存钱罐
    receive() external payable {
        emit Deposit(msg.sender, msg.value);
    }

    // 提现函数:只允许主人将存钱罐里的所有ETH取出并销毁合约
    function withdraw() external {
        require(msg.sender == owner, "Only the owner can withdraw");
        emit Withdraw(address(this).balance);
        selfdestruct(payable(owner));
    }

    // 查看余额函数:允许任何人查看当前存钱罐的总额
    function getBalance() external view returns (uint) {
        return address(this).balance;
    }
}

3. 合约功能完善

3.1 增加显式存款函数

为了让 Remix IDE 界面生成更友好的交互按钮,我们增加一个显式的存款函数:

solidity 复制代码
// 增加了一个显式的存款函数,会在 Remix 界面生成一个漂亮的橙色按钮
function deposit() external payable {
    require(msg.value > 0, "Must send some ETH");
    emit Deposit(msg.sender, msg.value);
}

3.2 重新部署合约

添加新功能后,需要重新编译并部署合约:

4. 环境准备与部署

4.1 配置 Remix 和 MetaMask

  1. 选择测试网络:在 Remix 中配置 MetaMask,选择 Sepolia 测试网络
  1. 连接钱包:成功连接到 MetaMask 钱包地址

5. 合约部署实战

5.1 部署过程

部署合约到 Sepolia 测试网络:


备注:可以到https://zan.top/faucet/ethereum 领取免费的SepoliaETH

5.2 部署成功确认

5.3 合约地址与验证

合约地址0xbb2a85522909c9161Ed5615E32cecAFeE8277770

合约验证链接https://testnet.routescan.io/address/0xbb2a85522909c9161Ed5615E32cecAFeE8277770/contract/11155111/code

6. 合约测试与验证

6.1 钱包余额测试

首先检查钱包余额,确保有足够的测试 ETH:

6.2 Remix 存款操作

通过 Remix IDE 向合约存款:

6.3 MetaMask 直接发送

也可以通过 MetaMask 直接向合约地址发送 ETH:

6.4 提取功能测试

合约所有者可以提取所有资金并销毁合约:

6.5 合约信息查看

https://testnet.routescan.io/address/0xbb2a85522909c9161Ed5615E32cecAFeE8277770

7. 总结与资源

7.1 项目总结

通过本实战项目,我们完成了:

  1. ✅ 编写了一个完整的 PiggyBank 智能合约
  2. ✅ 实现了存款、提现、查询余额等核心功能
  3. ✅ 使用 Remix IDE 进行合约开发和测试
  4. ✅ 部署到 Sepolia 测试网络
  5. ✅ 通过多种方式测试合约功能

7.2 学习资源

7.3 下一步建议

  1. 功能扩展:添加存款记录、设置提现限额、多签提现等功能
  2. 前端集成:使用 Web3.js 或 Ethers.js 开发前端 DApp
  3. 安全审计:学习智能合约安全最佳实践
  4. 主网部署:在充分测试后部署到以太坊主网

提示:本文所有操作均在 Sepolia 测试网络进行,请勿在主网使用真实 ETH 进行测试。开发过程中请确保理解每行代码的含义,智能合约一旦部署将无法修改。

相关推荐
酿情师1 小时前
孤立交易:比特币节点为什么会暂存缺少父交易的交易
区块链
拼尽全力前进12 小时前
加密算法分类
区块链
酿情师18 小时前
比特币系统中是如何解决货币的发行与验证两大问题
区块链·比特币
酿情师18 小时前
SPV:比特币轻客户端如何在不下载完整区块链的情况下验证交易
区块链
liudanzhengxi18 小时前
ImToken智能合约交互避坑全攻略
区块链
拼尽全力前进19 小时前
比特币和以太坊的底层正是使用了 ECC(椭圆曲线加密)算法来生成钱包地址(公钥衍生)和签署交易(私钥签名) 解释说明
区块链
Cvmax21 小时前
接入 Hyperliquid API:从入门到下单
区块链
拼尽全力前进1 天前
区块链知识
区块链
2501_927283581 天前
堆垛机立体库:告别人工翻找与货物堆压
大数据·人工智能·低代码·自动化·区块链