构建 ERC20 代币合约
構(gòu)建 ERC20 代幣合約
使用 Contracts,我們可以輕松創(chuàng)建我們自己的 ERC20 代幣合約,該合約將用于跟蹤假設(shè)游戲中的內(nèi)部貨幣黃金(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);} }我們的合約通常通過(guò)繼承使用,在這里我們重用ERC20了基本標(biāo)準(zhǔn)實(shí)現(xiàn)和可選擴(kuò)展。此外,我們正在創(chuàng)建一個(gè)of 令牌,它將被分配到部署合約的地址。namesymboldecimalsinitialSupply
| 有關(guān) ERC20 供應(yīng)機(jī)制的更完整討論,請(qǐng)參閱創(chuàng)建 ERC20 供應(yīng)。 |
而已!部署后,我們將能夠查詢部署者的余額:
> GLDToken.balanceOf(deployerAddress) 1000000000000000000000我們還可以將這些代幣轉(zhuǎn)移到其他賬戶:
> GLDToken.transfer(otherAddress, 300000000000000000000) > GLDToken.balanceOf(otherAddress) 300000000000000000000 > GLDToken.balanceOf(deployerAddress) 700000000000000000000關(guān)于decimals
通常,您會(huì)希望能夠?qū)⒛拇鷰欧殖扇我鈹?shù)量:比如說(shuō),如果您擁有5 GLD,您可能想要發(fā)送1.5 GLD給朋友,并自己保管3.5 GLD。不幸的是,Solidity 和 EVM 不支持這種行為:只能使用整數(shù)(整數(shù)),這會(huì)帶來(lái)問(wèn)題。您可以發(fā)送1或2令牌,但不能1.5。
為了解決這個(gè)問(wèn)題,ERC20提供了一個(gè)decimals字段,用于指定令牌有多少個(gè)小數(shù)位。為了能夠轉(zhuǎn)移1.5 GLD,decimals必須至少是1,因?yàn)樵摂?shù)字只有一個(gè)小數(shù)位。
如何實(shí)現(xiàn)?其實(shí)很簡(jiǎn)單:一個(gè)代幣合約可以使用更大的整數(shù)值,這樣一個(gè)50will的余額代表5 GLD,一個(gè)will的轉(zhuǎn)賬15對(duì)應(yīng)1.5 GLD發(fā)送,等等。
了解decimals僅用于顯示目的很重要。合約內(nèi)部的所有運(yùn)算仍然是對(duì)整數(shù)進(jìn)行的,而且是不同的用戶界面(錢(qián)包、交易所等)必須根據(jù) 調(diào)整顯示的值decimals。每個(gè)賬戶的總代幣供應(yīng)量和余額未在 中指定GLD:您需要除以10 ** decimals得到實(shí)際GLD數(shù)量。
您可能希望使用 的decimals值18,就像 Ether 和大多數(shù)正在使用的 ERC20 代幣合約一樣,除非您有非常特殊的理由不這樣做。在鑄造代幣或轉(zhuǎn)移代幣時(shí),您實(shí)際上是在發(fā)送數(shù)字num GLD * (10 ** decimals)。
| 默認(rèn)情況下,ERC20使用值18for?decimals。要使用不同的值,您需要重寫(xiě)decimals()合約中的函數(shù)。 |
因此,如果您想5使用 18 位小數(shù)的代幣合約發(fā)送代幣,調(diào)用的方法實(shí)際上是:
transfer(recipient, 5 * (10 ** 18));預(yù)設(shè)ERC20合約
可以使用預(yù)設(shè)的 ERC20?ERC20PresetMinterPauser,。它被預(yù)設(shè)為允許代幣鑄造(創(chuàng)建)、停止所有代幣傳輸(暫停)并允許持有者銷毀(銷毀)他們的代幣。該合約使用訪問(wèn)控制來(lái)控制對(duì)鑄造和暫停功能的訪問(wèn)。部署合約的賬戶將被授予 minter 和 pauser 角色,以及默認(rèn)的 admin 角色。
該合約已準(zhǔn)備好部署,無(wú)需編寫(xiě)任何 Solidity 代碼。它可以按原樣用于快速原型設(shè)計(jì)和測(cè)試,但也適用于生產(chǎn)環(huán)境。
鏈接:ERC20 - OpenZeppelin Docs
總結(jié)
以上是生活随笔為你收集整理的构建 ERC20 代币合约的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 转自栖息谷论坛-30岁之前成功12条黄金
- 下一篇: 如果长期玩手机用计算机打字,长期玩手机带