更新於 2022/07/11閱讀時間約 1 分鐘

智能合約開發實戰(14) - 實作一個簡單的錢包

介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable
payable這個標記是什麼呢?payable就是當您想要接收ETH(乙太幣)時,也就是想把ETH存入合約內時,函數上必須標記有payable才行,不然會報錯,常見的是標記在deposit()的function上,這樣才能接收ETH幣。
廢話不多說,下面來看一下程式碼:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

contract Wallet {
  address public owner;

  event Deposit(address sender, uint amount, uint balance);
  event Withdraw(uint amount, uint balance);
  event Transfer(address to, uint amount, uint balance);

  //檢查是否為Owner
  modifier onlyOwner() {
    require (msg.sender == owner, "Not Owner");
    _;
  }

  //初始化
  constructor() payable {
    owner = payable(msg.sender);
  }

  //存款
  function deposit() public payable {
    emit Deposit(msg.sender, msg.value, address(this).balance);
  }

  //查詢餘額
  function getBalance() public view returns (uint) {
    return address(this).balance;
  }

  //取款
  function withdraw(uint amount) public onlyOwner {
    payable(msg.sender).transfer(amount);
    emit Withdraw(amount, address(this).balance);
  }

  //交易給(某人)
  function TransferTo(address payable _to, uint amount) public onlyOwner {
    _to.transfer(amount);
    emit Transfer(_to, amount, address(this).balance);
  }
}
程式碼就如上所示,下面我們來玩看看會是什麼樣的狀況,由此來了解錢包是怎麼運作的:
Account選擇第一個帳戶,這樣第一個帳戶就會是Owner,存入10ETH進去錢包,按getBalance會顯示"10000000000000000000",因為顯示的單位是wei,所以10的後面會有18個零,回頭看第一個帳戶只剩下89.9999999個ETH。
接下來我們從第二個帳戶存2個ETH進去錢包:
從第2個帳戶存入2個ETH進去錢包,第二個帳戶會少了2個ETH剩下97.9999,不是98是因為還會再扣掉gas fee(手續費),下面我們來操作提款,正常來說因為我們有寫限制式,只有Owner才能提款,所以如果用第2個帳戶會報錯,要用第1個帳戶才能順利提款,下面我們來看一下是不是這樣的:
最後一步來把剩下的10個ETH交易給第二個帳戶:
以上就是一個簡單錢包的基本操作(存款、提款、交易),希望這樣的介紹能讓各位了解一個錢包是怎麼運作的,對錢包有初步的認識,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.