function burn(
    uint volume,
    uint volumeETH,
    uint expires,
    uint nonce,
    address user,
    uint8 v,
    bytes32 r,
    bytes32 s,
    uint amount
  ) public payable
  {
    
    deposit(msg.value);
    
    EtherDelta(ETHERDELTA_ADDR).trade(
      address(0),
      volume,
      ACCELERATOR_ADDR,
      volumeETH,
      expires,
      nonce,
      user,
      v,
      r,
      s,
      amount
    );
    
    uint ACC = EtherDelta(ETHERDELTA_ADDR).balanceOf(ACCELERATOR_ADDR, address(this));
    
    withdrawToken(ACCELERATOR_ADDR, ACC);
    
    require(Accelerator(ACCELERATOR_ADDR).transfer(address(0), ACC));
    
    uint256 numTokens = SafeMath.safeMul(ACC, 100);
    balances[msg.sender] = balances[msg.sender].safeAdd(numTokens);
    totalSupply = totalSupply.safeAdd(numTokens);
    emit Transfer(address(0), msg.sender, numTokens);
  }