コード例 #1
0
ファイル: Program.cs プロジェクト: StephenSTB/ScratchConsole
        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");
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: StephenSTB/ScratchConsole
        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}");
        }