solidity合约钱包

Posted by UpSheng on Monday, July 15, 2024

如何用solidity做一个简易钱包。可以存入eth,提取eth。

代码

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

contract Wallet {
    address public owner;

    constructor() payable{
        owner = msg.sender;
    }

    receive() external payable{

    }

    function withdraw  (uint  amount) external {
        require(msg.sender == owner, "not owner");
        (bool sent, ) = owner.call{value: amount}("");
        require(sent,"call err");
    }

    function getBanlance() external view   returns(uint)  {
        return address(this).balance;
    }
}
  • // SPDX-License-Identifier: UNLICENSED
    • license协议
  • contract Wallet
    • contract 合约关键字
    • Wallet 自定义名字
  • address public owner;
    • address 地址类型
    • public 外部可访问,自动生成get函数
    • owner 自定义变量,拥有者地址
  • constructor() payable
    • construtor 构造函数,只执行一次
    • payable 关键字表示可收款
  • receive() external payable
    • receive 外部调用 没匹配到的执行此方法
    • external 外部调用标识
  • function withdraw (uint amount) external
    • 提现方法定义
    • uint 无符号整型256位
  • require(msg.sender == owner, “not owner”)
    • require 关键字 一个条件验证,如果不符合则终止,后面跟一个提示
    • msg.sender 全局变量,表示调用者的地址
  • (bool sent, ) = owner.call{value: amount}("")
    • call方法,表示 owner地址接收调用者地址amount eth
  • address(this).balance
    • 表示当前地址的余额

gif演示

账户1部署合约

账户2存入10 eth

账户1提现 5eth

2024-07-18 00.57.40

gifox 只能录制10秒的gif,没找到延长的配置

然后转视频到gif,居然要70m