コード例 #1
0
        /// <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
                });
            }
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
            }
        }