private async void DrainWalletToAddress(string receipientAddress)
        {
            // calculate

            var balance = await Web3.Eth.GetBalance.SendRequestAsync(Account.Address);

            var gasPrice = await Web3.Eth.GasPrice.SendRequestAsync();

            var gasPriceHex = new Nethereum.Hex.HexTypes.HexBigInteger(gasPrice);

            var gas    = Web3.Eth.TransactionManager.DefaultGas;
            var gasHex = new Nethereum.Hex.HexTypes.HexBigInteger(gas);

            var balanceToTransfer    = BigInteger.Subtract(balance, BigInteger.Multiply(gasPrice, gas));
            var balanceToTransferHex = new Nethereum.Hex.HexTypes.HexBigInteger(balanceToTransfer);

            var transactionInput = new Nethereum.RPC.Eth.DTOs.TransactionInput(null, receipientAddress, Account.Address, gasHex, gasPriceHex, balanceToTransferHex);

            drainTransactionRichTextBox.Text = JsonConvert.SerializeObject(transactionInput);

            drainSignedTransactionRichTextBox.Text = await Web3.TransactionManager.SignTransactionRetrievingNextNonceAsync(transactionInput);

            //var txHash = await Web3.TransactionManager.SignTransactionRetrievingNextNonceAsync(transactionInput);

            var txReceipt = await Web3.TransactionManager.TransactionReceiptService.SendRequestAndWaitForReceiptAsync(() => {
                return(Web3.TransactionManager.SendTransactionAsync(transactionInput));
            });

            drainTransactionReceiptRichTextBox.Text = JsonConvert.SerializeObject(txReceipt);
        }
Пример #2
0
        public async Task <AddNewTemplateServiceResponse> Handle(AddNewTemplateServiceRequest aAddNewTemplateServiceRequest, CancellationToken aCancellationToken)
        {
            Function <AddNewTemplateFunctionInput> aAddNewTemplateFunction = NftCreatorInstance.Instance.GetFunction <AddNewTemplateFunctionInput>();

            Nethereum.Contracts.ContractHandlers.IContractTransactionHandler <AddNewTemplateFunctionInput> addNewTemplateFunctionHandler = NethWeb3.Instance.Eth.GetContractTransactionHandler <AddNewTemplateFunctionInput>();

            var aAddNewTemplateFunctionMessage = new AddNewTemplateFunctionInput
            {
                NewTemplateName           = aAddNewTemplateServiceRequest.NewTemplateName,
                NewTemplateSymbol         = aAddNewTemplateServiceRequest.NewTemplateSymbol,
                NewTemplateAttachedTokens = aAddNewTemplateServiceRequest.NewTemplateAttachedTokens,
                NewTemplateMintLimit      = aAddNewTemplateServiceRequest.NewTemplateMintLimit
            };

            // Gas Estimates, needs to be tested

            Nethereum.Hex.HexTypes.HexBigInteger gasEstimate = await addNewTemplateFunctionHandler.EstimateGasAsync(NftCreatorAddresses.NewNftCreatorRopstenAddress, aAddNewTemplateFunctionMessage);

            aAddNewTemplateFunctionMessage.Gas = gasEstimate.Value;

            Nethereum.RPC.Eth.DTOs.TransactionReceipt mintingTransactionReceipt = await addNewTemplateFunctionHandler.SendRequestAndWaitForReceiptAsync(NftCreatorAddresses.NewNftCreatorRopstenAddress, aAddNewTemplateFunctionMessage);

            return(new AddNewTemplateServiceResponse
            {
                NewTemplateTransactionReceipt = mintingTransactionReceipt
            });
        }
Пример #3
0
        public void SerializeProductToBlockchain(WonkaProduct poTargetProduct)
        {
            string sSenderAddress = msSenderAddress;

            var contract = GetContract();

            var setValueOnRecordFunction = contract.GetFunction("setValueOnRecord");

            // Exception thrown
            // var gas = setValueOnRecordFunction.EstimateGasAsync()sSenderAddress, "SomeAttr", "SomeValue").Result;
            var gas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            foreach (WonkaRefAttr TempAttr in moTargetAttrList)
            {
                string sAttrValue = GetAttributeValue(poTargetProduct, TempAttr);

                /*
                 * base fee exceeds gas limit?
                 * var receiptSetValueOnRecord =
                 *  setValueOnRecordFunction.SendTransactionAndWaitForReceiptAsync(sSenderAddress, null, sSenderAddress, TempAttr.AttrName, sAttrValue).Result;
                 */

                var receiptSetValueOnRecord =
                    setValueOnRecordFunction.SendTransactionAsync(sSenderAddress, gas, null, sSenderAddress, TempAttr.AttrName, sAttrValue).Result;
            }
        }
        public async Task ShouldMintNftOfType()
        {
            // Arrange

            Function <MintNftOfTypeFunctionInput> aMintNftOfTypeFunction = NftCreator.Instance.GetFunction <MintNftOfTypeFunctionInput>();

            Nethereum.Contracts.ContractHandlers.IContractTransactionHandler <MintNftOfTypeFunctionInput> MintNftOfTypeFunctionHandler = NethWeb3.Instance.Eth.GetContractTransactionHandler <MintNftOfTypeFunctionInput>();

            //byte[] serializedImmutable = Serializer.Serialize(new ImmutableData());
            //byte[] serializedMutable = Serializer.Serialize(new MutableData());

            //string base64StringifiedSerializedImmutable = Convert.ToBase64String(serializedImmutable);
            //string base64StringifiedSerializedMutable = Convert.ToBase64String(serializedMutable);

            var aMintNftOfTypeFunctionMessage = new MintNftOfTypeFunctionInput
            {
                Type = 4,
                MutableDataString   = "The Third Minted NFT!Take 3",
                ImmutableDataString = "This Is MintingTest 3"
            };

            Nethereum.Hex.HexTypes.HexBigInteger gasEstimate = await MintNftOfTypeFunctionHandler.EstimateGasAsync(NftCreatorAddresses.NftCreatorRinkebyAddress, aMintNftOfTypeFunctionMessage);

            aMintNftOfTypeFunctionMessage.Gas = gasEstimate.Value;

            gasEstimate.Value.ShouldBeGreaterThan(0);

            //Nethereum.RPC.Eth.DTOs.TransactionReceipt MintNftOfTypeTransactionReceipt = await MintNftOfTypeFunctionHandler.SendRequestAndWaitForReceiptAsync(NftCreatorAddresses.NftCreatorRinkebyAddress, aMintNftOfTypeFunctionMessage);

            //System.Collections.Generic.List<EventLog<MintNftOutputEventDto>> MintNftOutput = MintNftOfTypeTransactionReceipt.DecodeAllEvents<MintNftOutputEventDto>();
            //MintNftOfTypeTransactionReceipt.ShouldNotBe(null);
            //MintNftOutput.Count.ShouldBeGreaterThan(0);
        }
        public async Task <bool> Init()
        {
            bool bResult = true;

            using (var client = new System.Net.Http.HttpClient())
            {
                string sIpfsUrl = String.Format("{0}/{1}", CONST_INFURA_IPFS_GATEWAY_URL, "QmXcsGDQthxbGW8C3Sx9r4tV9PGSj4MxJmtXF7dnXN5XUT");

                msRulesContents = await client.GetStringAsync(sIpfsUrl).ConfigureAwait(false);
            }

            // By setting the addresses to NULL, we indicates that we want the API to deploy the contracts for us
            if (msContractAddress == null)
            {
                msEngineContractAddress   = null;
                msRegistryContractAddress = null;
                msTestContractAddress     = null;
            }
            // By using the indicator "DEPLOY" here, we will manually deploy the contracts ourselves
            else if (msContractAddress == "DEPLOY")
            {
                msEngineContractAddress = await DeployWonka().ConfigureAwait(false);
            }
            // Else, we will use existing contracts on the test chain
            else
            {
                if (msContractAddress == "")
                {
                    msEngineContractAddress = "0xfB419DEA1f28283edAD89103fc1f1272f7573E6A";
                }
                else
                {
                    msEngineContractAddress = msContractAddress;
                }

                msRegistryContractAddress = "0x7E618a3948F6a5D2EA6b92D8Ce6723a468540CaA";
                msTestContractAddress     = "0x4092bc250ef6c384804af2f871Af9c679b672d0B";
            }

            if (String.IsNullOrEmpty(msChronoLogAddress))
            {
                var web3 = GetWeb3();
                var ChronoLogDeployment = new Wonka.Eth.Autogen.ChronoLog.ChronoLogDeployment();

                Nethereum.Hex.HexTypes.HexBigInteger nDefaultGas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

                msChronoLogAddress =
                    await ChronoLogDeployment.DeployContractAsync(web3, msAbiChronoLog, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL).ConfigureAwait(false);
            }

            await InitEngineAsync(mbInitChainEnv).ConfigureAwait(false);


            Wonka.BizRulesEngine.Writers.WonkaBizRulesXmlWriter Writer =
                new Wonka.BizRulesEngine.Writers.WonkaBizRulesXmlWriter(moEthEngineInit.Engine.RulesEngine);

            string sOutputRules = Writer.ExportXmlString();

            return(bResult);
        }
        public async Task <string> DeployWonka()
        {
            var web3                = GetWeb3();
            var EngineDeployment    = new Wonka.Eth.Autogen.WonkaEngine.WonkaEngineDeploymentClassic();
            var RegistryDeployment  = new Wonka.Eth.Autogen.WonkaRegistry.WonkaRegistryDeployment();
            var TestCntDeployment   = new Wonka.Eth.Autogen.WonkaTestContract.WonkaTestContractDeployment();
            var ChronoLogDeployment = new Wonka.Eth.Autogen.ChronoLog.ChronoLogDeployment();

            Nethereum.Hex.HexTypes.HexBigInteger nEngineGas  = new Nethereum.Hex.HexTypes.HexBigInteger(8388608);
            Nethereum.Hex.HexTypes.HexBigInteger nDefaultGas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            msEngineContractAddress =
                await EngineDeployment.DeployContractAsync(web3, msAbiWonka, msSenderAddress, nEngineGas, CONST_ONLINE_TEST_CHAIN_URL).ConfigureAwait(false);

            msRegistryContractAddress =
                await RegistryDeployment.DeployContractAsync(web3, msAbiRegistry, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL).ConfigureAwait(false);

            msTestContractAddress =
                await TestCntDeployment.DeployContractAsync(web3, msAbiOrchTest, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL).ConfigureAwait(false);

            msChronoLogAddress =
                await ChronoLogDeployment.DeployContractAsync(web3, msAbiChronoLog, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL).ConfigureAwait(false);

            return(msEngineContractAddress);
        }
Пример #7
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] Models.NewData contract, TraceWriter log)
        {
            // You need to have the geth running while running this code. command: c:\geth\>geth --testnet
            var _getAddress   = "./geth.ipc";
            var hashedContent = Hash(contract.Content);

            var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress);
            var web3      = new Web3(ipcClient);

            // this will leave the account unlucked for 2 minutes
            Nethereum.Hex.HexTypes.HexBigInteger accountUnlockTime = new Nethereum.Hex.HexTypes.HexBigInteger(120);

            var accountPublicKey = "ACCOUNT_PUBLIC_KEY";
            var accountPassword  = "******";
            // Unlock the caller's account with the given password
            var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(accountPublicKey, accountPassword, accountUnlockTime);

            var abi      = @"[{""constant"":true,""inputs"":[],""name"":""Url"",""outputs"":[{""name"":"""",""type"":""string""}],""payable"":false,""stateMutability"":""view"",""type"":""function""},{""constant"":false,""inputs"":[{""name"":""url"",""type"":""string""},{""name"":""hashContent"",""type"":""string""}],""name"":""AddPostContract"",""outputs"":[],""payable"":false,""stateMutability"":""nonpayable"",""type"":""function""},{""constant"":true,""inputs"":[],""name"":""HashContent"",""outputs"":[{""name"":"""",""type"":""string""}],""payable"":false,""stateMutability"":""view"",""type"":""function""}]";
            var byteCode = "6060604052341561000f57600080fd5b6104578061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638d21df8c1461005c578063a2da9d08146100ea578063b0e4a8601461018a575b600080fd5b341561006757600080fd5b61006f610218565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100af578082015181840152602081019050610094565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156100f557600080fd5b610188600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506102b6565b005b341561019557600080fd5b61019d6102e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101dd5780820151818401526020810190506101c2565b50505050905090810190601f16801561020a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102ae5780601f10610283576101008083540402835291602001916102ae565b820191906000526020600020905b81548152906001019060200180831161029157829003601f168201915b505050505081565b81600090805190602001906102cc929190610386565b5080600190805190602001906102e3929190610386565b505050565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b505050505081565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103c757805160ff19168380011785556103f5565b828001600101855582156103f5579182015b828111156103f45782518255916020019190600101906103d9565b5b5090506104029190610406565b5090565b61042891905b8082111561042457600081600090555060010161040c565b5090565b905600a165627a7a72305820eb77a018bf2acdb7f9ea0a12c1ca4c23cfc215fa49cbdb1152c79814db0dbef60029";

            var compiledContract = web3.Eth.GetContract(abi, byteCode);

            var function = compiledContract.GetFunction("AddPostContract");

            var ret = function.CallAsync <>(contract.Url, hashedContent);
        }
        public static async Task <List <string> > DeployContracts(string psPassword, string psSenderAddress, string psWeb3HttpUrl)
        {
            var web3               = GetWeb3(psPassword, psWeb3HttpUrl);
            var EngineDeployment   = new Wonka.Eth.Autogen.WonkaEngine.WonkaEngineDeployment();
            var RegistryDeployment = new Wonka.Eth.Autogen.WonkaRegistry.WonkaRegistryDeployment();
            var TestCntDeployment  = new Wonka.Eth.Autogen.WonkaTestContract.WonkaTestContractDeployment();

            Nethereum.Hex.HexTypes.HexBigInteger nEngineGas  = new Nethereum.Hex.HexTypes.HexBigInteger(8388608);
            Nethereum.Hex.HexTypes.HexBigInteger nDefaultGas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            string sWonkaABI        = Wonka.Eth.Autogen.WonkaEngine.WonkaEngineDeployment.ABI;
            string sRegistryABI     = Wonka.Eth.Autogen.WonkaRegistry.WonkaRegistryDeployment.ABI;
            string sTestContractABI = Wonka.Eth.Autogen.WonkaTestContract.WonkaTestContractDeployment.ABI;

            string sEngineContractAddress =
                await EngineDeployment.DeployContractAsync(web3, sWonkaABI, psSenderAddress, nEngineGas, psWeb3HttpUrl).ConfigureAwait(false);

            string sRegistryContractAddress =
                await RegistryDeployment.DeployContractAsync(web3, sRegistryABI, psSenderAddress, nDefaultGas, psWeb3HttpUrl).ConfigureAwait(false);

            string sTestContractAddress =
                await TestCntDeployment.DeployContractAsync(web3, sTestContractABI, psSenderAddress, nDefaultGas, psWeb3HttpUrl).ConfigureAwait(false);

            return(new List <string>()
            {
                sEngineContractAddress, sRegistryContractAddress, sTestContractAddress
            });
        }
Пример #9
0
        private Nethereum.Hex.HexTypes.HexBigInteger getNewTxCount()
        {
            Nethereum.Hex.HexTypes.HexBigInteger ret = new Nethereum.Hex.HexTypes.HexBigInteger(_curTxCount);

            _curTxCount = new Nethereum.Hex.HexTypes.HexBigInteger(_curTxCount.Value + new BigInteger(1));

            return(ret);
        }
Пример #10
0
        public void ResetValueMethod(string psAttrName, string psAttrValue)
        {
            var contract = GetContract();

            var gas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            var setValueFunction = contract.GetFunction("setValueOnRecord");

            var setReceipt =
                setValueFunction.SendTransactionAsync(msSenderAddress, gas, null, msSenderAddress, psAttrName, psAttrValue).Result;
        }
        public ContractParam(DeployContractVM vM)
        {
            SenderAddress = vM.SellerAddress;
            GasLimit      = new Nethereum.Hex.HexTypes.HexBigInteger(vM.GasLimit);
            var amount = new Nethereum.Hex.HexTypes.HexBigInteger(vM.EtherToPay);

            GetV    = new object[3];
            GetV[0] = vM.BuyerAddress;
            GetV[1] = vM.EscrowHolderAddress;
            GetV[2] = vM.EtherToPay;
        }
Пример #12
0
        public async Task <string> PayAsync(string address, decimal value)
        {
            var wei    = UnitConversion.Convert.ToWei(new BigDecimal(value));
            var amount = new Nethereum.Hex.HexTypes.HexBigInteger(wei);
            var data   = await web3.Eth.TransactionManager.SendTransactionAsync(account.Address, address, amount);

            var result = await web3.Eth.TransactionManager.TransactionReceiptService.PollForReceiptAsync(data);

            var blocknumber = result.BlockNumber;

            Console.WriteLine("block number: " + blocknumber.Value);
            return(data);
        }
        private async void sendEthTransactionButton_Click(object sender, EventArgs e)
        {
            try
            {
                var receipientAddress = receipientAddressTextBox.Text.Trim();

                var ethAmount   = decimal.Parse(ethToSendTextBox.Text.Trim()); // exponent -18
                var ethInWei    = UnitConversion.Convert.ToWeiFromUnit(ethAmount, UnitConversion.Convert.GetEthUnitValue(UnitConversion.EthUnit.Ether));
                var ethInWeiHex = new Nethereum.Hex.HexTypes.HexBigInteger(ethInWei);

                var gasPrice         = decimal.Parse(gasPriceToUseTextBox.Text.Trim()); // exponent -9
                var gasPriceInWei    = UnitConversion.Convert.ToWei(gasPrice, 9);
                var gasPriceInWeiHex = new Nethereum.Hex.HexTypes.HexBigInteger(gasPriceInWei);

                var gas         = decimal.Parse(gasUsedToUseTextBox.Text.Trim()); // exponent 0
                var gasInWei    = new BigInteger(gas);
                var gasInWeiHex = new Nethereum.Hex.HexTypes.HexBigInteger(gasInWei);

                var tx = new Nethereum.RPC.Eth.DTOs.TransactionInput(null, receipientAddress, Account.Address, gasInWeiHex, gasPriceInWeiHex, ethInWeiHex);
                sentTransactionDataTextBox.Text = JsonConvert.SerializeObject(tx);

                var txSigned = await Web3.Eth.TransactionManager.SignTransactionRetrievingNextNonceAsync(tx);

                sentTransactionHashTextBox.Text = $"Signed Tx: {txSigned}";

                // sanity check because Ganache UI was displaying rounded up numbers which was truly killing me inside.
                //{
                //    var gasssss = BigInteger.Subtract(Balance, BigInteger.Multiply(gasInWeiHex, gasPriceInWeiHex));
                //    var final = BigInteger.Subtract(gasssss, ethInWeiHex);

                //    Console.WriteLine($"{Balance.ToString()} = {final.ToString()} + {BigInteger.Multiply(gasInWeiHex, gasPriceInWeiHex).ToString()} + {ethInWeiHex.Value.ToString()}");
                //}

                var txHash = await Web3.Eth.TransactionManager.SendTransactionAsync(tx);

                var txReceipt = await Web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash);

                // Give users a receipt

                //hashAndReceiptTextBox.Text = string.Empty;
                //hashAndReceiptTextBox.AppendText($"Transaction Hash: {txHash}{Environment.NewLine}{Environment.NewLine}{Environment.NewLine}");
                hashAndReceiptTextBox.Text = $"Receipt: {JsonConvert.SerializeObject(txReceipt)}";


                InitializeBalance();
            }
            catch (Exception ex)
            {
                MessageBox.Show(JsonConvert.SerializeObject(ex));
            }
        }
Пример #14
0
        static async Task getLatestBlockNumber()
        {
            // Encode App Credentials as <username>:<password>
            var byteArray = Encoding.ASCII.GetBytes(USER + ":" + PASS);
            AuthenticationHeaderValue auth = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            // Create the RPC Client to talk to the Kaleido RPC endpoint using web3
            IClient client = new RpcClient(new Uri(RPC_ENDPOINT), auth, null, null, null);
            var     web3   = new Web3(client);

            //Now we can test the connection by calling some basic function
            // Get the latest block number in the chain
            latestBlockNumber = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();
        }
Пример #15
0
        public string DeployWonka()
        {
            var web3               = GetWeb3();
            var EngineDeployment   = new Wonka.Eth.Autogen.WonkaEngine.WonkaEngineDeploymentClassic();
            var RegistryDeployment = new Wonka.Eth.Autogen.WonkaRegistry.WonkaRegistryDeployment();
            var TestCntDeployment  = new Wonka.Eth.Autogen.WonkaTestContract.WonkaTestContractDeployment();

            Nethereum.Hex.HexTypes.HexBigInteger nEngineGas  = new Nethereum.Hex.HexTypes.HexBigInteger(8388608);
            Nethereum.Hex.HexTypes.HexBigInteger nDefaultGas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            msEngineContractAddress   = EngineDeployment.DeployContract(web3, msAbiWonka, msSenderAddress, nEngineGas, CONST_ONLINE_TEST_CHAIN_URL);
            msRegistryContractAddress = RegistryDeployment.DeployContract(web3, msAbiRegistry, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL);
            msTestContractAddress     = TestCntDeployment.DeployContract(web3, msAbiOrchTest, msSenderAddress, nDefaultGas, CONST_ONLINE_TEST_CHAIN_URL);

            return(msEngineContractAddress);
        }
Пример #16
0
        public async Task <ActionResult> CreateContract(RouteCoinContractModel model)
        {
            var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress);
            var web3      = new Web3(ipcClient);

            var gas     = new Nethereum.Hex.HexTypes.HexBigInteger(300000);
            var balance = new Nethereum.Hex.HexTypes.HexBigInteger(120);


            // Unlock the caller's account with the given password
            var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(model.BuyerPublicKey, model.BuyerAccountPassword, _accountUnlockTime);

            var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(_abi, _byteCode, model.BuyerPublicKey, gas, model.ContractPrice * 10, model.DestinationAddress, model.ContractGracePeriod, model.ContractPrice);

            return(RedirectToAction("ContractCreated", new { transactionHash = transactionHash }));
        }
Пример #17
0
        public async Task <string> SendToNetwork(string functionData)
        {
            string errMessage = string.Empty;

            string txId       = null;
            bool   retry      = true;
            int    retryCount = 0;

            while (retry)
            {
                retryCount++;

                if (_curTxCount == null)
                {
                    _curTxCount = await _web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(_senderAddress);
                }

                var gasPriceGwei = await _web3.Eth.GasPrice.SendRequestAsync();

                var gasPrice = new BigInteger(UnitConversion.Convert.FromWei(gasPriceGwei));

                var encoded = Web3.OfflineTransactionSigner.SignTransaction(_senderPK, new BigInteger(3), _contractAddress, 0, getNewTxCount().Value, gasPriceGwei, 300000, functionData);

                try
                {
                    txId = await _web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + encoded);
                }
                catch (System.Exception e)
                {
                    errMessage = e.Message;
                    Thread.Sleep(10000);
                }

                if (txId != null || retryCount > 10)
                {
                    retry = false;
                }
                else
                {
                    _curTxCount = null;
                }
            }

            return(txId);
        }
Пример #18
0
        private bool ExecuteRulesEngineOnTheBlockchain()
        {
            bool bValid = true;

            var contract = GetContract();

            var executeRulesEngineFunction = contract.GetFunction("execute");

            // var gas = executeRulesEngineFunction.EstimateGasAsync(sSenderAddress).Result;
            var gas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

            // var receiptExecuteEngine =
            //    executeRulesEngineFunction.SendTransactionAsync(msSenderAddress, gas, null, msSenderAddress).Result;

            bValid = executeRulesEngineFunction.CallAsync <bool>(msSenderAddress, gas, null, msSenderAddress).Result;

            return(bValid);
        }
Пример #19
0
        public async Task <string> GetEventData(string eventName, string filterBlockNumber)
        {
            //Infura doesn't support the filters, so have to request GetAllChanges.
            //In case using another service, could be done this way:
            //var filterAll = await hashCreated.CreateFilterAsync();
            //var log = await hashCreated.GetFilterChanges<HashCreatedEvent>(filterAll);

            var contract    = _web3.Eth.GetContract(_abi, _contractAddress);
            var hashCreated = contract.GetEvent(eventName);// "FileProofHashCreated"
            var filterAll   = hashCreated.CreateFilterInput(new Nethereum.RPC.Eth.DTOs.BlockParameter(), null);
            var BlockNumber = new Nethereum.Hex.HexTypes.HexBigInteger(filterBlockNumber);
            var log         = await hashCreated.GetAllChanges <HashCreatedEvent>(filterAll);

            var retTimestamp  = log[0].Event.Timestamp.ToString();
            var retGlobalHash = System.Convert.ToBase64String(log[0].Event.HeaderHash);

            return(JsonConvert.SerializeObject(new { Timestamp = retTimestamp, GlobalHash = retGlobalHash }));
        }
Пример #20
0
        private void SerializeMetadataToBlockchain()
        {
            uint nAttrNum = 3;

            string sSenderAddress = msSenderAddress;

            var contract = GetContract();

            var getAttrNumFunction = contract.GetFunction("getNumberOfAttributes");
            var addAttrFunction    = contract.GetFunction("addAttribute");

            nAttrNum = getAttrNumFunction.CallAsync <uint>().Result;

            if (nAttrNum <= CONST_CONTRACT_ATTR_NUM_ON_START)
            {
                foreach (WonkaRefAttr TempAttr in moTargetAttrList)
                {
                    var sAttrName = "";

                    if (TempAttr.AttrName.Length > 32)
                    {
                        sAttrName = TempAttr.AttrName.Trim().Replace(" ", "").Substring(0, 31);
                    }
                    else
                    {
                        sAttrName = TempAttr.AttrName.Trim().Replace(" ", "");
                    }

                    uint   MaxLen    = (uint)TempAttr.MaxLength;
                    uint   MaxNumVal = 999999; // TempAttr.MaxValue;
                    string DefVal    = !String.IsNullOrEmpty(TempAttr.DefaultValue) ? TempAttr.DefaultValue : "";
                    bool   IsString  = !TempAttr.IsNumeric;
                    bool   IsNumeric = TempAttr.IsNumeric;

                    // NOTE: Caused exception to be thrown
                    // var gas = addAttrFunction.EstimateGasAsync("SomeAttr", 0, 0, "SomeVal", false, false).Result;
                    var gas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

                    var receiptAddAttribute =
                        addAttrFunction.SendTransactionAsync(sSenderAddress, gas, null, sAttrName, MaxLen, MaxNumVal, DefVal, IsString, IsNumeric).Result;
                }
            }
        }
Пример #21
0
        public RuleTreeReport ExecuteWithReport(WonkaBreRulesEngine poRulesEngine, bool pbValidateWithinTransaction, WonkaBreSource poFlagSource)
        {
            WonkaRefEnvironment RefEnv = WonkaRefEnvironment.GetInstance();

            WonkaRefAttr CurrValueAttr  = RefEnv.GetAttributeByAttrName("AccountCurrValue");
            WonkaRefAttr ReviewFlagAttr = RefEnv.GetAttributeByAttrName("AuditReviewFlag");

            Dictionary <string, string> PrdKeys = new Dictionary <string, string>();

            var contract = GetContract();

            var executeWithReportFunction = contract.GetFunction(CONST_CONTRACT_FUNCTION_EXEC_RPT);

            RuleTreeReport ruleTreeReport = null;

            if (pbValidateWithinTransaction)
            {
                var executeGetLastReportFunction = contract.GetFunction(CONST_CONTRACT_FUNCTION_GET_LAST_RPT);

                // NOTE: Caused exception to be thrown
                // var gas = executeWithReportFunction.EstimateGasAsync(msSenderAddress).Result;
                var gas = new Nethereum.Hex.HexTypes.HexBigInteger(1000000);

                WonkaProduct OrchContractCurrValues = poRulesEngine.AssembleCurrentProduct(new Dictionary <string, string>());

                string sFlagBeforeOrchestrationAssignment  = RetrieveValueMethod(poFlagSource, ReviewFlagAttr.AttrName);
                string sValueBeforeOrchestrationAssignment = RetrieveValueMethod(poFlagSource, CurrValueAttr.AttrName);

                var receiptAddAttribute = executeWithReportFunction.SendTransactionAsync(msSenderAddress, gas, null, msSenderAddress).Result;

                string sFlagAfterOrchestrationAssignment  = RetrieveValueMethod(poFlagSource, ReviewFlagAttr.AttrName);
                string sValueAfterOrchestrationAssignment = RetrieveValueMethod(poFlagSource, CurrValueAttr.AttrName);

                ruleTreeReport = executeGetLastReportFunction.CallDeserializingToObjectAsync <RuleTreeReport>().Result;
            }
            else
            {
                ruleTreeReport = executeWithReportFunction.CallDeserializingToObjectAsync <RuleTreeReport>(msSenderAddress).Result;
            }

            return(ruleTreeReport);
        }
Пример #22
0
        public static double FromHexWei(this string input, int toUnit)
        {
            if (input == "0x0")
            {
                return(0);
            }
            if (input.StartsWith("0x"))
            {
                input = input.Remove(0, 2);
            }

            Nethereum.Hex.HexTypes.HexBigInteger value = new Nethereum.Hex.HexTypes.HexBigInteger(input);
            return((double)Nethereum.Web3.Web3.Convert.FromWei(value, toUnit));

            if (!BigInteger.TryParse(input, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out var result))
            {
                return(0);
            }
            return((double)BigInteger.Divide(result, (toUnit == 0 ? 1 : (BigInteger)Math.Pow(10, toUnit))));
        }
        public async Task ShouldMintNftOfType()
        {
            // Arrange

            Function <MintNftOfTypeFunctionInput> aMintNftOfTypeFunction = NftCreator.Instance.GetFunction <MintNftOfTypeFunctionInput>();

            Nethereum.Contracts.ContractHandlers.IContractTransactionHandler <MintNftOfTypeFunctionInput> mintNftOfTypeFunctionHandler = NethWeb3.Instance.Eth.GetContractTransactionHandler <MintNftOfTypeFunctionInput>();

            var aMintNftOfTypeFunctionMessage = new MintNftOfTypeFunctionInput
            {
                NftId               = 4,
                MutableDataString   = "The Third Minted NFT!Take 3",
                ImmutableDataString = "This Is MintingTest 3"
            };

            Nethereum.Hex.HexTypes.HexBigInteger gasEstimate = await mintNftOfTypeFunctionHandler.EstimateGasAsync(NftCreatorAddresses.NewNftCreatorRopstenAddress, aMintNftOfTypeFunctionMessage);

            aMintNftOfTypeFunctionMessage.Gas = gasEstimate.Value;

            gasEstimate.Value.ShouldBeGreaterThan(0);
        }
        public async Task ShouldAddNewNftTemplate()
        {
            // Arrange
            Function <AddNewTemplateFunctionInput> aAddNewTemplateFunction = NftCreator.Instance.GetFunction <AddNewTemplateFunctionInput>();

            Nethereum.Contracts.ContractHandlers.IContractTransactionHandler <AddNewTemplateFunctionInput> addNewTemplateFunctionHandler = NethWeb3.Instance.Eth.GetContractTransactionHandler <AddNewTemplateFunctionInput>();

            var getNftRequest = new GetNftTypesServiceRequest();

            GetNftTypesServiceResponse totalTypesBeforeTest = await Mediator.Send(getNftRequest);

            var aAddNewTemplateFunctionMessage = new AddNewTemplateFunctionInput
            {
                NewTemplateName           = "Purchase Order",
                NewTemplateSymbol         = "POR",
                NewTemplateAttachedTokens = 0,
                NewTemplateMintLimit      = 10
            };

            Nethereum.Hex.HexTypes.HexBigInteger gasEstimate = await addNewTemplateFunctionHandler.EstimateGasAsync(NftCreatorAddresses.NftCreatorRinkebyAddress, aAddNewTemplateFunctionMessage);

            aAddNewTemplateFunctionMessage.Gas = gasEstimate.Value;

            gasEstimate.Value.ShouldBeGreaterThan(0);

            // Leaving this commented out as this is the action that makes a new template
            // it's been tested and works

            //Nethereum.RPC.Eth.DTOs.TransactionReceipt addingTemplateTransactionReceipt = await addNewTemplateFunctionHandler.SendRequestAndWaitForReceiptAsync(NftCreatorAddresses.NftCreatorRinkebyAddress, aAddNewTemplateFunctionMessage);

            //addingTemplateTransactionReceipt.ShouldNotBe(null);


            //GetNftTypesServiceResponse totalTypesAfterTest = await Mediator.Send(getNftRequest);


            //totalTypesAfterTest.TotalNftTypes.ShouldBeGreaterThan(totalTypesBeforeTest.TotalNftTypes);
        }
Пример #25
0
        public IEnumerator SendRequest(Nethereum.Hex.HexTypes.HexBigInteger filterId)
        {
            var request = _ethUninstallFilter.BuildRequest(filterId);

            yield return(SendRequest(request));
        }
Пример #26
0
        public IEnumerator SendRequest(Nethereum.Hex.HexTypes.HexBigInteger filterId)
        {
            var request = _ethGetFilterLogsForEthNewFilter.BuildRequest(filterId);

            yield return(SendRequest(request));
        }
Пример #27
0
        public IEnumerator SendRequest(Nethereum.Hex.HexTypes.HexBigInteger blockNumber, Nethereum.Hex.HexTypes.HexBigInteger transactionIndex)
        {
            var request = _ethGetTransactionByBlockNumberAndIndex.BuildRequest(blockNumber, transactionIndex);

            yield return(SendRequest(request));
        }
Пример #28
0
        public IEnumerator SendRequest(System.String blockHash, Nethereum.Hex.HexTypes.HexBigInteger transactionIndex)
        {
            var request = _ethGetTransactionByBlockHashAndIndex.BuildRequest(blockHash, transactionIndex);

            yield return(SendRequest(request));
        }
 public ViewTokenDataFunctionInput()
 {
     FromAddress  = TestEthAccounts.TestEthAccountAddress;
     Gas          = new Nethereum.Hex.HexTypes.HexBigInteger(900000);
     AmountToSend = new Nethereum.Hex.HexTypes.HexBigInteger(0);
 }
Пример #30
0
        public IEnumerator SendRequest(Nethereum.Hex.HexTypes.HexBigInteger filterId)
        {
            var request = _ethGetFilterChangesForBlockOrTransaction.BuildRequest(filterId);

            yield return(SendRequest(request));
        }