private static async Task Deploy() { Console.WriteLine("Deploying contract..."); //GetBalance().Wait(); ScratchDeployment SD = new ScratchDeployment { InitialLink = Web3.Convert.ToWei(1) //AmountToSend = 100000000000 }; try { var deployReciept = await ScratchService.DeployContractAndWaitForReceiptAsync(web3, SD); ScratchContractAddress = deployReciept.ContractAddress; Console.WriteLine($"gas: {Web3.Convert.FromWei(Web3.Convert.ToWei(deployReciept.GasUsed, UnitConversion.EthUnit.Gwei))}"); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine($"Scratch contract address: {ScratchContractAddress}"); //var balance = await web3.Eth.GetBalance.SendRequestAsync(ScratchContractAddress); //Console.WriteLine($"Scratch contract Ether: {balance}"); // Open Settings. var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var Settings = configFile.AppSettings.Settings; Settings["ScratchContractAddress"].Value = ScratchContractAddress; CsService = new ScratchService(web3, ScratchContractAddress); var rec1 = CsService.GetLinkBalanceQueryAsync(account.Address); Console.WriteLine($"Account Link Balance: {Web3.Convert.FromWei(rec1.Result)}\n Account Eth Balance: {Web3.Convert.FromWei(await web3.Eth.GetBalance.SendRequestAsync(account.Address))}"); /* * var deposit = new DepositLinkFunction() * { * Value = 1 * };*/ var transferHandler = web3.Eth.GetContractTransactionHandler <TransferFunction>(); var transfer = new TransferFunction() { To = ScratchContractAddress, TokenAmount = Web3.Convert.ToWei(1) }; Console.WriteLine($"Token amount: {transfer.TokenAmount} in wei"); var transactionReceipt = await transferHandler.SendRequestAndWaitForReceiptAsync("0xa36085F69e2889c224210F603D836748e7dC0088", transfer); rec1 = CsService.GetLinkBalanceQueryAsync(ScratchContractAddress); Console.WriteLine($"Link sent to Contract: {Web3.Convert.FromWei(rec1.Result)}"); RoundContractAddress = await CsService.GetCardRoundQueryAsync(); Settings["RoundContractAddress"].Value = RoundContractAddress; RService = new ScratchCardRoundService(web3, RoundContractAddress); // Save Settings configFile.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); Console.WriteLine("\n"); }
private static async Task BuyCard() { var accountEtherBalance = await web3.Eth.GetBalance.SendRequestAsync(account.Address); var accountLinkBalance = Web3.Convert.FromWei(await CsService.GetLinkBalanceQueryAsync(account.Address)); Console.WriteLine($" Account: {account.Address}\n Ether Balance: {Web3.Convert.FromWei(accountEtherBalance)}\n Link Balance: {accountLinkBalance}\n"); // Approving the contract to use 1 link. var approveHandler = web3.Eth.GetContractTransactionHandler <ApproveFunction>(); var approve = new ApproveFunction() { Spender = ScratchContractAddress, TokenAmount = Web3.Convert.ToWei(1) }; await approveHandler.SendRequestAndWaitForReceiptAsync("0xa36085F69e2889c224210F603D836748e7dC0088", approve); // Get Price of a card. //var LinkPrice = await CsService.RequestLinkPriceQueryAsync(); //var CardValue = Web3.Convert.FromWei((2000000000000000000 / LinkPrice) * 100000000); // Getting ScratchCardRound handler. var address = await CsService.GetCardRoundQueryAsync(); Console.WriteLine($"Card Round address: {address}"); ScratchCardRoundService RS = new ScratchCardRoundService(web3, address); var CardValue = Web3.Convert.FromWei(await RS.GetCardPriceQueryAsync() + 100000000000000000); Console.WriteLine($"Price of Card: {CardValue} \n"); Console.WriteLine("Buying card..."); // Generating a seed Random rand = new Random(); uint seed = (uint)rand.Next(); var buyCard = await CsService.BuyScatchCardRequestAndWaitForReceiptAsync(seed); // Getting the RequestID emited from the BuyScratchCard Request. var RequestID = buyCard.DecodeAllEvents <RequestIDEventDTO>()[0].Event.RequestId.ToHex(); //Console.WriteLine($"RequestID: {RequestID}"); /* * var fulfillHandler = CsService.ContractHandler.GetEvent<RequestFulfilledEventDTO>(); * * var filterFulfill = fulfillHandler.CreateFilterInput(); * * while (true) * { * var requests = await fulfillHandler.GetAllChanges(filterFulfill); * if(requests.Count > 0) * { * Console.WriteLine($"Raw Random Number: {requests[0].Event.Randomness}"); * break; * } * * }*/ var PrizeEventHandler = RS.ContractHandler.GetEvent <PrizeClaimEventDTO>(); var filterPrizeEvents = PrizeEventHandler.CreateFilterInput(); decimal prize = 0; // Getting the PrizeClaim event with the correct RequestID while (true) { var allRequestEvents = await PrizeEventHandler.GetAllChanges(filterPrizeEvents); if (allRequestEvents.Count > 0) { bool brk = false; foreach (EventLog <PrizeClaimEventDTO> e in allRequestEvents) { //Console.WriteLine($"Scratch Card result, Address: {e.Event.Player}, RequestID: {e.Event.RequestId.ToHex()}, Prize Number: {e.Event.Number}, Prize: {Web3.Convert.FromWei(e.Event.Prize)}\n"); if (e.Event.RequestId.ToHex().Equals(RequestID)) { Console.WriteLine($"Scratch Card result, Address: {e.Event.Player}, RequestID: {e.Event.RequestId.ToHex()}, Prize Number: {e.Event.Number}, Prize: {Web3.Convert.FromWei(e.Event.Prize)}\n"); prize = Web3.Convert.FromWei(e.Event.Prize); brk = true; } } if (brk) { break; } } } Console.WriteLine($"Initial Account Link Balance: {accountLinkBalance}, Card Value: {CardValue}, Prize value: {prize}"); Console.WriteLine($"Expected Link Balance: {accountLinkBalance - CardValue + prize}\n"); accountLinkBalance = Web3.Convert.FromWei(await CsService.GetLinkBalanceQueryAsync(account.Address)); Console.WriteLine($"Link Balance: {accountLinkBalance}\n"); var ScratchTokenAddress = await CsService.GetTokenQueryAsync(); ScratchTokenService tokenService = new ScratchTokenService(web3, ScratchTokenAddress); var ScratchTokenBalance = await tokenService.BalanceOfQueryAsync(account.Address); Console.WriteLine($"Scratch Token Balance: {ScratchTokenBalance}"); }