ETH Price: $3,785.67 (+0.09%)
Gas: 4 Gwei

Transaction Decoder

Block:
11542663 at Dec-28-2020 01:13:41 PM +UTC
Transaction Fee:
0.189652078 ETH $717.96
Gas Used:
1,231,507 Gas / 154 Gwei

Emitted Events:

Account State Difference:

  Address   Before After State Difference Code
0x2e6b6362...226CEeEC5
5.997501 Eth
Nonce: 1
5.752467242 Eth
Nonce: 2
0.245033758
0x6603cb70...6F53F4f42 13.321332891770129214 Eth13.376714571770129214 Eth0.05538168
0xDD68d49f...bB03E4B31
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 227303252855338045385141322898015160594921894093307559572562963182277992639352768972196740600366983986586247029714570522276559084300412827783915464852139333946543378912545619982425960631586202568878420590534820316793801710937750767418535246835803059590368012058784373096268126925667308016517187082856456738428052761317746338795723659826520613944581100785098149004485581987709991178996317792272545963358510298642855844196314756360714737983016046944102528822312251040150578513656334651911216226820649666441299912220334918745035936271306171952680079151718929721295096925592986957024849021699767274303866544539573568502499272060993537377152294058099890739855240292626915098249876744280251513500068753054265188498668963205910175004046779609444749961386165713023483555848654297974834391421167770599322264981481046355258196875638107350664977117581509842528115786327585700876436727686589237406728366229013957124960981570887892304978003449411501769462325735830845087856621275312294490311815654354796451778783074534251180396133550634440198306228626181410387587020209317060961192944373445525578195830225887133226179818890734830347891630872892756463064803876303186732743292132307610046215486440501917481995803254612556786296725427779993396115587780401707866756150786750673060099217784567692050674191788162325001717639481859880785463175865260336494314977209773183960381207334099822675222400231344819655303293170924616810366223970168222590512294048181533876481012323371143633840365922045731822500237732516313835271162181283042854729194032784979248641863803346220547328442020661077596376218552203111696864422562885137205264178701071538571135390554771554973374369714730764826169724740644743431529945645918366963223895067996658598905300443585777234791039837376418285877044945721961956450239384495544233347520639340295300851941387596956797309125608502966254016302615080681174173148276679151336806817484937027176986531553681726265325362835193894203021298221805129475014245034810006746713239545556878100920617675774111597568841842524715778812632171793551155987843236842014478502274550524031132401877067541430695786007692883592365058831577216202302903165136328122142749269960361099982432128301799069058626717330183513566229611783671765939583424808700800586079616954285565453896783355033592951468014313838203579635121423779838826220745389063342097001729048303969395418724515703439283464937772290570895496329762939860997583135235950240550776278161731380183072397437471725413570595513646865365296438823322080845528710115737972163685644759873595198414371156225127711386639069304281981111558629545854691743082154769026559035512433631999244313846841016938543245936900116095103097815042242978997102747958316070387189387526806528201873552902524946154076820450161545426180968374852458926094481252327059908216756115997676650736525896050657892468321258718635582669773626105886882334528980261555090899101396959625381569184944430761221181259836803450696562321295301436897638726212128739241148301232265304465123571280088913799712109264457883278080495939302006898557400692773260635287392077253559057950173096416609980851561094709409308512968338041932234345418314036528778056756163846171002794077063894734392753221535994063629231166203408955688481234321075829796746273247203344728993820339635160618125277340658441170301542450955088173930338370173619844099019058406242292506924112756232014620365294631470076910468899955122877603247944821218750357546979059058201552006699290953556361765905127946874670640446622500736886159129664763998413131591142030836035165004011316208649283054008763795498637036159514343284910800334239921376634856385157787856128692932956356302050814023791038394925996513153362990485313493307608493623426505491387457759623325805007983713474701142661035285557063557541290874809656076897289354685310130653304498955466715351398550753052712185074344611841589075345326141111512493492619177577805474575653277984462233999792958048419165725099976527445316086153360061415736049268711334283191395664600817090184957948658715699412341122609347770289300058900954901551161138330567195001750936897960314949124208805494315375706324288352619775294015722872124061273092894382243676319910014003708231282420004416321897000381577213874014390942991844181494161272767616464482443552153934078569932196466036768693391396446799694300412578721975827255328701563195671769347376697599410815237083203428039737099636231230036838444720348964916805249410473974527461217771161224241060015012780709929283728381010284907197982007773379866831869429983980124294618943310216513703808481059484202064933270298026534472202251462807031654136937097254670714318572482604328057305936380375727135146069600329809342341458169724691771260765656124534555794403210093837415328014653927199042488075991739119150289831710090750129769153282987783125846688877369463800390376543579818275585928983328791232218246502906154887447272631088802321187559595386055373711492568853890495881658649323241897529669785723568557141116640596098319082423336638099655336169762057832501628280613920156343251420458828718870644298479129989704300997868135964046020312757180715490853439470477112321448285415982587503726111509444439776149725499515574731347267570281325225111967369846354105304265547568057197068172339390866389234517317917988902766246036780067735760900164773335694384164627736337182216018997775801133063449633906966164264633034462203752579022848619512998039747020992777177253732507974999780326708120443804449375884660161240199882619791718721344448897436774337810688289550326111954838152826210778048494132769099181625179481760626612441846703604590864335759346174735868920490400312457043723531885525130271930403608114573415872696452288684854995421072426471520862006033365914309787451169356542070283862925406418120660447899659588067168848075236252291253931428033173958494009474489054117732254911702727576749548263748611072452204231822202473614891414241256103339615513037539204447728134196464669742646424882982705402295975765324145057211785422049479576964934504226614877834060842397460678099102028372868900385666906429805506417490523245420737356356118321882993541239472795478026481165867586445243584170203127994933023707813608266953992368896542266476777030895916934929657469849735361740390825602964250785764371226096333811190258576234868535690501633837601737019634588263453930598301161406361108888702156832431631874372326150221968980168967053323936520925686892585404645004107458319491992518838979793260853054034937733281682510822331987043829325498772438378561205169419859206815040011409868174475457651556191251784988880901969268480707890779198223797313240406485246265617917226202668812552855525905701439764499544298506774005128150118613347900296824529143518572235001162380864973998582576991988220199741973489729009885097448706780524245978442837349150320089374833894989670935772181530030780250582410704862911097941154655565688927652657124801872922732197832177273368482902511192279735505982984587918376963681770679528979751466490385569651086886656028961152991210636506835627638849177545165048702432630086839989878287526539754819593721066890983448222358615203293984685899949984685874353259558225520393020049564863792345459119388965289432718831590733518745968595488186400769474658043793574926336370690224759747833133804219125223719297785703962262754684053246994545724907024062732039725259459399054201208451977486330353213273236377930213638602342756083060197768447903212627942889110617244073940625417343850823194816280865188101983891534473047136054561194057681007334908802909061636230353858545535795493211684222097752489490582232309663201340287953750030664029904169062705401906095104964309071463032163338442194681560667267917868228131824087844102007660154089842040363836460238397889239406705040100069035833138295807970698099985062226765316026817277928424778239817594131359314842916510578379709581533977436389113317003896518118451756926003597065457180359960999920944712764652928756680264466746819748444365165516294231061357585103621172640658527708527713817234760336301081376152301986780035841482646884893264733222122467727765841428653480151057759680981613857434391690727146014432022960565552878931540041431710695170025545261236733069247123808600051821763628087647330331369462147563481687602863015862638637155342935771828985343672494189886474642504748903022946500490621012744439891226458015447739622773622464087056689248338448513838216475979379506460154466575819106615497642749320523597846231355794500105424222847444973578765745631393135293169978948713456693667762045651594823098852111534602638863323148389184538639944760805040171354659271535794644566942657998675191916461654251280091783984933063675243178109645296139564036999724731426042858568263893051319461979837697459658877821973939050576970924216019068670554542928108976968636898355456891758410926988753436928783219724987121957039396094623390955577273063908885298595022566518856315327788446810314502082095771927452309347792572011506777944693295367362180366573051322406001376615177028989086781176458320138751861848234708717168350451405189640620313949452366441876157370993774948280184794838447183979254280019527017532413412741176213877284013318532197000188037914017811004721119778634711050192756351257969359933663433203984775989759877660365230950235830334764439276097957343946930551644754879027179114365741453410104363957326399966415440836013328435758731808758652187185891694546058310444608396384915827690941911320491848806346314484184552110327270118620142471374860210120444008603881926337618659608082638439894890728541843543705040751414622684085280867509065767533650803327536016927229854683759449122614374174165955089753584274485360010628909913650598085941368725755552213039687860271225916261620046014494802671094806718345668019229239645215877766449888186016697106273336518878857497521397312935549878812300528322855998147586986310293205924855262802502182300284255038979714619621557330479124574617184950701032770650443291405380956533357785451341642089553568497684905100334328068343611262294634691808130382520622834969252238499669671361210790151885329701143426018688389827988493421769830662250322447374058800252973364205584763676017851504931564944214479613199850473816969363321021605881033418205115455312524891327568540012028755137992172464624035396338369980778936625026906991940027887997826028579204539056653057055558818781517802957876426402987130980502465867728387263821311185103102169592816203227157261623314286089877145253401541227921491861745529190517683030441172565045230143606504959648186187314180722279230388329292772316121179915400187495329450676377100993233505164621398411442977781985264694011520257761661150988750222771449438250253754781061445481715559668453905333366725407271942596802714437502400268318693775671733334402194797187190217147346513468858101816588329066544436384268585564147383836183811861681006068278775983255300634710377881792844716512078995771516042128776546627876084006944314036308946694688670501404541543092267481346362882257236174626782335949047944014411005214608599952946741025651642967825720130023199705263603218568009172958000124461999768790938972891227676721782660780999780511707051011701553103838776888383855048424121083504701089362699969012700156876426382734734748539612054006022997711938577082807054716736325374313003485187457484690848297748557311574098110619150864166040652599893496757529271903944677338620228960038038146361634331000645265090432097668659220326998540899836252547155301255165199224874419196121045871179196448897602131984186746358194441195673927065021550903580481007299190101922504929999218798896797386377044150533435170531081440870561966877242693173169229657694429141408203008062766119364175262779433828805776405212504183114355493015556110642402347160075288603253726913856864297
52.968128381172067037 Eth53.157780459172067037 Eth0.189652078

Execution Trace

ETH 0.05538168 TokenMintERC20Token.60806040( )
  • ETH 0.05538168 0x6603cb70464ca51481d4edbb3b927f66f53f4f42.CALL( )
    // File: contracts\open-zeppelin-contracts\token\ERC20\IERC20.sol
    
    pragma solidity ^0.5.0;
    
    /**
     * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
     * the optional functions; to access them see `ERC20Detailed`.
     */
    interface IERC20 {
        /**
         * @dev Returns the amount of tokens in existence.
         */
        function totalSupply() external view returns (uint256);
    
        /**
         * @dev Returns the amount of tokens owned by `account`.
         */
        function balanceOf(address account) external view returns (uint256);
    
        /**
         * @dev Moves `amount` tokens from the caller's account to `recipient`.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a `Transfer` event.
         */
        function transfer(address recipient, uint256 amount) external returns (bool);
    
        /**
         * @dev Returns the remaining number of tokens that `spender` will be
         * allowed to spend on behalf of `owner` through `transferFrom`. This is
         * zero by default.
         *
         * This value changes when `approve` or `transferFrom` are called.
         */
        function allowance(address owner, address spender) external view returns (uint256);
    
        /**
         * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * > Beware that changing an allowance with this method brings the risk
         * that someone may use both the old and the new allowance by unfortunate
         * transaction ordering. One possible solution to mitigate this race
         * condition is to first reduce the spender's allowance to 0 and set the
         * desired value afterwards:
         * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
         *
         * Emits an `Approval` event.
         */
        function approve(address spender, uint256 amount) external returns (bool);
    
        /**
         * @dev Moves `amount` tokens from `sender` to `recipient` using the
         * allowance mechanism. `amount` is then deducted from the caller's
         * allowance.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a `Transfer` event.
         */
        function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
        /**
         * @dev Emitted when `value` tokens are moved from one account (`from`) to
         * another (`to`).
         *
         * Note that `value` may be zero.
         */
        event Transfer(address indexed from, address indexed to, uint256 value);
    
        /**
         * @dev Emitted when the allowance of a `spender` for an `owner` is set by
         * a call to `approve`. `value` is the new allowance.
         */
        event Approval(address indexed owner, address indexed spender, uint256 value);
    }
    
    // File: contracts\open-zeppelin-contracts\math\SafeMath.sol
    
    pragma solidity ^0.5.0;
    
    /**
     * @dev Wrappers over Solidity's arithmetic operations with added overflow
     * checks.
     *
     * Arithmetic operations in Solidity wrap on overflow. This can easily result
     * in bugs, because programmers usually assume that an overflow raises an
     * error, which is the standard behavior in high level programming languages.
     * `SafeMath` restores this intuition by reverting the transaction when an
     * operation overflows.
     *
     * Using this library instead of the unchecked operations eliminates an entire
     * class of bugs, so it's recommended to use it always.
     */
    library SafeMath {
        /**
         * @dev Returns the addition of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `+` operator.
         *
         * Requirements:
         * - Addition cannot overflow.
         */
        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            uint256 c = a + b;
            require(c >= a, "SafeMath: addition overflow");
    
            return c;
        }
    
        /**
         * @dev Returns the subtraction of two unsigned integers, reverting on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         * - Subtraction cannot overflow.
         */
        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            require(b <= a, "SafeMath: subtraction overflow");
            uint256 c = a - b;
    
            return c;
        }
    
        /**
         * @dev Returns the multiplication of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `*` operator.
         *
         * Requirements:
         * - Multiplication cannot overflow.
         */
        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
            if (a == 0) {
                return 0;
            }
    
            uint256 c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");
    
            return c;
        }
    
        /**
         * @dev Returns the integer division of two unsigned integers. Reverts on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            // Solidity only automatically asserts when dividing by 0
            require(b > 0, "SafeMath: division by zero");
            uint256 c = a / b;
            // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    
            return c;
        }
    
        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            require(b != 0, "SafeMath: modulo by zero");
            return a % b;
        }
    }
    
    // File: contracts\open-zeppelin-contracts\token\ERC20\ERC20.sol
    
    pragma solidity ^0.5.0;
    
    
    
    /**
     * @dev Implementation of the `IERC20` interface.
     *
     * This implementation is agnostic to the way tokens are created. This means
     * that a supply mechanism has to be added in a derived contract using `_mint`.
     * For a generic mechanism see `ERC20Mintable`.
     *
     * *For a detailed writeup see our guide [How to implement supply
     * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
     *
     * We have followed general OpenZeppelin guidelines: functions revert instead
     * of returning `false` on failure. This behavior is nonetheless conventional
     * and does not conflict with the expectations of ERC20 applications.
     *
     * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
     * This allows applications to reconstruct the allowance for all accounts just
     * by listening to said events. Other implementations of the EIP may not emit
     * these events, as it isn't required by the specification.
     *
     * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
     * functions have been added to mitigate the well-known issues around setting
     * allowances. See `IERC20.approve`.
     */
    contract ERC20 is IERC20 {
        using SafeMath for uint256;
    
        mapping (address => uint256) private _balances;
    
        mapping (address => mapping (address => uint256)) private _allowances;
    
        uint256 private _totalSupply;
    
        /**
         * @dev See `IERC20.totalSupply`.
         */
        function totalSupply() public view returns (uint256) {
            return _totalSupply;
        }
    
        /**
         * @dev See `IERC20.balanceOf`.
         */
        function balanceOf(address account) public view returns (uint256) {
            return _balances[account];
        }
    
        /**
         * @dev See `IERC20.transfer`.
         *
         * Requirements:
         *
         * - `recipient` cannot be the zero address.
         * - the caller must have a balance of at least `amount`.
         */
        function transfer(address recipient, uint256 amount) public returns (bool) {
            _transfer(msg.sender, recipient, amount);
            return true;
        }
    
        /**
         * @dev See `IERC20.allowance`.
         */
        function allowance(address owner, address spender) public view returns (uint256) {
            return _allowances[owner][spender];
        }
    
        /**
         * @dev See `IERC20.approve`.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         */
        function approve(address spender, uint256 value) public returns (bool) {
            _approve(msg.sender, spender, value);
            return true;
        }
    
        /**
         * @dev See `IERC20.transferFrom`.
         *
         * Emits an `Approval` event indicating the updated allowance. This is not
         * required by the EIP. See the note at the beginning of `ERC20`;
         *
         * Requirements:
         * - `sender` and `recipient` cannot be the zero address.
         * - `sender` must have a balance of at least `value`.
         * - the caller must have allowance for `sender`'s tokens of at least
         * `amount`.
         */
        function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
            return true;
        }
    
        /**
         * @dev Atomically increases the allowance granted to `spender` by the caller.
         *
         * This is an alternative to `approve` that can be used as a mitigation for
         * problems described in `IERC20.approve`.
         *
         * Emits an `Approval` event indicating the updated allowance.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         */
        function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
            _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
            return true;
        }
    
        /**
         * @dev Atomically decreases the allowance granted to `spender` by the caller.
         *
         * This is an alternative to `approve` that can be used as a mitigation for
         * problems described in `IERC20.approve`.
         *
         * Emits an `Approval` event indicating the updated allowance.
         *
         * Requirements:
         *
         * - `spender` cannot be the zero address.
         * - `spender` must have allowance for the caller of at least
         * `subtractedValue`.
         */
        function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
            _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
            return true;
        }
    
        /**
         * @dev Moves tokens `amount` from `sender` to `recipient`.
         *
         * This is internal function is equivalent to `transfer`, and can be used to
         * e.g. implement automatic token fees, slashing mechanisms, etc.
         *
         * Emits a `Transfer` event.
         *
         * Requirements:
         *
         * - `sender` cannot be the zero address.
         * - `recipient` cannot be the zero address.
         * - `sender` must have a balance of at least `amount`.
         */
        function _transfer(address sender, address recipient, uint256 amount) internal {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");
    
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
    
        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
         * the total supply.
         *
         * Emits a `Transfer` event with `from` set to the zero address.
         *
         * Requirements
         *
         * - `to` cannot be the zero address.
         */
        function _mint(address account, uint256 amount) internal {
            require(account != address(0), "ERC20: mint to the zero address");
    
            _totalSupply = _totalSupply.add(amount);
            _balances[account] = _balances[account].add(amount);
            emit Transfer(address(0), account, amount);
        }
    
         /**
         * @dev Destroys `amount` tokens from `account`, reducing the
         * total supply.
         *
         * Emits a `Transfer` event with `to` set to the zero address.
         *
         * Requirements
         *
         * - `account` cannot be the zero address.
         * - `account` must have at least `amount` tokens.
         */
        function _burn(address account, uint256 value) internal {
            require(account != address(0), "ERC20: burn from the zero address");
    
            _totalSupply = _totalSupply.sub(value);
            _balances[account] = _balances[account].sub(value);
            emit Transfer(account, address(0), value);
        }
    
        /**
         * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
         *
         * This is internal function is equivalent to `approve`, and can be used to
         * e.g. set automatic allowances for certain subsystems, etc.
         *
         * Emits an `Approval` event.
         *
         * Requirements:
         *
         * - `owner` cannot be the zero address.
         * - `spender` cannot be the zero address.
         */
        function _approve(address owner, address spender, uint256 value) internal {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");
    
            _allowances[owner][spender] = value;
            emit Approval(owner, spender, value);
        }
    
        /**
         * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
         * from the caller's allowance.
         *
         * See `_burn` and `_approve`.
         */
        function _burnFrom(address account, uint256 amount) internal {
            _burn(account, amount);
            _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
        }
    }
    
    // File: contracts\ERC20\TokenMintERC20Token.sol
    
    pragma solidity ^0.5.0;
    
    
    /**
     * @title TokenMintERC20Token
     * @author TokenMint (visit https://tokenmint.io)
     *
     * @dev Standard ERC20 token with burning and optional functions implemented.
     * For full specification of ERC-20 standard see:
     * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
     */
    contract TokenMintERC20Token is ERC20 {
    
        string private _name;
        string private _symbol;
        uint8 private _decimals;
    
        /**
         * @dev Constructor.
         * @param name name of the token
         * @param symbol symbol of the token, 3-4 chars is recommended
         * @param decimals number of decimal places of one token unit, 18 is widely used
         * @param totalSupply total supply of tokens in lowest units (depending on decimals)
         * @param tokenOwnerAddress address that gets 100% of token supply
         */
        constructor(string memory name, string memory symbol, uint8 decimals, uint256 totalSupply, address payable feeReceiver, address tokenOwnerAddress) public payable {
          _name = name;
          _symbol = symbol;
          _decimals = decimals;
    
          // set tokenOwnerAddress as owner of all tokens
          _mint(tokenOwnerAddress, totalSupply);
    
          // pay the service fee for contract deployment
          feeReceiver.transfer(msg.value);
        }
    
        /**
         * @dev Burns a specific amount of tokens.
         * @param value The amount of lowest token units to be burned.
         */
        function burn(uint256 value) public {
          _burn(msg.sender, value);
        }
    
        // optional functions from ERC20 stardard
    
        /**
         * @return the name of the token.
         */
        function name() public view returns (string memory) {
          return _name;
        }
    
        /**
         * @return the symbol of the token.
         */
        function symbol() public view returns (string memory) {
          return _symbol;
        }
    
        /**
         * @return the number of decimals of the token.
         */
        function decimals() public view returns (uint8) {
          return _decimals;
        }
    }