Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Nethereum.ABI.FunctionEncoding.Attributes;
- using Nethereum.Contracts.CQS;
- using Nethereum.Util;
- using Nethereum.Web3;
- using Nethereum.Web3.Accounts.Managed;
- using System;
- using System.Numerics;
- using System.Threading.Tasks;
- using Nethereum.Hex.HexTypes;
- using Nethereum.RPC.Eth.DTOs;
- namespace SwapperCore.Code
- {
- public class ERC20Protocol
- {
- public static string Web3Uri = "http://207.154.203.138:8001/";
- private readonly Web3 _web3;
- private readonly Nethereum.Contracts.Contract _contract;
- private readonly ITokenData _tokenData;
- public ERC20Protocol(Tokens token)
- {
- _tokenData = TokenRepository.Get(token);
- if (_tokenData == null)
- throw new ArgumentException("Specified token not found");
- _web3 = new Web3(new ManagedAccount(_tokenData.CreatedByAddress, _tokenData.CreatorPassphrase), Web3Uri);
- _contract = _web3.Eth.GetContract(_tokenData.ABI, _tokenData.Address);
- }
- public async Task<decimal> BalanceOfAsync(string address)
- {
- var balanceOfFunctionMessage = new BalanceOfFunction()
- {
- Owner = address
- };
- var balanceHandler = _web3.Eth.GetContractQueryHandler<BalanceOfFunction>();
- var balance = await balanceHandler.QueryAsync<BigInteger>(balanceOfFunctionMessage, _tokenData.Address);
- return Web3.Convert.FromWei(balance, _tokenData.Decimals);
- }
- public async Task<string> TransferNoWaitAsync(string address, decimal amount)
- {
- if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
- address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
- throw new Exception("ADMIN ACC");
- var transactionMessage = new TransferFunction()
- {
- FromAddress = _tokenData.CreatedByAddress,
- To = address,
- TokenAmount = Web3.Convert.ToWei(amount, _tokenData.Decimals),
- GasPrice = Web3.Convert.ToWei(12, UnitConversion.EthUnit.Gwei)
- };
- var transferHandler = _web3.Eth.GetContractTransactionHandler<TransferFunction>();
- var transactionReciept = await transferHandler.SendRequestAsync(transactionMessage, _tokenData.Address);
- return transactionReciept;
- }
- public async Task<TransactionReceipt> TransferAsync(string address, decimal amount)
- {
- if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
- address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
- return new TransactionReceipt { Status = new HexBigInteger(0) };
- var transactionMessage = new TransferFunction()
- {
- FromAddress = _tokenData.CreatedByAddress,
- To = address,
- TokenAmount = Web3.Convert.ToWei(amount, _tokenData.Decimals),
- GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei)
- };
- var transferHandler = _web3.Eth.GetContractTransactionHandler<TransferFunction>();
- var transactionReciept = await transferHandler.SendRequestAndWaitForReceiptAsync(transactionMessage, _tokenData.Address);
- return transactionReciept;
- }
- public async Task<string> BanUserAndDestroyCoinsNoWaitAsync(string address)
- {
- if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
- address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
- throw new Exception("ADMIN ACC");
- var transactionMessage = new UserBanningFunction()
- {
- AddressToBan = address,
- GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei),
- Gas = new HexBigInteger(900000)
- };
- var destroyHandler = _web3.Eth.GetContractTransactionHandler<UserBanningFunction>();
- var transactionResult =
- await destroyHandler.SendRequestAsync(transactionMessage, _tokenData.Address);
- return transactionResult;
- }
- public async Task<TransactionReceipt> BanUserAndDestroyCoinsAsync(string address)
- {
- if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
- address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
- return new TransactionReceipt {Status = new HexBigInteger(0)};
- var transactionMessage = new UserBanningFunction()
- {
- AddressToBan = address,
- GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei),
- Gas = new HexBigInteger(900000)
- };
- var destroyHandler = _web3.Eth.GetContractTransactionHandler<UserBanningFunction>();
- var transactionResult =
- await destroyHandler.SendRequestAndWaitForReceiptAsync(transactionMessage, _tokenData.Address);
- return transactionResult;
- }
- [Function("balanceOf", "uint256")]
- public class BalanceOfFunction : ContractMessage
- {
- [Parameter("address", "_owner", 1)] public string Owner { get; set; }
- }
- [Function("userBanning")]
- public class UserBanningFunction : ContractMessage
- {
- [Parameter("address", "banUser", 1)] public string AddressToBan { get; set; }
- }
- [Function("transfer", "bool")]
- public class TransferFunction : ContractMessage
- {
- [Parameter("address", "_to", 1)]
- public string To { get; set; }
- [Parameter("uint256", "_value", 2)]
- public BigInteger TokenAmount { get; set; }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement