Ejemplo n.º 1
0
        public async Task <List <DltBlock> > GetRecentBlocks(int numberOfBlocks)
        {
            ulong blockCount       = (ulong)numberOfBlocks;
            var   web3             = new Nethereum.Geth.Web3Geth();
            ulong startBlockNumber = 0;
            ulong endBlockNumber   = startBlockNumber + blockCount;
            var   maxBlockNumber   = await this.GetLatestBlockNumber();

            startBlockNumber = maxBlockNumber < blockCount ? 1 : maxBlockNumber - blockCount;
            endBlockNumber   = maxBlockNumber;

            List <DltBlock> dltBlocks = new List <DltBlock>();
            Dictionary <string, SmartContractTransaction> databaseDataDict = new Dictionary <string, SmartContractTransaction>();
            List <string> transactionHashesList = new List <string>();

            for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
            {
                var blockParameter = new BlockParameter(blockNumber);
                var blockEth       = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);

                var      trans         = blockEth.Transactions;
                int      txCount       = trans.Length;
                DltBlock block         = null;
                DateTime blockDatetime = Helper.UnixTimeStampToDateTime((double)blockEth.Timestamp.Value);
                block = new DltBlock
                {
                    BlockNumber      = blockNumber,
                    TransactionCount = txCount,
                    BlockDatetime    = blockDatetime,
                    BlockHash        = blockEth.BlockHash,
                    Difficulty       = (ulong)blockEth.Difficulty.Value,
                    GasLimit         = (ulong)blockEth.GasLimit.Value,
                    GasUsed          = (ulong)blockEth.GasUsed.Value,
                    Size             = (ulong)blockEth.Size.Value
                };
                if (block.TransactionCount > 0)
                {
                    block.DltTransactions = new List <DltBlockTransaction>();
                    foreach (var transaction in blockEth.Transactions)
                    {
                        DltBlockTransaction dltTransaction = new DltBlockTransaction()
                        {
                            From            = transaction.From,
                            To              = transaction.To,
                            Gas             = (ulong)transaction.Gas.Value,
                            GasPrice        = (ulong)transaction.GasPrice.Value,
                            Nonce           = (ulong)transaction.Nonce.Value,
                            Value           = (ulong)transaction.Value.Value,
                            TransactionHash = transaction.TransactionHash
                        };
                        block.DltTransactions.Add(dltTransaction);
                        transactionHashesList.Add(transaction.TransactionHash);
                    }
                }
                dltBlocks.Add(block);
            }
            dltBlocks = await AddDatabaseDataToDltBlock(dltBlocks, transactionHashesList);

            return(dltBlocks.OrderByDescending(block => block.BlockNumber).ToList());
        }
Ejemplo n.º 2
0
        private async Task <ulong> GetLatestBlockNumber()
        {
            var web3           = new Nethereum.Geth.Web3Geth();
            var maxBlockNumber = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();

            ulong blockNumber = 0;

            ulong.TryParse(maxBlockNumber.Value.ToString(), out blockNumber);
            return(blockNumber);
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> PostDataInBlocks([FromBody] DataModel dataModel, [FromQuery] string uniqueKey)
        {
            GenericResponse <DataModel> response = new GenericResponse <DataModel>();

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var userModel = getPrivateKey(uniqueKey);

            if (userModel != null)
            {
                var account = new Account(userModel.PrimaryKey);
                var web3    = new Nethereum.Geth.Web3Geth(account, "https://ropsten.infura.io/v3/1e1358ffb3db40f69b7bdb6c51d016b6");

                BlockChainController blockChainController = new BlockChainController(web3, account);

                try
                {
                    var reciept = await blockChainController.SetContractData(dataModel, uniqueKey);



                    if (reciept.Item1 != null)
                    {
                        response.HasError   = false;
                        response.Messege    = "Sucessfull";
                        response.Result     = dataModel;
                        response.StatusCode = 200;
                    }
                    else
                    {
                        response.HasError   = true;
                        response.Messege    = "unsucessfull";
                        response.Result     = null;
                        response.StatusCode = 400;
                    }
                }
                catch (Exception e)
                {
                    response.Messege = e.ToString();
                }
            }
            else
            {
                response.HasError   = true;
                response.Messege    = "user does not exist";
                response.Result     = null;
                response.StatusCode = 400;
            }

            return(Ok(response));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Start a miner and get back the result. Not needed in a live environment, but we're in testrpc now
        /// </summary>
        /// <param name="web3"></param>
        /// <param name="transactionHash"></param>
        /// <returns></returns>
        private static Nethereum.RPC.Eth.DTOs.TransactionReceipt MineAndGetReceipt(Nethereum.Web3.Web3 web3, string transactionHash)
        {
            var web3Geth     = new Nethereum.Geth.Web3Geth();
            var miningResult = web3Geth.Miner.Start.SendRequestAsync(6).Result;
            var receipt      = web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash).Result;

            while (receipt == null)
            {
                Thread.Sleep(1000);
                receipt = web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash).Result;
            }

            miningResult = web3Geth.Miner.Stop.SendRequestAsync().Result;
            return(receipt);
        }
Ejemplo n.º 5
0
        async Task <string> SendTransactionToContract(params object[] values)
        {
            Web3 web3            = new Nethereum.Geth.Web3Geth(new Account(_privateKey), _providerUrl);
            var  transactionHash = await web3.Eth.GetContract(_abi, _contractAddress).GetFunction(_functionName)
                                   .SendTransactionAsync(_address, new HexBigInteger(BigInteger.Parse(_defaultGas)),
                                                         new HexBigInteger(BigInteger.Parse(_messageValue)), values);

            var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);

            while (receipt == null)
            {
                Thread.Sleep(1000);
                receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
            }
            return(receipt.TransactionHash);
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> GetWalletTransaction(string uniqueKey)
        {
            GenericResponse <List <TransactionModel> > response = new GenericResponse <List <TransactionModel> >();

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }


            var credential = getPrivateKey(uniqueKey);

            if (credential != null)
            {
                var account = new Account(credential.PrimaryKey);
                var web3    = new Nethereum.Geth.Web3Geth(account, "https://ropsten.infura.io/v3/1e1358ffb3db40f69b7bdb6c51d016b6");

                BlockChainController blockChainController = new BlockChainController(web3, account);

                try
                {
                    var transactionList = await blockChainController.GetTransaction(account.Address);

                    response.HasError   = false;
                    response.Messege    = "successfull";
                    response.Result     = transactionList;
                    response.StatusCode = 200;
                }
                catch (Exception e)
                {
                    response.HasError   = true;
                    response.Messege    = e.ToString();
                    response.Result     = null;
                    response.StatusCode = 400;
                }
            }
            else
            {
                response.HasError   = true;
                response.Messege    = "User does not exist";
                response.Result     = null;
                response.StatusCode = 400;
            }

            return(Ok(response));
        }
Ejemplo n.º 7
0
        // Send balance request using Web3, note that Web3 uses Task and await
        private async Task GetBalanceByWeb3(string address, UnityAction <decimal> callback)
        {
            Debug.Log("StaticWalletBalance:GetBalanceByWeb3()");
            // Create a Web3 object using Nethereum lib
            var web3 = new Nethereum.Web3.Web3(WalletSettings.current.networkUrl);
            // Use GetBalance request
            var balance = await web3.Eth.GetBalance.SendRequestAsync(address);

            Debug.Log("StaticWalletBalance:GetBalanceByWeb3 - balance returned");


            var web3geth = new Nethereum.Geth.Web3Geth(WalletSettings.current.networkUrl);
            var result   = await web3geth.Miner.Start.SendRequestAsync();

            Debug.Log(result);

            callback(Nethereum.Util.UnitConversion.Convert.FromWei(balance, 18));
        }
Ejemplo n.º 8
0
        static async Task RecordTransaction(string deviceId, string recordData)
        {
            try
            {
                Console.WriteLine("Submitting transaction to Blockchain...");
                //var rpcEndpoint = Environment.GetEnvironmentVariable("RPCENDPOINT");
                var rpcEndpoint = "http://40.118.229.191:8545";
                //var abi = @"[{'constant':true,'inputs':[],'name':'getState','outputs':[{'name':'state','type':'uint8'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'deviceIdentifier','type':'string'},{'name':'data','type':'string'}],'name':'record','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'data','type':'string'}],'name':'settle','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'data','type':'string'}],'name':'verify','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'}]";
                //var binary = "0x" + "608060405234801561001057600080fd5b506104ff806100206000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631865c57d14610067578063470bb62b14610098578063baf312eb1461015f578063bb9c6c3e146101e0575b600080fd5b34801561007357600080fd5b5061007c610261565b604051808260ff1660ff16815260200191505060405180910390f35b3480156100a457600080fd5b50610145600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610283565b604051808215151515815260200191505060405180910390f35b34801561016b57600080fd5b506101c6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610321565b604051808215151515815260200191505060405180910390f35b3480156101ec57600080fd5b50610247600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506103a8565b604051808215151515815260200191505060405180910390f35b6000600160009054906101000a900460ff16600281111561027e57fe5b905090565b6000826000908051906020019061029b92919061042e565b5081600290805190602001906102b292919061042e565b50336001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548160ff0219169083600281111561031257fe5b02179055506001905092915050565b6000816006908051906020019061033992919061042e565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600160006101000a81548160ff0219169083600281111561039a57fe5b021790555060019050919050565b600081600490805190602001906103c092919061042e565b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060006101000a81548160ff0219169083600281111561042057fe5b021790555060019050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061046f57805160ff191683800117855561049d565b8280016001018555821561049d579182015b8281111561049c578251825591602001919060010190610481565b5b5090506104aa91906104ae565b5090565b6104d091905b808211156104cc5760008160009055506001016104b4565b5090565b905600a165627a7a72305820b5197f569531ac9920f3c33b09dfd1aaab4a0348a8216d2939882ed14527a4350029";
                var abi    = @"[{'constant':true,'inputs':[],'name':'getState','outputs':[{'name':'state','type':'uint8'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'data','type':'string'}],'name':'settle','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'data','type':'string'}],'name':'verify','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'inputs':[{'name':'deviceIdentifier','type':'string'},{'name':'data','type':'string'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'}]";
                var binary = "0x" + "608060405234801561001057600080fd5b50604051610519380380610519833981018060405281019080805182019291906020018051820192919050505081600090805190602001906100539291906100d6565b50806002908051906020019061006a9291906100d6565b50336001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548160ff021916908360028111156100ca57fe5b0217905550505061017b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061011757805160ff1916838001178555610145565b82800160010185558215610145579182015b82811115610144578251825591602001919060010190610129565b5b5090506101529190610156565b5090565b61017891905b8082111561017457600081600090555060010161015c565b5090565b90565b61038f8061018a6000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631865c57d1461005c578063baf312eb1461008d578063bb9c6c3e1461010e575b600080fd5b34801561006857600080fd5b5061007161018f565b604051808260ff1660ff16815260200191505060405180910390f35b34801561009957600080fd5b506100f4600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101b1565b604051808215151515815260200191505060405180910390f35b34801561011a57600080fd5b50610175600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610238565b604051808215151515815260200191505060405180910390f35b6000600160009054906101000a900460ff1660028111156101ac57fe5b905090565b600081600690805190602001906101c99291906102be565b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600160006101000a81548160ff0219169083600281111561022a57fe5b021790555060019050919050565b600081600490805190602001906102509291906102be565b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060006101000a81548160ff021916908360028111156102b057fe5b021790555060019050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102ff57805160ff191683800117855561032d565b8280016001018555821561032d579182015b8281111561032c578251825591602001919060010190610311565b5b50905061033a919061033e565b5090565b61036091905b8082111561035c576000816000905550600101610344565b5090565b905600a165627a7a72305820533027bbe7ff6dba6aa8c76061443be069b94d6762bfa54f53517dde2c276bad0029";

                //Console.WriteLine($"Connecting to {rpcEndpoint}");
                var tempWeb3      = new Nethereum.Geth.Web3Geth(rpcEndpoint);
                var senderAddress = "0x7edc35c275db44bd58eb958d7a1cdee2095439ca"; //await tempWeb3.Eth.CoinBase.SendRequestAsync();

                Console.WriteLine($"Sender Address => {senderAddress}");
                var account = new ManagedAccount(senderAddress, "password");
                var web3    = new Nethereum.Geth.Web3Geth(account, rpcEndpoint);

                var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, binary, senderAddress, new HexBigInteger(900000), null, null, deviceId, recordData);

                Console.WriteLine($"Added Blockchain contract transaction => {transactionHash}");

                /*var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
                 * var contractAddress = receipt.ContractAddress;
                 * Console.WriteLine($"Contract Address => {contractAddress}");
                 * var contract = web3.Eth.GetContract(abi, contractAddress);
                 * var recordFunction = contract.GetFunction("record");
                 * var getStateFunction = contract.GetFunction("getState");
                 *
                 * transactionHash = await recordFunction.SendTransactionAsync(
                 *  senderAddress, new HexBigInteger(900000), null, deviceId, recordData);
                 * Console.WriteLine($"[Record] Transaction Hash  => {transactionHash}");
                 * receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
                 *
                 * var result = await getStateFunction.CallAsync<int>();
                 * Console.WriteLine($"Added Blockchain transaction => {result}");*/
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Ejemplo n.º 9
0
        public async Task <DltBlock> GetLatestBlock()
        {
            var   web3        = new Nethereum.Geth.Web3Geth();
            ulong blockNumber = await this.GetLatestBlockNumber();

            var blockParameter = new BlockParameter(blockNumber);
            var blockEth       = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);

            var      trans         = blockEth.Transactions;
            int      txCount       = trans.Length;
            DltBlock block         = null;
            DateTime blockDatetime = Helper.UnixTimeStampToDateTime((double)blockEth.Timestamp.Value);

            block = new DltBlock
            {
                BlockNumber      = blockNumber,
                TransactionCount = txCount,
                BlockDatetime    = blockDatetime,
                BlockHash        = blockEth.BlockHash,
                Difficulty       = (ulong)blockEth.Difficulty.Value,
                GasLimit         = (ulong)blockEth.GasLimit.Value,
                GasUsed          = (ulong)blockEth.GasUsed.Value,
                Size             = (ulong)blockEth.Size.Value
            };
            if (block.TransactionCount > 0)
            {
                block.DltTransactions = new List <DltBlockTransaction>();
                foreach (var transaction in blockEth.Transactions)
                {
                    DltBlockTransaction dltTransaction = new DltBlockTransaction()
                    {
                        From            = transaction.From,
                        To              = transaction.To,
                        Gas             = (ulong)transaction.Gas.Value,
                        GasPrice        = (ulong)transaction.GasPrice.Value,
                        Nonce           = (ulong)transaction.Nonce.Value,
                        Value           = (ulong)transaction.Value.Value,
                        TransactionHash = transaction.TransactionHash
                    };
                    block.DltTransactions.Add(dltTransaction);
                }
            }
            return(block);
        }