LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-16

今日は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を作れります。

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

もっと読む:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0