LoginSignup
0
0

More than 5 years have passed since last update.

マルクストーケン:トーケンの例

Last updated at Posted at 2018-10-16

ソルソコード

この記事では、独自のトークンを簡単に作成する方法を紹介します。

MarkusToken.sol
pragma solidity ^0.4.25;


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


contract MarkusToken is IERC20, ERC20Detailed {
  using SafeMath for uint256;

  mapping (address => uint256) private _balances;
  mapping (address => mapping (address => uint256)) private _allowed;
  uint256 private _totalSupply;

  constructor() public ERC20Detailed("Markus Xamuel Viola", "MXV", 18) {
        _balances[msg.sender] = 50000000000;    
        _totalSupply = 60000000000;
  }

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

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

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

  function transfer(address to, uint256 value) public returns (bool) {
    _transfer(msg.sender, 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 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 increaseAllowance(address spender, uint256 addedValue) public returns (bool)
  {
    require(spender != address(0));

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

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

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

  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);
  }

}

討論

このセクションでは、独自のERC20トークンを作成するために、コードスニペットについて説明します。コーディングを始めよう!

ライブラリ

トークンを作成するために3つのライブラリを追加しました。
- IERC20:ERC20トークン標準テンプレート用。
- ERC20Detailed:あなたのトークンをプロファイリングするためのものです。
- SafeMath:最適化された安全な数学演算用。

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

コンストラクタと変数

このセクションでは、3つのプライベート変数を設定しました。
- Balance: ウォレット残高の場合。
- Allowed: 転送制限です。
- Total Supply:トークンの供給量です。

コンストラクターでは、ERC20Detailedに契約を延長して必要な情報を追加しました。
- Name: 通貨の作成者です。
- Symbol: 通貨の名前です。
- Decimal:トークンディバイダ。

コンストラクタは1回だけ実行されるので、私は自分が望む量にバランスを設定できます。 総供給量と同じです。

  mapping (address => uint256) private _balances;
  mapping (address => mapping (address => uint256)) private _allowed;
  uint256 private _totalSupply;

  constructor() public ERC20Detailed("Markus Xamuel Viola", "MXV", 18) {
        _balances[msg.sender] = 50000000000;    
        _totalSupply = 60000000000;
  }

基本

  • balanceOf: Ethereumアドレスのトークンバランスを返します。
  • transfer: 選択した住所に金額を振り替える。
  • approve: 指定されたアドレスが費やすことができるトークンの量を設定します。
  • allowance:私たちに代わってどれくらいの住所が費やされるかを確認する。
  • transferFrom: そのアドレスがいくつかのトークンを使うことを許可されている場合、そこから転送するアドレスを指定します。
  • event Transfer & event Approval: 出力イベントをブロックチェーンに記録します。
  function totalSupply() public view returns (uint256) {
    return _totalSupply;
  }

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

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

  function transfer(address to, uint256 value) public returns (bool) {
    _transfer(msg.sender, 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 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 increaseAllowance(address spender, uint256 addedValue) public returns (bool)
  {
    require(spender != address(0));

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

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

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

  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);
  }

確認する

コードは完成したので、Ethereum Remixでこれを試すことができます。 自分でデプロイしてテストする。
https://remix.ethereum.org/

Contract Address:
0xf88cfe808bdc2fcc50715f08143bae84e4563f3f

My Wallet:
0xda1f876435f34756acda6492b1e061c31d1ae52d (新しいトークンを送ってください!)

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