#openzeppelin
#ERC20
#ERC20Burnable

OpenZeppelinのERC20Burnableの目的

こんにちはJPです。(https://twitter.com/salvacion_jp)

トピックはERC20Burnableについてです。This article tackles how tokens are issued and burned.


OpenZeppelin

This is a library for secure smart contract development.

https://github.com/OpenZeppelin/openzeppelin-solidity


ERC20Burnableとは

これは不可逆的に焼けたされた可能性のあるトークンです。

Source: token/ERC20/ERC20Burnable.sol


ERC20BurnableのFunction


_burn

Overrides ERC20._burn in order for burn and burnFrom to emit an additional Burn event.

引数:

who - address

value - uint256

function _burn(address who, uint256 value) internal


burn

Burns a specific amount of tokens.

引数:

value - The amount of token to be burned.

function burn(uint256 value) public


burnFrom

Burns a specific amount of tokens from the target address and decrements allowance.

引数:

from - address The address which you want to send tokens from

value - uint256 The amount of token to be burned

function burnFrom(address from, uint256 value) public

https://openzeppelin.org/api/docs/token_ERC20_ERC20Burnable.html


ERC20Burnableの必要性


Scalability and Security

トークンの作成中に、トークンの初期供給が定義される。 すべては当初契約作成者に属します。Function は、契約作成者だけが呼び出し可能で、呼び出されるとさらに多くのトークンを発行します。

これからの新しいトークンは、まず契約作成者になります。


Issue and Burn

function issueTokens(uint256 extraTokens) public{

// Make sure only the contract creator can call this

require(msg.sender == creator);

balances[msg.sender] = balances[msg.sender].add(_extraTokens);

//We have to emit an event for each token that gets created

for(uint i = maxId.add(1); i <= maxId.add(
extraTokens); i++){

emit Transfer(0x0, creator, i);

}

maxId += _extraTokens; //<- SafeMath for this operation

// was done in for loop above

}

As per the article, in both the cases of addition add function from SafeMath was used so that it would not result to a huge value of _extraTokens.

function burnToken(uint256 tokenId) external{

address owner = ownerOf(_tokenId);

require ( owner == msg.sender

|| allowance[_tokenId] == msg.sender

|| authorised[owner][msg.sender]

);

burned[
tokenId] = true;

balances[owner]--;

emit Transfer(owner, 0x0, _tokenId);

}


Summary

ERC 721のトークンは、より具体的なものを表します。トークンホルダーがより多くのトークンを作成できるようにしたくない場合、functionを使います。

https://medium.com/coinmonks/jumping-into-solidity-the-erc721-standard-part-3-5f38e012248b

ありがとうございました。