ETH Price: $2,404.12 (-4.05%)

Transaction Decoder

Block:
8040814 at Jun-27-2019 03:35:39 PM +UTC
Transaction Fee:
0.04215096 ETH $101.34
Gas Used:
2,107,548 Gas / 20 Gwei

Account State Difference:

  Address   Before After State Difference Code
(HTX Mining Pool)
56.265230159778000907 Eth56.307381119778000907 Eth0.04215096
0xDDB34224...9117555c5
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 619142137889483724640304622788864590414334936813523640280412619098515142400826813707533574747644599180433574902241386615768369131757710770450125266825574681148884195011083879481476268062263514910475153160686118438617224231234002502263095527351153077878902760331174357905259589245921272558642021773772859642125721154292916970451279846049082153238149599553387531503193054055747303562641868091062453445546372454823513745521758336093146685082023333235995879599439081031758830517748265324096546695047304999141152857136199637741105635884479077187420717097839863113714135534153879432917261785209344738845189753226003464466342051802634203849734213318752328178857165460543833318844415561646406337642514553514644253968501153672441971661677670595417557719441852693958640965771583052998515368472422781041720747652781477416232286650809730078198416396352758811594080754272281872494781309699471832184810033683026373346890697518681494785960590982738018101371107530904239107765707894082040903844242971754535964859625923889067875867435660062834669715065771064621701369236098439638393104219719779136621548138183917075215759276193597126742961236242946473290385947128206257106246186028963655901645236477833399478423714370992517865859207329368568661429486167876245890923871089204202215724767109424189577722770968928669254529632286549814884306371357346012745924252143062621333058727815459413897577182044122437914912123195254315494196971981212901042286954777152922678766596219602338598686944309469565894467266915767296694643058374751113158792656127367342028581550165485568695454319839050682735414108349862514900086775579990299588659283784885309523633352159543282680990424413792724715973455310038914367809234981671922424418159418728472356490837340957193706828757100421142775267840169465455668917373843311075059361153757684220076389903644114399621243795808560691053235929847924345233795900773502768848303382297387798978762559150778255547779015951395441878771884425549424721222694974364733899946571302157408308011086477935305970560958190224786325769651457548194387907023345610386352382418705561043986474216610336829407891179659359903071643725012595889679707863785052774773580441320392756610530042746037069872610302123709198509443209888614922438014796618786592681655784523370033856728515357146009406058203888924155232387282036929573074360025549973509320170315384934176632082175668596127349763906439432415113994219760866508054333919657918918767748656037508750022675316782185044869577376018921975369928454555535005279720292118232014972242268261223483125690426400258832574164650059603765433271706348992233991023886237409120376856669942076603195390513209293694484426162275460307949730290063636534210407978640071974643455799667920061828379109559629625055417231801178038024139489965589316766668360674112040084219049869368467756529075951615292068145273900897513002675929488569086891018514227407587168506385254715479693497294861006998629313868927005116784685251664137930847377121480446930559503923718659075907340162964780012260688256512963288509923533024826101401494111400042706042567232886718397873536445153736453485755436587503927752029168851097398661602800628822033704534456664919041257339730098948265525748330433450299489311215126111448550710038922217754301924049328127558925285978521987691445435721251856279594951378566119000902960939304696694033396595735382423861536734025497353127117077500398715896782013394247465854535430710994286849934769993451854086458512688110885677008029303605374785190547478246598873479628453552734987410365883786323119632269354469865753075648249777412876112155100936655921824178362547387579224800037324982256030032085972086846757330232786920489113049587643738275412343647779215099396846505779908887578909969378021175162772394311481748704915294925049930186936073976428314208412586556787388485919872554570177799077339311908116223052859032724327679093559598876140702158768877440406061968623934531511278083153412349185157007579548621462110668221378994319414873615741831660522197319674566492026942430361760390083538213200672392745759387259586237551875703886406539083897850139312774034069879056663804244186665875696808064779745915395497228655293260971074488508397052994575265062074796018010436339191125822063613592863120760440915209874232247622256257075189748769027998311680532396957151477054256329582985054881832824161800862882010410083706358803185180305820900485365867418077434890496738318790206337337338428438582454253054640434902142484293998216793009918633925878586435705712290166506922995608125961634866312570635593270701777741848006018572301702417623131388868408574480555007484431278881187742518726509252257841510266277225434659698253659903160086098357514000983312530709450368809712889529873050080280120656631037996854617620165552481851250970785147421892210472637971921844186368766985565684157276003873568142474710180926899006859155364745865440326556032791767449761282822750913852614716548473098466081228328834010884780303794379848217484590479767169994312350419606962018491911070308680359698592485907767242001981777761996166514093566910656574972242776599832630109999434801645656431911306652416675182506241199364157910748627475976555849128348517160730271948790391114483214443005343248259264621501821031137131173106058707481177291591830692009729008758695656793006627145952031159059892312976912543417736948342441992425754696114832753333890540480865210218776185971825960730890698013401868323903427253699247073032712599370896272982877676298227608892569350314629848345331300642157836674770366208401416065524787034331306673831670496349494205853701381290487359144873582042451638496228305456527819100946431824140777220821340012011259476569730340566017084548456031377797260820947417294363531575158920919147095937952402768052755810421531546570369139248296551180478182785875640930912881624469951360007935339785432650369195759674585642039818044333877476051298972931136375367371754697696365357527085937567209576395659772240777147668215799948549052228532368743671999947368843719135364831516276977856657166737733894016464320073671276513009600385665194373432413760084259968530175115678673706348424135779576627182628436275786128127619685304715921929150376566694716969770987576615065526165647261907289347393543797926523288529862726170332244412965452267677868743694287796167238765805090045806406277089657037755939572472469001143005281461680117019048572131780548901109846907746879353876638179626126442568288827015307456769697470968703841465139455259733258239732001334377365706013770137833554864031342643593251896693714315581645055142236478886702104420415356156207978733767562319306531160698809642409436482321579142484549019264263882333959126650770152756071412397892550858007655624629677473678866250475308069644833464970646278716021641456390847767173571031328517000589526681615962687766706317261273384913656665324687051933346992477230898660703762975753329052447230756483364141916682406605435721377486801509233426260945868025080421159405318383867482503660622426868079052953744235252312496320059674136892579623589130958488816049692557353068244157270804961406609561026282023323296846089801251991991349742037001727594556901683507023475781877628939868277616615856502454061935863459324970775066230823880976761596448638233508381857016011722053424729894809108088953094823356706170065406997199411636189357186061186098631843507587857891457827637943254239259498696538273948407318203083270412364232759464083303350900422257736333926282800401763459819661158373322402389056900988623534721201284442579567407267552034113688485790191615076615993582881867154342121169125745135905378610041310709930163991082060640244016579205658462417562673716218325274287691230663490355402286996206979790092402089237595804709024764375607124861427268320192791973487915428732563701812352738810794966582336876077132215898734319813398104055411059161301152294890387225906714857316037265448765108912569081392969160640971040759079649757158482048215697462472112532844757247167085075380007489202185578000194961258081343222371172740001671032737045502649428399424951409494768111857935678473396845395019666073198937974756838957892565954013047201195867095041253417416234325059041132072594250637512686387653266835922080182513872187892535785545852579778676900163994105760666088094084012622671205021352744765473629698939660333706452767808256328422246541122348407180481551071221089060814086395592128233218431819769045292535754127368832652327936070335540778629061309509457663937159693722755350594346471140798926033098169491007745487172003328601649362969465753740923980655275691055716332180473775919849074732252886281655096377544075457698790591827288066237856429210348975740150133179959593692918787041816756721829903572921428737885295438234627738182983894940378765472928408827034206589942475917756875595434273295986578051786540874138968564578068127913748484363265595434278237833117961622841025941686377625399063171515197581969480572599093296056559478135349673940169125187874854720619931361200621972826717721923893960493389431615279067061157421244051260551551808072765561352074816519275886998704637273148265503821590241400830626372574508988011873735357921190308897739253307721444194120275397287687561785445760015898386025635851979023740927426964260524004042076490438287111340214429919076176605892500714799719924732571703211732769924996129238788260712903830050582433654813631131816453928620626298822389166517247344700684179633395570994648583783653954554063792356095580298034234639598942808842803960852734584672350251693343135077330845997561124387026328343057868692463196877799661861475777423601528687279029406030753428715042122201601688375313024750359713887212712429307209239961870956938210377842061275480799740008156668072815455278183270567305119413199002084329274963594182238199994841473498807096763440992301452060408820448708321632425332619529273280829629135625577750864358858887558825059353633704446006463417033598141964352769943806087228506589980749428463173111236967945355838184538530050493690405507735670813806209337452154958910641638015355307110644883321292630085460465122695727819033099247537289327235232122352706945467202877011758084915042311448731456031200715000542790464645215530784089728004186217943245126382166112267938679340891971940891755799823456987043086227074886372648462032104125805404199968054795827044312331392465741911292936648404319383735370828796452735463478357299236567561295281139858077721304280791998395867751441777487455989747469482687633224521299164597924206908785923805835736099030786339600670647933419146189674494559235916431214608845320417888350678378813639236687229878776851703956200574971432032688085506885279857795336496194607364984954235584897786082994780348576638975140570073756299528225312640713084088807004927344498056030698952993385670526573137578701730851291296969329041345955515735582074459501102549117377383841439339003498301929019566236553256429553939738513305900126549148726090409155601206756700392066152798228978460446976078156782570121905405061123785062458450327345341455988960537279468425443336393652363555670354726955474977727734375148110556104863928337570650660465034156805407091905125590990645608085588864365951924553677350928311552385228850902340956278096803756925199320983182646355368197907264003614941847298705469715545278829545504691664144343963628615964472763964000331654802608268591676285020816497580551391049336959643068538450449972508102787349151889176985668575545976257047707745484211403941678900014826899831281065213236225332995089629086404416080972568209024853119551645906868415431594203684124233227359724011335757308142573597758225372577416055519278132610458668550518092276204664927155482528155172868015780995421347708780385416610264456431714055579592507932313068151549460720190888971575194311534472107503378874831441068806219045531969913360540530848425631864466290821248076876911838777817568352235228056577153491903240683098195646525805706855335694536102880194612952409278851979673919937988964339874505213764041158488741455051994276870567967792383478431779398226369749862101912043683689726980639057270165164975202813170915393633416466797287439453466278983553810907231764190758423042425254750259367751183035125564617658606447552405262234461763596214642364687128002971506123077672789839545228621313934196887555363577323496129290978179168252632717516473203895569160668321729781282043836210239334287058605185465819667004628495426695899977357047104366274265434209860503980543397234373208927062262172902145849196139237131024687848899009023954268141374131531390244025094652674674243251982632185170822731748593651759603621768378141389712335106339154026563657841270830399221294351412269677046456174860814968320029926133451124479842333129656072413034434331047128622696103040593011387280060834123146701737134220701488400808539963219366350675416547295594746810548805828054413271835782662213671410798765320079719482336625873649363988161993664053074390926316286171707130738173015454073322639687796325792185718291129395210575811480662456586783077128753770293424932444158377603923897247276132032095869076021532774760301292673812815553896816496718347192268733697229064754085689763454621901319963972079575225278785169970070308239544529930822329628683481301807614142801917368882581320033699861762992383400621007349029177496322881801447969011283560910793479714658993682780122378952041409274080542712920027995331568631239386290088303742809051960382322038178382816083645397684289048019642845530734184123681590265437572198904684659436485622684976698642536863470267119414475330008347354347395504202561436151209836242886229409370780406626317824345694824229688623236731876224841377008417491574904364327475419689699486356706126658503723191150563050843859703085420092927226900472994889076244202305028044653725576524893790410002788196247480448848617104754950621038119673304801124803399424911711104499290368091259105233277509340777762641563126456605395477366555565095076376841348658246392225402386259171006438743382329034327777499580289391746666712432261857082604022989067725574211905182908782127592849831215759232364525363251351773743552311993116691376916271087147943085893926098134097944833149538841882394817607817625487651961357085169593054971115926826653142881741866839486623367011365242267853828363689263261296400732371084383413152576288082192356271641155068794166629851079787400750086675873020073887295132965752427215922585238737528312150809742837602768080757950151733525261684135268462980971524352692370115432098517932317950540063873290445887847594387777482889804087883665190066389013852680816396191236471622108510183490876462259092444225457816453027764160780702655628665095401600389475396278989204474988515412879322396885075094867412087292564523169155290248927723081607682063482875939567897119745612199045687270481349931515356157801690829195012322109565159649386854476981318125497314397326985862360411766621849143568011502702082906086499288046656049328464937168614088379810270040724766322550575369658756468297902488193973426839977650380208588796986957992307103987543096096867468229858472078618822041898453534634973023154009009082242816942330402064117463653992694409852099976743861238817353505199410648697637505418177600425674086782815029001676457671471989344051201091554707855565089648517901791196417600447174377676780046791158458878469855816829573626777803559845004433136024643513934840638339804065007894304746115551038157729817202376218742960342993737220567882599877628252529651522267616648425262980569806502466138684995009872802831292785023684436754334978189789831286228703263466708593524043740794237286732472495877398126497512560168144324097444055338764647522410717539293027241842573426592243164375941321265533087066506075035075890989445045642762557737363106275258410663173554096339311617640138815647411069872007419692734463567983922736180736150595763712070715672229587892847371509251007233625029691179538584169586610462796213755268591374223445889716954746595138652529967650668398917344147289343106861672190612545359952438756252824120075959591047136433696980303951553508031311029606966485651112085865182662606384719550647927215828077907722044118286182523203962562398958565656663147851431576517988401747150164096859677738343664806175337049080190375986434077299257978496484453121486627333573558287665478153032495479367411727521997442862644347442224025725967576003519557287210701868610436429391546916820755611711626269497466054665593073845354530117846761060798442850231812681882017814084195623741369159572655617302100469153045547080991591185117381494654336184396361896340853818793425522748303887344459868806179814641293511044328924839182882521197645900709369080407473567263753647982935372545088687989008950556656674992063327535487675645335395195559504453489963157338521541709128363881398673369087434390078000185842066069271592311995622282198800700337113868041947112219849029634297336874490674187123739103279801244660339811488672383158655875567995486664458720321073814729895083225756071309136792036280455159414631233308488688536646663658168030875795393246057013405876567284400461126674733828648916579071384286151881566798028141205727248173214087996925916343844993020834203668729049818637981655110281925607857356133293538933679043613469018270257258257431020764249160486381258454201513763013007894182427866473301132142501579057321727632556392391940773110926672738848755219204398454231217305175189585104819963829798314461813306409656284508608055201175899436153238486691794035050638358748037417168466740235216371760534556748689713421418041158627483676656131151197654070784570246732700279930982429530072232480712333135514756118182406546535175983241521839201080657149585206264666755887525079222717436350636816912086961787863760853824630591964022467946703422669955919879442347073452372318329073074942645848241323414989895046518207473256435922272349962581719188708611762510853032056634393342601419129211353558249798261207921189726099444694516285528798028841627748043647179780634241065317629604217292091632575603371724011819976486416475867898211935921446675616709879190677360464860332792882973896442453543388355701032390049074909024245361860999665257091364100231075352439314763996728114214589905723309943862652037388351246938234397617690185300036651489897504871623660549862946559599688258222113425144986163984959712486999067950726693154901080476127244963719980584372587784939537654553925957352942815237011768512857469939151835572428864342312894267433
0xE0E42c70...0533E91Ae
(Coti: Deployer)
1.14878844 Eth
Nonce: 0
1.10663748 Eth
Nonce: 1
0.04215096

Execution Trace

Coti.60806040( )
pragma solidity 0.4.24;

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting '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;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

contract HasNoEther is Ownable {

  /**
  * @dev Constructor that rejects incoming Ether
  * @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we
  * leave out payable, then Solidity will allow inheriting contracts to implement a payable
  * constructor. By doing it this way we prevent a payable constructor from working. Alternatively
  * we could use assembly to access msg.value.
  */
  constructor() public payable {
    require(msg.value == 0);
  }

  /**
   * @dev Disallows direct send by settings a default function without the `payable` flag.
   */
  function() external {
  }

  /**
   * @dev Transfer all Ether held by the contract to the owner.
   */
  function reclaimEther() external onlyOwner {
    owner.transfer(address(this).balance);
  }
}

contract Claimable is Ownable {
  address public pendingOwner;

  /**
   * @dev Modifier throws if called by any account other than the pendingOwner.
   */
  modifier onlyPendingOwner() {
    require(msg.sender == pendingOwner);
    _;
  }

  /**
   * @dev Allows the current owner to set the pendingOwner address.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    pendingOwner = newOwner;
  }

  /**
   * @dev Allows the pendingOwner address to finalize the transfer.
   */
  function claimOwnership() onlyPendingOwner public {
    emit OwnershipTransferred(owner, pendingOwner);
    owner = pendingOwner;
    pendingOwner = address(0);
  }
}

contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256) {
    return balances[_owner];
  }

}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view returns (uint256);

  function transferFrom(address from, address to, uint256 value)
    public returns (bool);

  function approve(address spender, uint256 value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    public
    returns (bool)
  {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    emit Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * 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
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(
    address _owner,
    address _spender
   )
    public
    view
    returns (uint256)
  {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(
    address _spender,
    uint _addedValue
  )
    public
    returns (bool)
  {
    allowed[msg.sender][_spender] = (
      allowed[msg.sender][_spender].add(_addedValue));
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(
    address _spender,
    uint _subtractedValue
  )
    public
    returns (bool)
  {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  modifier hasMintPermission() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(
    address _to,
    uint256 _amount
  )
    hasMintPermission
    canMint
    public
    returns (bool)
  {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner canMint public returns (bool) {
    mintingFinished = true;
    emit MintFinished();
    return true;
  }
}

contract BurnableToken is BasicToken {

  event Burn(address indexed burner, uint256 value);

  /**
   * @dev Burns a specific amount of tokens.
   * @param _value The amount of token to be burned.
   */
  function burn(uint256 _value) public {
    _burn(msg.sender, _value);
  }

  function _burn(address _who, uint256 _value) internal {
    require(_value <= balances[_who]);
    // no need to require value <= totalSupply, since that would imply the
    // sender's balance is greater than the totalSupply, which *should* be an assertion failure

    balances[_who] = balances[_who].sub(_value);
    totalSupply_ = totalSupply_.sub(_value);
    emit Burn(_who, _value);
    emit Transfer(_who, address(0), _value);
  }
}

contract Coti is HasNoEther, Claimable, MintableToken, BurnableToken {
    string public constant name = "COTI Token";
    string public constant symbol = "COTI";
    uint8 public constant decimals = 18;

}