github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/test/test_ERC20.js (about)

     1  // Copyright (C) 2017 go-nebulas authors
     2  //
     3  // This file is part of the go-nebulas library.
     4  //
     5  // the go-nebulas library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // the go-nebulas library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  // GNU General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU General Public License
    16  // along with the go-nebulas library.  If not, see <http://www.gnu.org/licenses/>.
    17  //
    18  'use strict';
    19  
    20  
    21  
    22  var StandardToken = function () {
    23      LocalContractStorage.defineProperties(this, {
    24          name: null,
    25          symbol: null,
    26          _totalSupply: null,
    27          totalIssued: null
    28      });
    29      LocalContractStorage.defineMapProperty(this, "balances");
    30  };
    31  
    32  StandardToken.prototype = {
    33      init: function (name, symbol, totalSupply) {
    34          this.name = name;
    35          this.symbol = symbol;
    36          this._totalSupply = totalSupply;
    37          this.totalIssued = 0;
    38      },
    39      totalSupply: function () {
    40          return this._totalSupply;
    41      },
    42      balanceOf: function (owner) {
    43          return this.balances.get(owner) || 0;
    44      },
    45      transfer: function (to, value) {
    46          var balance = this.balanceOf(msg.sender);
    47          if (balance < value) {
    48              return false;
    49          }
    50  
    51          var finalBalance = balance - value;
    52          this.balances.set(msg.sender, finalBalance);
    53          this.balances.set(to, this.balanceOf(to) + value);
    54          return true;
    55      },
    56      pay: function (msg, amount) {
    57          if (this.totalIssued + amount > this._totalSupply) {
    58              throw new Error("too much amount, exceed totalSupply");
    59          }
    60          this.balances.set(msg.sender, this.balanceOf(msg.sender) + amount);
    61          this.totalIssued += amount;
    62      }
    63  };
    64  
    65  var token = new StandardToken();
    66  
    67  // init.
    68  console.log('test: init...');
    69  var assertInitStatus = function (instance) {
    70      console.log('test: verify init...');
    71      if (instance.name !== "Nebulas") {
    72          throw new Error("name should be Nebulas, but is " + instance.name);
    73      }
    74  
    75      if (instance.symbol !== "NAS") {
    76          throw new Error("symbol should be NAS, but is " + instance.symbol);
    77      }
    78  
    79      if (instance._totalSupply !== 1000000) {
    80          throw new Error("totalSupply should be 1000000, but is " + instance._totalSupply);
    81      }
    82  
    83      if (instance.totalIssued !== 0) {
    84          throw new Error("totalIssued should be 0, but is " + instance.totalIssued);
    85      }
    86  };
    87  token.init("Nebulas", "NAS", 1000000);
    88  assertInitStatus(token);
    89  assertInitStatus(new StandardToken()); // assert status for new instance.
    90  
    91  // balance.
    92  console.log('test: pay...');
    93  
    94  var assertAfterPayStatus = function (instance) {
    95      console.log('test: verify pay...');
    96      if (instance.totalIssued !== 12) {
    97          throw new Error("totalIssued should be 12, but is " + instance.totalIssued);
    98      }
    99  
   100      if (instance.balanceOf(msg.sender) !== 12) {
   101          throw new Error("robin's balance should be 12, but is " + instance.balanceOf(msg.sender));
   102      }
   103  };
   104  const msg = {
   105      sender: 'robin'
   106  };
   107  token.pay(msg, 12);
   108  assertAfterPayStatus(token);
   109  assertAfterPayStatus(new StandardToken()); // assert status for new instance.
   110  
   111  console.log('test: pay exceed error...');
   112  var err = new Error("exceed amount should throw exception, but not");
   113  try {
   114      token.pay(msg, 999989);
   115  } catch (e) {
   116      if (e == err) {
   117          throw e;
   118      }
   119  }