/// <summary> /// get token erc20 /// </summary> /// <param name="account"></param> /// <returns></returns> /// public async Task <ERC20TokenViewModel> BalanceToken(ERC20Token token, string account) { try { var cont = web3.Eth.GetContract(Constants.Strings.ABI.Abi, token.Address); var eth = cont.GetFunction("balanceOf"); var balance = await eth.CallAsync <BigInteger>(account); return(new ERC20TokenViewModel() { Address = token.Address, Balance = Web3.Convert.FromWei(balance, token.DecimalPlaces), DecimalPlaces = token.DecimalPlaces, Symbol = token.Symbol }); } catch (Exception e) { return(new ERC20TokenViewModel() { Address = token.Address, Balance = 0, DecimalPlaces = token.DecimalPlaces, Symbol = token.Symbol }); } }
public async Task <IActionResult> AddSmartContract([FromBody] UpdateTokenViewModel model) { try { var token = new ERC20Token() { Address = model.Address, Name = model.Name, Symbol = model.Symbol, CreatedDate = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(model.Time), DecimalPlaces = model.DecimalPlaces, WebSiteLink = model.WebSiteLink, Type = "default" }; _dbContext.Erc20Tokens.Add(token); await _dbContext.SaveChangesAsync(); return(new OkResult()); } catch (Exception e) { return(BadRequest(e.Message)); } }
public static Amount GetERC20Balance(Address address, ERC20Token token, Revision revision) { var contractAddr = token.ContractAddress; var currRevision = revision ?? Revision.BEST; var abiDefinition = ERC20Contract.DefaultERC20Contract.FindAbiDefinition("balanceOf"); var call = AbstractContract.BuildCall(abiDefinition, address.ToHexString(null)); var contractCallResult = CallContract(call, contractAddr, currRevision); return(contractCallResult?.GetBalance(token)); }
public async Task <List <CustomEventLog> > GetFullEventLogs(ERC20Token contract, int lastBlockNumber, int blocknum = 1) { var cont = web3.Eth.GetContract(Constants.Strings.ABI.Abi, contract.Address); var transEvent = cont.GetEvent("Transfer"); var logs = new List <EventLog <Transfer> >(); var events = new List <CustomEventLog>(); for (var i = blocknum; i <= lastBlockNumber; i += 100) { if ((i + 99) > lastBlockNumber) { break; } try { var filter = transEvent.CreateFilterInput(new BlockParameter((ulong)i), new BlockParameter((ulong)(i + 99))); var log = transEvent.GetAllChanges <Transfer>(filter).Result; logs.AddRange(log); } catch (Exception e) { i -= 100; } } BlockWithTransactions block = null; foreach (var log in logs) { if (block == null || log.Log.BlockNumber.Value != block.Number.Value) { block = web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync( new HexBigInteger(log.Log.BlockNumber)).Result; } events.Add(new CustomEventLog() { ERC20TokenId = contract.Id, From = log.Event.AddressFrom, To = log.Event.AddressTo, AmountOfToken = Web3.Convert.FromWei(log.Event.Value, contract.DecimalPlaces), WhenDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds( (long)(block.Timestamp.Value)), BlockNumber = (int)log.Log.BlockNumber.Value }); } return(events); }
public async Task <IActionResult> UpdateSmartContract([FromBody] ERC20Token model) { try { _dbContext.Erc20Tokens.Update(model); await _dbContext.SaveChangesAsync(); return(new OkResult()); } catch (Exception e) { return(BadRequest(e.Message)); } }