Exemplo n.º 1
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
            });
        }
Exemplo n.º 2
0
        public async Task <MintNftOfTypeServiceResponse> Handle(MintNftOfTypeServiceRequest aMintNftOfTypeServiceRequest, CancellationToken aCancellationToken)
        {
            Function <MintNftOfTypeFunctionInput> aMintNftOfTypeFunction = NftCreatorInstance.Instance.GetFunction <MintNftOfTypeFunctionInput>();

            Nethereum.Contracts.ContractHandlers.IContractTransactionHandler <MintNftOfTypeFunctionInput> mintingHandler = NethWeb3.Instance.Eth.GetContractTransactionHandler <MintNftOfTypeFunctionInput>();
            // serialization needed

            var aMintNftOfTypeFunctionMessage = new MintNftOfTypeFunctionInput
            {
                NftId = aMintNftOfTypeServiceRequest.MintNftId,
                ImmutableDataString = aMintNftOfTypeServiceRequest.ImmutableDataString,
                MutableDataString   = aMintNftOfTypeServiceRequest.MutableDataString == null ? "" : aMintNftOfTypeServiceRequest.MutableDataString
            };

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

            aMintNftOfTypeFunctionMessage.Gas = gasEstimate.Value;

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

            System.Collections.Generic.List <EventLog <MintNftOutputEventDto> > MintNftOutput = mintingTransactionReceipt.DecodeAllEvents <MintNftOutputEventDto>();

            int id = (int)MintNftOutput[0].Event.Id;

            return(new MintNftOfTypeServiceResponse
            {
                TransactionHash = mintingTransactionReceipt.TransactionHash,
                TokenId = id,
                GasUsed = new HexBigInteger(mintingTransactionReceipt.GasUsed.Value)
            });
        }
Exemplo n.º 3
0
        public Receipt(Nethereum.RPC.Eth.DTOs.TransactionReceipt receipt)
        {
            ContractAddress = receipt.ContractAddress.ToString();
            if (receipt.BlockHash != null)
            {
                BlockHash   = receipt.BlockHash.ToString();
                BlockNumber = receipt.BlockNumber.HexValue;
            }

            GasUsed = receipt.GasUsed.HexValue;
            Status  = receipt.Status.HexValue;
        }
Exemplo n.º 4
0
        static public async Task WaitForTxReceiptExample(Web3 web3, string txHash)
        {
            Console.WriteLine("WaitForTxReceiptExample:");

            int timeoutCount = 0;
            var txReceipt    = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash);

            while (txReceipt == null && timeoutCount < MAX_TIMEOUT)
            {
                Console.WriteLine("Sleeping...");
                Thread.Sleep(SLEEP_TIME);
                txReceipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash);

                timeoutCount += SLEEP_TIME;
            }
            Console.WriteLine("timeoutCount " + timeoutCount.ToString());
            LastTxReceipt = txReceipt;
        }
Exemplo n.º 5
0
                public IEnumerator Exec3(double gas, double value_wei, params object[] args)
                {
                    Debug.Log("gas/value = " + gas + "|" + value_wei);
                    yield return(req_.SignAndSendTransaction(
                                     Function.CreateTransactionInput(RPCMgr.instance.Account.address_,
                                                                     new HexBigInteger(new BigInteger(gas)),
                                                                     new HexBigInteger(new BigInteger(value_wei)), args)));

                    var receipt_waiter = new TransactionReceiptPollingRequest(RPCMgr.instance.Account.chain_url_);

                    yield return(receipt_waiter.PollForReceipt(req_.Result, 60));

                    if (receipt_waiter.Exception != null)
                    {
                        Error = receipt_waiter.Exception;
                        yield break;
                    }
                    Result = receipt_waiter.Result;
                }
        public async Task <Nethereum.RPC.Eth.DTOs.TransactionReceipt> PollReceipt(string transactionHash)
        {
            try
            {
                //var request = new Nethereum.RPC.Eth.Transactions.EthGetTransactionReceipt(web3);
                Nethereum.RPC.Eth.DTOs.TransactionReceipt receipt = await web3.Eth.DeployContract.TransactionManager.TransactionReceiptService.PollForReceiptAsync(transactionHash);

                //receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
                while (receipt == null)
                {
                    Thread.Sleep(5000);
                    receipt = await web3.TransactionManager.TransactionReceiptService.PollForReceiptAsync(transactionHash);
                }

                return(receipt);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Exemplo n.º 7
0
        public async Task <(string, DateTime)> CriarTransacoesAsync(string hashDoArquivo, string assJwt)
        {
            var senderAddress = "0x3c30BdDA887BeE28e6D09F801E3f6B0E7AE876F6";
            var client        = new Nethereum.JsonRpc.Client.RpcClient(new Uri("https://ropsten.infura.io/v3/69d76e2ed4cf459091d6113d9f18b0c0"));
            var account       = new Nethereum.Web3.Accounts.Account("5C634792510B7D93283FA4A03D6B396CEECE19E860BF0E0632C54BE513B10259");
            var web3          = new Nethereum.Web3.Web3(account, client);

            var contractAddress = "0xF6676908F5E3580C7bFF689dF739D843607DBc6c";
            var abi             = @"[{'constant':false,'inputs':[{'name':'hashArquivo','type':'string'},{'name':'assinatura','type':'string'}],'name':'adicionarAssinatura','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'hashArquivo','type':'string'}],'name':'removerAssinatura','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[],'name':'removeSdaContract','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'empresa','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'hashArquivo','type':'string'}],'name':'buscarAssinatura','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'inputs':[{'name':'_empresa','type':'string'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'},{'anonymous':false,'inputs':[{'indexed':true,'name':'hashArquivo','type':'string'},{'indexed':true,'name':'assinatura','type':'string'},{'indexed':false,'name':'datahora','type':'uint256'}],'name':'AssinaturaAdicionada','type':'event'}]";

            var contract = web3.Eth.GetContract(abi, contractAddress);
            var adicionarAssinaturaFunc = contract.GetFunction("adicionarAssinatura");

            try
            {
                var trx = await adicionarAssinaturaFunc.SendTransactionAsync(
                    senderAddress,
                    new HexBigInteger(900000),
                    new HexBigInteger(1000),
                    new HexBigInteger(0),
                    hashDoArquivo,
                    assJwt);

                // Verificar se já foi processada

                Nethereum.RPC.Eth.DTOs.TransactionReceipt receiptAdd = null;
                while (receiptAdd == null)
                {
                    receiptAdd = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(trx);

                    System.Threading.Thread.Sleep(1000);
                }

                return(trx, DateTime.Now);
            }
            catch (Exception ex)
            {
                return(string.Empty, DateTime.Now);
            }
        }