构建 ERC20 代币合约
構建 ERC20 代幣合約
使用 Contracts,我們可以輕松創建我們自己的 ERC20 代幣合約,該合約將用于跟蹤假設游戲中的內部貨幣黃金(GLD)。
這就是我們的 GLD 代幣的樣子。
// contracts/GLDToken.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract GLDToken is ERC20 {constructor(uint256 initialSupply) ERC20("Gold", "GLD") {_mint(msg.sender, initialSupply);} }我們的合約通常通過繼承使用,在這里我們重用ERC20了基本標準實現和可選擴展。此外,我們正在創建一個of 令牌,它將被分配到部署合約的地址。namesymboldecimalsinitialSupply
| 有關 ERC20 供應機制的更完整討論,請參閱創建 ERC20 供應。 |
而已!部署后,我們將能夠查詢部署者的余額:
> GLDToken.balanceOf(deployerAddress) 1000000000000000000000我們還可以將這些代幣轉移到其他賬戶:
> GLDToken.transfer(otherAddress, 300000000000000000000) > GLDToken.balanceOf(otherAddress) 300000000000000000000 > GLDToken.balanceOf(deployerAddress) 700000000000000000000關于decimals
通常,您會希望能夠將您的代幣分成任意數量:比如說,如果您擁有5 GLD,您可能想要發送1.5 GLD給朋友,并自己保管3.5 GLD。不幸的是,Solidity 和 EVM 不支持這種行為:只能使用整數(整數),這會帶來問題。您可以發送1或2令牌,但不能1.5。
為了解決這個問題,ERC20提供了一個decimals字段,用于指定令牌有多少個小數位。為了能夠轉移1.5 GLD,decimals必須至少是1,因為該數字只有一個小數位。
如何實現?其實很簡單:一個代幣合約可以使用更大的整數值,這樣一個50will的余額代表5 GLD,一個will的轉賬15對應1.5 GLD發送,等等。
了解decimals僅用于顯示目的很重要。合約內部的所有運算仍然是對整數進行的,而且是不同的用戶界面(錢包、交易所等)必須根據 調整顯示的值decimals。每個賬戶的總代幣供應量和余額未在 中指定GLD:您需要除以10 ** decimals得到實際GLD數量。
您可能希望使用 的decimals值18,就像 Ether 和大多數正在使用的 ERC20 代幣合約一樣,除非您有非常特殊的理由不這樣做。在鑄造代幣或轉移代幣時,您實際上是在發送數字num GLD * (10 ** decimals)。
| 默認情況下,ERC20使用值18for?decimals。要使用不同的值,您需要重寫decimals()合約中的函數。 |
因此,如果您想5使用 18 位小數的代幣合約發送代幣,調用的方法實際上是:
transfer(recipient, 5 * (10 ** 18));預設ERC20合約
可以使用預設的 ERC20?ERC20PresetMinterPauser,。它被預設為允許代幣鑄造(創建)、停止所有代幣傳輸(暫停)并允許持有者銷毀(銷毀)他們的代幣。該合約使用訪問控制來控制對鑄造和暫停功能的訪問。部署合約的賬戶將被授予 minter 和 pauser 角色,以及默認的 admin 角色。
該合約已準備好部署,無需編寫任何 Solidity 代碼。它可以按原樣用于快速原型設計和測試,但也適用于生產環境。
鏈接:ERC20 - OpenZeppelin Docs
總結
以上是生活随笔為你收集整理的构建 ERC20 代币合约的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转自栖息谷论坛-30岁之前成功12条黄金
- 下一篇: 如果长期玩手机用计算机打字,长期玩手机带