KryptoCamp ERC20教學

更新 發佈閱讀 10 分鐘

以前覺得程式隔行如隔山, 一直都鴨子聽雷進入自我懷疑回圈, 特別感謝Paul老師, 願意花大量時間鉅細靡遺的介紹, 像解釋文言文一般, 悉心的一字一句清晰的解釋成白話文給我們大家, 終於找到了火山登山口的感覺, 繼續加油 🌳

1. mapping(address account => uint256) private _balances;

mapping -> 一個table, 左邊欄位(address)對應到右邊欄位(uint256) = 哪個地址擁有多少錢, 表示含金度

2. mapping(address account => mapping(address spender => uint256)) private _allowances;

allowance 紀錄: 擁有者(owner) 授權, 設定讓某個人(spender)動用多少自己的資產

allowance 指的是一種功能,用於實現代幣擁有者(owner)授權另一個帳戶(spender)代表自己進行轉移一定數量的代幣。具體來說,ERC-20 標準中的 allowance 機制通常用於實現代幣轉移的授權管理,以及允許合約代表用戶進行轉移 - ChatGPT

3. uint256 private _totalSupply;

這個幣總量發了多少?

4. string private _name;

這個幣的名稱

5. string private _symbol;

這個幣的縮寫

6. constructor(string memory name_; string memory symbol) { _name = name_; _symbol = symbol_; }

在合約被創建時, 就要表示代幣的名稱簡稱是什麼?

constructor 是一種特殊的函數,用於合約的初始化。當一個合約被創建時(即合約部署到區塊鏈上時),constructor 函數會被自動執行一次來初始化合約的狀態。 -ChatGPT

7. function name() public view virtual returns (string memory) { return _name;}

功能是取得合約的名稱

8. function symbol() public view virtual returns (string memory) { return _symbol;}

功能是取得合約的簡稱

9. function decimals() public view virtual returns (uint8) { return 18;}

功能直接把10^18固定住了, 是預設值, 但因為這是virtual, 所以繼承合約後可以覆寫override

10. function totalSupply() public view virtual returns (uint256) {return _totalSupply;}

取得目前代幣總共發了多少顆?

11. function balanceOf(address account) public view virtual returns (uint256) { return _balances(account);

呼應前面的mapping, 取得擁有者有多少幣

12. function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; }

帶入你要傳送對象的地址(address to), 以及你要傳送給他的幣量(uint256 value)

13. function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowance[owner][spender];

  • 可以查詢某一個user, 授權給另一個address多少的幣
  • 在某一個function後面看到view或是pure, 就是查資料, 不會扣到gas fee,
  • 如果沒有看到 view 或是 pure, 他就認為你要改變合約狀態, 就要付gas fee

14. function approve (address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); returns true;}

告訴他你要授權多少幣量給哪個地址, 會寫進allowance的mapping裡

15. function transferfrom address from, address to, uint256 value) public view returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value; _transfer(from, to, value); return true; }

從user轉移到sender多少量, 必須先有user授權可以動用這筆資產 (這段有點聽不懂, 之後再回過頭來聽)

16. function _mint(address account, uint256 value) internal { if(account == address(0)) { revert ERC20 InvalidReceiver(address(0), account, value);}

提供一個internal的function, 我的合約繼承他之後, 可以一開始都發完, 不用讓用戶來mint

老師講義

1. 狀態變數

  • _balances: 持幣紀錄。(address => uint256)
  • _allowances: 授權關係。 (address => (address => uint256))
  • _totalSupply:代幣供給量。
  • _name: 代幣名稱。
  • _symbol: 代幣簡稱。

2. Function

2.1 Get: (查資料, 不會耗費gas)

  • name():取得代幣名稱。

symbol():取得代幣簡稱。

decimals():取得精度。

totalSupply():取得總發行量。

balanceOf(address account):取得「某地址」的「持幣量」。

2.2 Write: (會改變合約狀態)

  • transfer(address to, uint256 value):轉移代幣。
  • approve(address spender, uint256 value):授權「某地址」操作「某數量」代幣。
  • transferFrom(address from, address to, uint256 value):轉移代幣,通常「被授權者」會呼叫這個。

2.3 internal:

  • _mint(address account, uint256 value):鑄造代幣。
  • _burn(address account, uint256 value):燒掉代幣。

Demo Code (發幣只需要27行)

  • 釣魚網站陷阱: 授權
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

// 幣的名稱, 以及繼承ERC20合約
contract ERC20Example is ERC20 {

// 定義最大供給量, 規定這個幣最多發多少
uint256 public maxSupply;

//建構子初始化ERC20必要參數(name與symbol),並多加設定題目要求的maxSupply
constructor(
string memory _name,
string memory _symbol,
uint256 _maxSupply
) ERC20(_name, _symbol){
//執行時填入10000000000(100億) * 1000000000000000000(單位)
maxSupply = _maxSupply;
}
// 為了讓用戶自己鑄造
// 用戶輸入uint256 amount的數量
// 要自己實作mint function,主要用來demo確認用
function mint (uint256 amount) external {
//判斷這筆交易若完成,是否會超出最大供給量,如果會就回傳錯誤字串"over max supply."
require(amount + totalSupply() <= maxSupply, "over max supply.");
_mint(msg.sender, amount); // 如果上一行成立, 就會呼叫這行執行, 右邊的數量, 轉給呼叫者
}
}

[Reference]

  1. Solidity 實戰系列工作坊第 3 場精彩重播: ERC20 同質化代幣與 ERC721 NFT 非同質化代幣
  2. Week3- Token (ERC20) & NFT (ERC721), 講師 Paul Wu, 2024/5/12
留言
avatar-img
Follow the Rainmaker 🌧️
5會員
91內容數
尋大神腳印, 亦步亦趨。
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
看更多
你可能也想看
Thumbnail
这篇文章主要介绍了通俗解释加密货币的采用是什么意思?的相关资料,需要的朋友可以参考下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 比特币和以太坊等加密货币使用点对点去中心化系统进行交易。 由于整个过
Thumbnail
这篇文章主要介绍了通俗解释加密货币的采用是什么意思?的相关资料,需要的朋友可以参考下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 比特币和以太坊等加密货币使用点对点去中心化系统进行交易。 由于整个过
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
比特幣區塊鏈為了滿足各種不同的需求與技術,目前衍生出四種不同型態的地址形式,主要是針對安全性、靈活性與新版本兼容性的改革。
Thumbnail
比特幣區塊鏈為了滿足各種不同的需求與技術,目前衍生出四種不同型態的地址形式,主要是針對安全性、靈活性與新版本兼容性的改革。
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
这篇文章主要介绍了加密技术的应用有哪些技术?加密技术怎么样?的相关资料,需要的朋友可以参考下本文详细内容介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 目录* 一文了解加密技术的应用有哪些? 一、
Thumbnail
这篇文章主要介绍了加密技术的应用有哪些技术?加密技术怎么样?的相关资料,需要的朋友可以参考下本文详细内容介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码: R851UX3N 目录* 一文了解加密技术的应用有哪些? 一、
Thumbnail
介紹: DOP 是一種區塊鏈隱私協議,在以太坊上運行,使用戶能夠精確管理他們希望分享的資訊(資產持有、交易信息等),主打『您的數據,您的選擇』 項目無融資資料,但推特有大佬追蹤,Kevin Susanto、nftguyy和哥吉拉聯合創辦人shan
Thumbnail
介紹: DOP 是一種區塊鏈隱私協議,在以太坊上運行,使用戶能夠精確管理他們希望分享的資訊(資產持有、交易信息等),主打『您的數據,您的選擇』 項目無融資資料,但推特有大佬追蹤,Kevin Susanto、nftguyy和哥吉拉聯合創辦人shan
Thumbnail
二月份最火熱的話題就是由Pandora團隊開發的ERC-404代幣標準,儘管目前ERC-404不屬於以太坊提案標準,但其結合ERC-20與ERC-721運用的概念,仍為市場帶來新的玩法。
Thumbnail
二月份最火熱的話題就是由Pandora團隊開發的ERC-404代幣標準,儘管目前ERC-404不屬於以太坊提案標準,但其結合ERC-20與ERC-721運用的概念,仍為市場帶來新的玩法。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
以太坊上隱私協議@dop_org白皮書內測試網明牌空投- Tomi代幣持有者- Tomi Pioneers系列NFT持有者-測試網參與者流程:創建錢包領取測試代幣加密-發送-解密代幣Let's go 1⃣創建錢包 網址:https://doptest.dop.org?id=b5tWpB9 流程
Thumbnail
以太坊上隱私協議@dop_org白皮書內測試網明牌空投- Tomi代幣持有者- Tomi Pioneers系列NFT持有者-測試網參與者流程:創建錢包領取測試代幣加密-發送-解密代幣Let's go 1⃣創建錢包 網址:https://doptest.dop.org?id=b5tWpB9 流程
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這篇文章提供了一些資源和平臺,可讓你系統性地學習加密貨幣的知識,並隨著經驗的累積深入瞭解更多進階主題。
Thumbnail
這篇文章提供了一些資源和平臺,可讓你系統性地學習加密貨幣的知識,並隨著經驗的累積深入瞭解更多進階主題。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News