剛好有個夥伴問到 total supply 可不可以調整,那今天我們就來談談可以隨時發行新的 token 數量的合約吧!且還需要實作可以控制誰能發行的 modifier 呢!
接下來幾天都會是預錄的方式,因為目前我在河口湖旅遊中XDDDD 網路不是很好,需要先錄好提前上傳影片才行QQ
browser/ERC20.sol 請參考昨天的文章。
本日合約:
pragma solidity ^0.4.25;
import "browser/ERC20.sol";
contract Mintable is ERC20 {
address private owner;
mapping (address => bool) minters;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier onlyMinter() {
require(minters[msg.sender]);
_;
}
function addMinter(address addr) public onlyOwner returns (bool) {
minters[addr] = true;
return true;
}
function mint(address to, uint256 tokens) public onlyMinter returns (bool) {
// 增加 total supply
_totalSupply = _totalSupply.add(tokens);
// 轉移新增出來的 token 到某人身上
_balances[to] = _balances[to].add(tokens);
emit Transfer(address(0), to, tokens);
return true;
}
}
本日影片:
https://youtu.be/t96vTnAJ4HM
Smart Contract 實戰教學播放清單:
https://www.youtube.com/playlist?list=PLHmOMPRfmOxSJcrlwyandWYiuP9ZAMYoF
想請問一下 _totalSupply這行 會顯示錯誤 : DeclarationError : Undeclared identifier. _totalSupple =......
是否可以把ERC20.sol 的 uint256 private _totalSupply改成public
謝謝
tommy70927 我也遇到相同問題,我改成 internal
。
因為繼承的關係,改成是 internal
。就可以解決了
hydai 有個疑問,這樣 minter 不就可以一直呼叫 mint() 幫自己加薪?
在這個例子裡確實是如此,不過一定有某些人有權進行 mint
,你可以設計不同的權限來讓特定人士呼叫 mint
。
hydai 了解~ 感謝回覆!
那在真實的例子裡面,通常是一群 verifier 驗證真的有挖到幣後再進行 mint
的動作嗎?
不一定,就各個組織都有他們自己的做法。
通常都需要有理由的增發,不然會讓供給總量出問題