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 进行测试。开发过程中请确保理解每行代码的含义,智能合约一旦部署将无法修改。

相关推荐
双缝观察者7 小时前
虚假承兑商链上资产流向追踪与线下身份锁定技术
区块链
汇策研习社1 天前
StdDev标准差指标深度解析:量化市场波动的核心工具
大数据·经验分享·金融·区块链·fastbull
终端域名2 天前
区块链:赋能万物的事实机器
区块链
TechubNews2 天前
马云金融公司斥资4400万美元购买以太坊,布局Web3扩展
web3·区块链
Richown2 天前
Solidity 升级代理:可升级不是随便改逻辑
区块链·react
Richown2 天前
Solana 账户模型入门:别用以太坊思维写程序
区块链·react
苏西苏西2 天前
区块链+NFT:为Sonic生成作品确权存证
区块链·nft·sonic
vx_stockmasterx2 天前
两融担保品:杠杆交易的“安全垫”与“通行证”
人工智能·区块链
泛普软件2 天前
工程合约管理软件具备哪些核心功能,解决合同结算各类纠纷难题
大数据·人工智能·区块链
狙击主力投资工具2 天前
集合竞价抓涨停一字选股战法.集合竞价抓涨停板.集合竞价选股绝招.早盘集合竞价的选股技巧.短线高手秘笈抓住买卖时机选出黑马股
区块链