Help us understand the problem. What is going on with this article?

簡単なERC-20トークンを作っていること

More than 1 year has passed since last update.

今日はRopstenのテストネット上で簡単なERC-20トークンを作りました。 

コード

samToken.sol
pragma solidity ^0.4.25;

import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol";

contract SamToken is IERC20 {
    using SafeMath for uint256;

    string public name;
    string public symbol;
    uint8 public decimals;
    uint private _totalSupply;

    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowed;

    constructor() public {
        name = "SamToken";
        symbol = "SAM";
        decimals = 18;
        _totalSupply = 100000000000000000000000000;
        _balances[msg.sender] = _totalSupply;
    }

    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }

    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    function _transfer(address from, address to, uint256 value) internal {
        require(value <= _balances[from]);
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(value <= _allowed[from][msg.sender]);

        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        return true;
    }

    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }
}

このコードはOpenZeppelinのトークンコードを基づきます。そして、ERC-20トークン基準に参考にしています。

スタートとConstructor関数

samToken.sol
pragma solidity ^0.4.25;

import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/math/SafeMath.sol";

contract SamToken is IERC20 {
    using SafeMath for uint256;

    string public name;
    string public symbol;
    uint8 public decimals;
    uint private _totalSupply;

    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowed;

    constructor() public {
        name = "SamToken";
        symbol = "SAM";
        decimals = 18;
        _totalSupply = 100000000000000000000000000;
        _balances[msg.sender] = _totalSupply;
    }
    ...
}

最初の行にSolidityのバージョンを入れます。次の行から最後まで、スマートコントラクトは「SamToken」でくくります。このスマートコントラクトはOpenZeppelinのERC-20 Interfaceに相続しています。

Constructor関数に様々な価値を定義しています。例えば、トークンの名前や記号です。そして、全部トークンは自分のwalletに載りました。

基本的な関数

samToken.sol
...
contract SamToken is IERC20 {
    ...
    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }

    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    function _transfer(address from, address to, uint256 value) internal {
        require(value <= _balances[from]);
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(value <= _allowed[from][msg.sender]);

        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        return true;
    }

    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }
}

ERC-20トークン基準による、この関数は必要なです。資産の管理を可能にする。資産の管理を可能にしています。

結論

ERC-20トークンを作っていることが楽しった。たくさん学びました。あなたも作ってください!そして、私のwallet (Ropsten: 0xa7b26038e9e99c2e03ddd2791a3ad4c17b8f8299)にいくつかトークンを送ってください。:smile:

そして、このContract Address (0x517988395aa0743ec1a123826d43a1ad548a1873)にSamTokenを作れります。

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

もっと読む:

sbenemerito
日本語を勉強中の留学生。自らの技術力の向上に関心を持つ、ウェブ開発とシステムの自動化、変化を恐れないエンジニア。主に Python、Javascript 使い。
bit-okutama
外国人ITエンジニア育成を目的とした日本語学校です
http://bit-okutama.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away