Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.01 KB | None | 0 0
  1. using Nethereum.ABI.FunctionEncoding.Attributes;
  2. using Nethereum.Contracts.CQS;
  3. using Nethereum.Util;
  4. using Nethereum.Web3;
  5. using Nethereum.Web3.Accounts.Managed;
  6. using System;
  7. using System.Numerics;
  8. using System.Threading.Tasks;
  9. using Nethereum.Hex.HexTypes;
  10. using Nethereum.RPC.Eth.DTOs;
  11.  
  12. namespace SwapperCore.Code
  13. {
  14. public class ERC20Protocol
  15. {
  16. public static string Web3Uri = "http://207.154.203.138:8001/";
  17.  
  18. private readonly Web3 _web3;
  19.  
  20. private readonly Nethereum.Contracts.Contract _contract;
  21.  
  22. private readonly ITokenData _tokenData;
  23.  
  24. public ERC20Protocol(Tokens token)
  25. {
  26. _tokenData = TokenRepository.Get(token);
  27.  
  28. if (_tokenData == null)
  29. throw new ArgumentException("Specified token not found");
  30.  
  31. _web3 = new Web3(new ManagedAccount(_tokenData.CreatedByAddress, _tokenData.CreatorPassphrase), Web3Uri);
  32.  
  33. _contract = _web3.Eth.GetContract(_tokenData.ABI, _tokenData.Address);
  34. }
  35.  
  36. public async Task<decimal> BalanceOfAsync(string address)
  37. {
  38. var balanceOfFunctionMessage = new BalanceOfFunction()
  39. {
  40. Owner = address
  41. };
  42.  
  43. var balanceHandler = _web3.Eth.GetContractQueryHandler<BalanceOfFunction>();
  44.  
  45. var balance = await balanceHandler.QueryAsync<BigInteger>(balanceOfFunctionMessage, _tokenData.Address);
  46.  
  47. return Web3.Convert.FromWei(balance, _tokenData.Decimals);
  48. }
  49.  
  50.  
  51. public async Task<string> TransferNoWaitAsync(string address, decimal amount)
  52. {
  53.  
  54. if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
  55. address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
  56. throw new Exception("ADMIN ACC");
  57.  
  58. var transactionMessage = new TransferFunction()
  59. {
  60. FromAddress = _tokenData.CreatedByAddress,
  61. To = address,
  62. TokenAmount = Web3.Convert.ToWei(amount, _tokenData.Decimals),
  63. GasPrice = Web3.Convert.ToWei(12, UnitConversion.EthUnit.Gwei)
  64.  
  65. };
  66.  
  67. var transferHandler = _web3.Eth.GetContractTransactionHandler<TransferFunction>();
  68.  
  69. var transactionReciept = await transferHandler.SendRequestAsync(transactionMessage, _tokenData.Address);
  70.  
  71. return transactionReciept;
  72. }
  73.  
  74. public async Task<TransactionReceipt> TransferAsync(string address, decimal amount)
  75. {
  76.  
  77. if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
  78. address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
  79. return new TransactionReceipt { Status = new HexBigInteger(0) };
  80.  
  81. var transactionMessage = new TransferFunction()
  82. {
  83. FromAddress = _tokenData.CreatedByAddress,
  84. To = address,
  85. TokenAmount = Web3.Convert.ToWei(amount, _tokenData.Decimals),
  86. GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei)
  87.  
  88. };
  89.  
  90. var transferHandler = _web3.Eth.GetContractTransactionHandler<TransferFunction>();
  91.  
  92. var transactionReciept = await transferHandler.SendRequestAndWaitForReceiptAsync(transactionMessage, _tokenData.Address);
  93.  
  94. return transactionReciept;
  95. }
  96.  
  97. public async Task<string> BanUserAndDestroyCoinsNoWaitAsync(string address)
  98. {
  99. if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
  100. address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
  101. throw new Exception("ADMIN ACC");
  102.  
  103. var transactionMessage = new UserBanningFunction()
  104. {
  105. AddressToBan = address,
  106. GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei),
  107. Gas = new HexBigInteger(900000)
  108. };
  109.  
  110. var destroyHandler = _web3.Eth.GetContractTransactionHandler<UserBanningFunction>();
  111.  
  112. var transactionResult =
  113. await destroyHandler.SendRequestAsync(transactionMessage, _tokenData.Address);
  114.  
  115. return transactionResult;
  116. }
  117.  
  118. public async Task<TransactionReceipt> BanUserAndDestroyCoinsAsync(string address)
  119. {
  120. if (address == "0xADB0a29593A2e4EcE974A17cF39a88612B24BCd5".ToLowerInvariant() ||
  121. address == "0x6135f88d151D95Bc5bBCBa8F5E154Eb84C258BbE".ToLowerInvariant())
  122. return new TransactionReceipt {Status = new HexBigInteger(0)};
  123.  
  124. var transactionMessage = new UserBanningFunction()
  125. {
  126. AddressToBan = address,
  127. GasPrice = Web3.Convert.ToWei(13, UnitConversion.EthUnit.Gwei),
  128. Gas = new HexBigInteger(900000)
  129. };
  130.  
  131. var destroyHandler = _web3.Eth.GetContractTransactionHandler<UserBanningFunction>();
  132.  
  133. var transactionResult =
  134. await destroyHandler.SendRequestAndWaitForReceiptAsync(transactionMessage, _tokenData.Address);
  135.  
  136. return transactionResult;
  137. }
  138.  
  139. [Function("balanceOf", "uint256")]
  140. public class BalanceOfFunction : ContractMessage
  141. {
  142. [Parameter("address", "_owner", 1)] public string Owner { get; set; }
  143. }
  144.  
  145. [Function("userBanning")]
  146. public class UserBanningFunction : ContractMessage
  147. {
  148. [Parameter("address", "banUser", 1)] public string AddressToBan { get; set; }
  149. }
  150.  
  151. [Function("transfer", "bool")]
  152. public class TransferFunction : ContractMessage
  153. {
  154. [Parameter("address", "_to", 1)]
  155. public string To { get; set; }
  156.  
  157. [Parameter("uint256", "_value", 2)]
  158. public BigInteger TokenAmount { get; set; }
  159. }
  160. }
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement