public async Task <ITransationData> PriKeyQueryAsync(string gethConnectionUrl, IndexDBContext dbContext, ITransationData transationData, string ID, Func <ITransationData, IndexDB.IndexDBs, ITransationData> requiredData)
        {
            string IdPhotoData = null;
            //从索引数据库拿到交易哈希列表字符串
            var dataIndex = await GetTxHashFormIndexDBAsnyc(dbContext, ID);

            //拆分成交易哈希字符串数字
            string[] TxHashs = dataIndex.TransationHash.Trim().Split(' ');
            //使用交易哈希得到私链中保存的图片数据片段
            var web3 = new Web3Geth(gethConnectionUrl);

            foreach (var Txhash in TxHashs)
            {
                var result = await web3.Eth.Transactions
                             .GetTransactionByHash
                             .SendRequestAsync(Txhash);

                //拼接片段
                IdPhotoData += new Nethereum.Hex.HexConvertors
                               .HexUTF8StringConvertor()
                               .ConvertFromHex(result.Input);
            }
            //将数据转换成传输模型
            transationData.IdPhotoData = IdPhotoData;
            transationData.ID          = dataIndex.ID;
            transationData.Address     = dataIndex.AccountAddress;
            //如果没有委托,直接返回
            if (requiredData == null)
            {
                return(transationData);
            }
            //使用委托使得用户可以实现传输模型接口,自定义需要获得的数据
            transationData = requiredData.Invoke(transationData, dataIndex);
            return(transationData);
        }
示例#2
0
        public async Task <bool> ShouldSignAndSendRawTransaction()
        {
            var privateKey     = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var senderAddress  = "0x12890d2cce102216644c59daE5baed380d84830c";
            var receiveAddress = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var web3           = new Web3Geth();

            var txCount = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);

            var encoded = Web3.OfflineTransactionSigner.SignTransaction(privateKey, receiveAddress, 10,
                                                                        txCount.Value);

            Assert.True(Web3.OfflineTransactionSigner.VerifyTransaction(encoded));

            Debug.WriteLine(Web3.OfflineTransactionSigner.GetSenderAddress(encoded));
            Assert.Equal(senderAddress.EnsureHexPrefix().ToLower(), Web3.OfflineTransactionSigner.GetSenderAddress(encoded).EnsureHexPrefix().ToLower());

            var txId = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + encoded);

            await web3.Miner.Start.SendRequestAsync(4);

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

            while (receipt == null)
            {
                Thread.Sleep(1000);
                receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId);
            }
            await web3.Miner.Stop.SendRequestAsync();

            Assert.Equal(txId, receipt.TransactionHash);
            return(true);
        }
示例#3
0
        public async Task ProdContract()
        {
            var account  = "0x12890d2cce102216644c59daE5baed380d84830c";
            var pass     = "******";
            var byteCode =
                "0x606060405260405161069d38038061069d833981016040528080518201919060200150505b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055508060036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009e57805160ff19168380011785556100cf565b828001600101855582156100cf579182015b828111156100ce5782518260005055916020019190600101906100b0565b5b5090506100fa91906100dc565b808211156100f657600081815060009055506001016100dc565b5090565b50505b506105918061010c6000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480632d202d24146100685780634ba200501461009b578063893d20e81461011b578063a0e67e2b14610159578063d5d1e770146101b557610063565b610002565b346100025761008360048080359060200190919050506101df565b60405180821515815260200191505060405180910390f35b34610002576100ad600480505061027a565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b346100025761012d6004805050610336565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b346100025761016b6004805050610365565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b34610002576101c760048050506103f7565b60405180821515815260200191505060405180910390f35b60003373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156102415760009050610275565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555060019050610275565b919050565b602060405190810160405280600081526020015060036000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103275780601f106102fc57610100808354040283529160200191610327565b820191906000526020600020905b81548152906001019060200180831161030a57829003601f168201915b50505050509050610333565b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610362565b90565b602060405190810160405280600081526020015060006000508054806020026020016040519081016040528092919081815260200182805480156103e857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103b4575b505050505090506103f4565b90565b60003373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610459576000905061058e565b600060005080548060010182818154818355818115116104ab578183600052602060002091820191016104aa919061048c565b808211156104a6576000818150600090555060010161048c565b5090565b5b5050509190906000526020600020900160005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506001905061058e565b9056";
            var abi = @"[{""constant"":false,""inputs"":[{""name"":""nextOwner"",""type"":""address""}],""name"":""setNextOwner"",""outputs"":[{""name"":""set"",""type"":""bool""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getProduct"",""outputs"":[{""name"":""product"",""type"":""string""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getOwner"",""outputs"":[{""name"":""owner"",""type"":""address""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getOwners"",""outputs"":[{""name"":""owners"",""type"":""address[]""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[],""name"":""confirmOwnership"",""outputs"":[{""name"":""confirmed"",""type"":""bool""}],""payable"":false,""type"":""function""},{""inputs"":[{""name"":""productDigest"",""type"":""string""}],""type"":""constructor""}]";

            var w3 = new Web3Geth(new ManagedAccount(account, pass));

            //var accUnlocked = await w3.Personal.UnlockAccount.SendRequestAsync(account, pass, new HexBigInteger(1000));
            //issue ran out of gas (putting 900 * 1000 instead of 200 * 1000 fixes this)

            var contractHash = await w3.Eth.DeployContract.SendRequestAsync(abi, byteCode, account, new HexBigInteger(900 * 1000), "My product");

            var receipt = await w3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(contractHash);

            while (receipt == null)
            {
                await Task.Delay(1000);

                receipt = await w3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(contractHash);
            }

            var contract = w3.Eth.GetContract(abi, receipt.ContractAddress);
            var code     = await w3.Eth.GetCode.SendRequestAsync(receipt.ContractAddress);

            Assert.True(!string.IsNullOrEmpty(code) && code.Length > 3);

            var function = contract.GetFunction("getProduct");
            var result   = await function.CallAsync <string>();

            Assert.Equal("My product", result);
        }
        public async Task ShouldSendSignTransaction()
        {
            var contractByteCode =
                "0x6060604052604060405190810160405280600a81526020017f4d756c7469706c6965720000000000000000000000000000000000000000000081526020015060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008c57805160ff19168380011785556100bd565b828001600101855582156100bd579182015b828111156100bc57825182600050559160200191906001019061009e565b5b5090506100e891906100ca565b808211156100e457600081815060009055506001016100ca565b5090565b5050604051602080610303833981016040528080519060200190919050505b806000600050819055505b506101e2806101216000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806340490a901461004f57806375d0c0dc14610072578063c6888fa1146100ed5761004d565b005b61005c6004805050610119565b6040518082815260200191505060405180910390f35b61007f6004805050610141565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156100df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610103600480803590602001909190505061012b565b6040518082815260200191505060405180910390f35b60006000600050549050610128565b90565b60006000600050548202905061013c565b919050565b60016000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101da5780601f106101af576101008083540402835291602001916101da565b820191906000526020600020905b8154815290600101906020018083116101bd57829003601f168201915b50505050508156";

            var abi =
                @"[{""constant"":true,""inputs"":[],""name"":""getMultiplier"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""constant"":true,""inputs"":[],""name"":""contractName"",""outputs"":[{""name"":"""",""type"":""string""}],""type"":""function""},{""constant"":false,""inputs"":[{""name"":""a"",""type"":""uint256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""uint256""}],""type"":""constructor""}]";


            var privateKey    = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";

            var web3 = new Web3Geth(new Account(privateKey));

            var receipt = await
                          web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, contractByteCode, senderAddress,
                                                                                    new HexBigInteger(900000), null, 7);

            var contractAddress  = receipt.ContractAddress;
            var contract         = web3.Eth.GetContract(abi, contractAddress);
            var multiplyFunction = contract.GetFunction("multiply");

            var transactions = new Func <Task <string> >[] {
                () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 69),
                () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 7),
                () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 8),
                () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 8)
            };

            var transactionsReceipts = await web3.TransactionManager.TransactionReceiptService.SendRequestsAsync(transactions);

            Assert.Equal(4, transactionsReceipts.Count);
        }
示例#5
0
        public static async Task <bool> Login(string username, string password)
        {
            try
            {
                await using (db = new DropCoinDbContext())
                {
                    User = await db.Users.FirstOrDefaultAsync(p => p.UserName == username);

                    Account = new ManagedAccount(User.DrpAddress, password);
                    Web3    = new Web3Geth(Account, RpcUrl);

                    if (await Web3.Personal.UnlockAccount.SendRequestAsync(Account.Address, Account.Password, 120))
                    {
                        return(true);
                    }

                    return(false);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                return(false);
            }
        }
示例#6
0
        public async System.Threading.Tasks.Task <ActionResult> CreateAsync(EthereumContractViewModel ethereumContractViewModelViewModel)
        {
            string fileHash;

            if (ModelState.IsValid)
            {
                using (var md5 = MD5.Create())
                {
                    var hash = md5.ComputeHash(ethereumContractViewModelViewModel.FileUpload.InputStream);
                    fileHash = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
                }

                var senderAddress = "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941";
                var password      = "******";
                var abi           = @"[{'constant':true,'inputs':[],'name':'getActive','outputs':[{'name':'','type':'bool'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'_active','type':'bool'}],'name':'setActive','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'getDocument','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'inputs':[{'name':'_requester','type':'address'},{'name':'_recipient','type':'address'},{'name':'_document','type':'string'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'}]";

                var byteCode = "608060405234801561001057600080fd5b506040516103443803806103448339810160409081528151602080840151928401516001805461010060a860020a031916610100600160a060020a03808716919091029190911790915560028054600160a060020a03191691861691909117905590930180519193909161008a9160009190840190610093565b5050505061012e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100d457805160ff1916838001178555610101565b82800160010185558215610101579182015b828111156101015782518255916020019190600101906100e6565b5061010d929150610111565b5090565b61012b91905b8082111561010d5760008155600101610117565b90565b6102078061013d6000396000f3006080604052600436106100555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416629ebb10811461005a578063acec338a14610083578063b6f3f14d1461009f575b600080fd5b34801561006657600080fd5b5061006f610129565b604080519115158252519081900360200190f35b34801561008f57600080fd5b5061009d6004351515610132565b005b3480156100ab57600080fd5b506100b4610145565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ee5781810151838201526020016100d6565b50505050905090810190601f16801561011b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60015460ff1690565b6001805460ff1916911515919091179055565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156101d15780601f106101a6576101008083540402835291602001916101d1565b820191906000526020600020905b8154815290600101906020018083116101b457829003601f168201915b50505050509050905600a165627a7a723058200425d4931a5ca733f20ef9228d18cb0c8d3e62f794101a25813ca3fcb04d8d070029";

                var account = new ManagedAccount(senderAddress, password);
                var web3    = new Web3(account);

                web3.TransactionManager.DefaultGas      = BigInteger.Parse("290000");
                web3.TransactionManager.DefaultGasPrice = Transaction.DEFAULT_GAS_PRICE;

                var webGeth = new Web3Geth(account);

                webGeth.TransactionManager.DefaultGas      = BigInteger.Parse("290000");
                webGeth.TransactionManager.DefaultGasPrice = Transaction.DEFAULT_GAS_PRICE;

                var unlockAccount = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, 120);

                await webGeth.Miner.Start.SendRequestAsync(6);

                var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new Nethereum.Hex.HexTypes.HexBigInteger(120), new Nethereum.Hex.HexTypes.HexBigInteger(120), "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941", "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941", fileHash);

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

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

                var mineResult = await webGeth.Miner.Stop.SendRequestAsync();

                var contractAddress = receipt.ContractAddress;

                var contract = web3.Eth.GetContract(abi, contractAddress);

                EthereumContractViewModel EthereumContractViewModel = new EthereumContractViewModel()
                {
                    ContractID = ethereumContractViewModelViewModel.ContractID
                };
                _EthereumContractRepository.Add(EthereumContractViewModel);

                return(RedirectToAction("Index"));
            }

            return(View(ethereumContractViewModelViewModel));
        }
示例#7
0
 public EthereumOracleConnector(string secret, string endpoint, string contractAddress)
 {
     this.contractAddress = contractAddress;
     account  = new Account(secret);
     web3     = new Web3Geth(new Account(secret), endpoint);
     contract = web3.Eth.GetContract(abi, contractAddress);
 }
示例#8
0
        protected virtual async Task <TransactionReceipt> MineAndGetReceiptAsync(Web3 web3, string transactionHash, bool isMining)
        {
            bool miningResult = true;
            var  web3Geth     = new Web3Geth();

            if (isMining)
            {
                miningResult = await web3Geth.Miner.Start.SendRequestAsync(20);

                // geth 1.6+ this is not working
                //miningResult.Should().BeTrue();
            }

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

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

                var unlockResult =
                    await web3.Personal.UnlockAccount.SendRequestAsync(AccountAddress, PassPhrase, 120);

                unlockResult.Should().BeTrue();
            }

            if (isMining)
            {
                miningResult = await web3Geth.Miner.Stop.SendRequestAsync(20);

                //miningResult.Should().BeTrue();
            }

            return(receipt);
        }
示例#9
0
        public async Task <BigInteger> GetTransactionCountAsync(string senderAddress)
        {
            Web3Geth Web3   = new Web3Geth(url);
            var      result = await Web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);

            return(result.Value);
        }
示例#10
0
        public static void BindCommonServices(this ContainerBuilder ioc)
        {
            ioc.Register(x =>
            {
                var resolver = x.Resolve <IComponentContext>();
                var settings = resolver.Resolve <BaseSettings>();
                var web3     = new Web3(settings.EthereumUrl);
                web3.Client.OverridingRequestInterceptor = new SignatureInterceptor(resolver.Resolve <ISignatureApi>(), web3, settings);

                return(web3);
            }).SingleInstance();

            ioc.Register(x =>
            {
                var resolver = x.Resolve <IComponentContext>();
                var web3     = new Web3Geth(resolver.Resolve <BaseSettings>().EthereumUrl);
                return(web3);
            }).SingleInstance();

            ioc.RegisterType <ContractService>().As <IContractService>();
            ioc.RegisterType <PaymentService>().As <IPaymentService>();
            ioc.RegisterType <TransactionService>().As <ITransactionService>();
            ioc.RegisterType <UserContractQueueService>().As <IUserContractQueueService>().SingleInstance();

            ioc.BindApiProviders();
        }
        async Task <string> DeployContract()
        {
            var web3 = new Web3(_providerUrl);

            web3.TransactionManager.DefaultGas      = BigInteger.Parse(_defaultGas);
            web3.TransactionManager.DefaultGasPrice = Nethereum.Signer.Transaction.DEFAULT_GAS_PRICE;

            var unlockAccountResult = await web3.Personal.UnlockAccount.SendRequestAsync(_senderAddress, _password, _unlockAccountDuration);

            var web3Geth        = new Web3Geth(web3.Client);
            var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(_abi, _byteCode, _senderAddress, GetSmartContractArgs());

            var mineResult = await web3Geth.Miner.Start.SendRequestAsync(6);

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

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

            mineResult = await web3Geth.Miner.Stop.SendRequestAsync();

            return(receipt.ContractAddress);
        }
示例#12
0
        public async void ShouldBeAbleToReplaceContractToAccessState()
        {
            if (_ethereumClientIntegrationFixture.EthereumClient == EthereumClient.Geth)
            {
                var account = EthereumClientIntegrationFixture.GetAccount();
                var web3    = new Web3Geth(account, _ethereumClientIntegrationFixture.GetHttpUrl());

                var deploymentMessage = new SimpleStorageDeployment()
                {
                    Owner = EthereumClientIntegrationFixture.AccountAddress
                };

                var deploymentHandler = web3.Eth.GetContractDeploymentHandler <SimpleStorageDeployment>();
                var deploymentReceipt = await deploymentHandler.SendRequestAndWaitForReceiptAsync(deploymentMessage);

                var stateChanges = new Dictionary <string, StateChange>();
                stateChanges.Add(deploymentReceipt.ContractAddress,
                                 new StateChange()
                {
                    Code = SimpleStorage2DeployedByteCode.EnsureHexPrefix()
                });
                var result = await web3.GethEth.Call.SendRequestAsync(
                    new GetOwnerFunction().CreateTransactionInput(deploymentReceipt.ContractAddress),
                    BlockParameter.CreateLatest(), stateChanges);

                var output = new GetOwnerFunctionOutput();
                output = output.DecodeOutput(result);
                Assert.True(output.Owner.IsTheSameAddress(EthereumClientIntegrationFixture.AccountAddress));
            }
        }
        public async Task <bool> SaveDataAsync(string gethConnectionUrl, IAccountUnlock accuntUnlock, IndexDBContext dbContext, IndexDBs indexDB, ITransationData transationData)
        {
            ISuitableBlockData suitableData = new SuitableBlockData(31744);
            //获取适合保存到以太坊区块中的字符串长度
            var photoStrings = suitableData.GetArrayListForSaving(transationData.IdPhotoData);

            //保存到以太坊网络中
            var    web3        = new Web3Geth(gethConnectionUrl);
            string resultHashs = null;

            foreach (var photoString in photoStrings)
            {
                var input = new TransactionInput(new HexUTF8String(photoString).HexValue, new HexBigInteger("0xffffff"), transationData.Address);
                await accuntUnlock.UnlockAccountAsync(gethConnectionUrl, transationData.Address, transationData.Password);

                resultHashs += await web3.Eth.Transactions
                               .SendTransaction
                               .SendRequestAsync(input) + " ";
            }

            //将交易哈希与个人信息保存到索引数据库
            var isSuccessful = await SaveTxHashToIndexDB(dbContext, indexDB, transationData, resultHashs);

            if (!isSuccessful)
            {
                return(false);
            }
            return(true);
        }
        private static async Task TestService(string fromAddress, string password)
        {
            var account = new ManagedAccount(fromAddress, password);

            var web3 = new Web3Geth(account, Endpoint);

            bool   deployNewContract = true;
            string contractAddress   = null;

            if (deployNewContract)
            {
                var gasForDeployContract = new HexBigInteger(3000000);
                Console.WriteLine("Deploying contract");
                contractAddress = await SimpleStorageContractService.DeployContractAsync(web3, fromAddress, 1, "mstack.nl", null, gasForDeployContract);

                Console.WriteLine($"Deploying contract done, address = {contractAddress}");
            }

            // Create an instance from the SimpleStorageContractService service which abstracts all calls to the SmartContract.
            ISimpleStorageContractService service = new SimpleStorageContractService(web3, contractAddress);

            var setNumberResult = await service.ExecuteTransactionAsync(srv => srv.SetNumberAsync(fromAddress, 500));

            var getNumberValue = await service.GetNumberCallAsync(fromAddress);

            Console.WriteLine($"The stored number value is '{getNumberValue}'.");

            var setStringResult = await service.ExecuteTransactionAsync(srv => srv.SetStringAsync(fromAddress, "mstack.nl test"));

            var getStringValue = await service.GetStringCallAsync(fromAddress);

            Console.WriteLine($"The stored string value is '{getStringValue}'.");
        }
示例#15
0
 public EthereumConnector(string oracleAddress, string endpoint)
 {
     web3             = new Web3Geth(endpoint);
     contract         = web3.Eth.GetContract(abi, oracleAddress);
     logDepositEvent  = contract.GetEvent("logDeposit");
     logWithdrawEvent = contract.GetEvent("logWithdrawal");
 }
示例#16
0
        public async Task ShouldBeAbleToDeployAContractUsingPersonalUnlock()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var password      = "******";
            var abi           = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode      =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3(new ManagedAccount(senderAddress, password), ClientFactory.GetClient());

            var transactionPolling = new TransactionReceiptPollingService(web3);

            var web3Geth = new Web3Geth(ClientFactory.GetClient());
            await web3Geth.Miner.Start.SendRequestAsync();

            var contractAddress = await
                                  transactionPolling.DeployContractAndGetAddressAsync(
                () => web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), multiplier)
                );

            await web3Geth.Miner.Stop.SendRequestAsync();

            var contract = web3.Eth.GetContract(abi, contractAddress);

            var multiplyFunction = contract.GetFunction("multiply");

            var result = await multiplyFunction.CallAsync <int>(7);

            Assert.Equal(49, result);
        }
示例#17
0
        public async void ShouldDeployUsingMultipleParameters()
        {
            var contractByteCode =
                "0x606060408181528060bd833960a090525160805160009182556001556095908190602890396000f3606060405260e060020a60003504631df4f1448114601c575b6002565b34600257608360043560015460005460408051918402909202808252915173ffffffffffffffffffffffffffffffffffffffff33169184917f841774c8b4d8511a3974d7040b5bc3c603d304c926ad25d168dacd04e25c4bed9181900360200190a3919050565b60408051918252519081900360200190f3";

            var abi =
                @"[{'constant':false,'inputs':[{'name':'a','type':'int256'}],'name':'multiply','outputs':[{'name':'r','type':'int256'}],'payable':false,'type':'function'},{'inputs':[{'name':'multiplier','type':'int256'},{'name':'another','type':'int256'}],'type':'constructor'},{'anonymous':false,'inputs':[{'indexed':true,'name':'a','type':'int256'},{'indexed':true,'name':'sender','type':'address'},{'indexed':false,'name':'result','type':'int256'}],'name':'Multiplied','type':'event'}]";

            var web3 = new Web3Geth(ClientFactory.GetClient());

            var gethTester = GethTesterFactory.GetLocal(web3);

            var transaction =
                await
                gethTester.Web3.Eth.DeployContract.SendRequestAsync(abi, contractByteCode,
                                                                    gethTester.Account, new HexBigInteger(900000), 7, 8);

            var receipt = await gethTester.GetTransactionReceipt(transaction);

            var contract = web3.Eth.GetContract(abi, receipt.ContractAddress);

            //get the function by name
            var multiplyFunction = contract.GetFunction("multiply");

            //do a function call (not transaction) and get the result
            var callResult = await multiplyFunction.CallAsync <int>(69);

            Assert.Equal(3864, callResult);
        }
示例#18
0
        public async Task ShouldBeAbleToDeployAContractUsingPrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var privateKey    = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var abi           = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode      =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3(new Account(privateKey), ClientFactory.GetClient());

            var web3Geth = new Web3Geth(ClientFactory.GetClient());
            await web3Geth.Miner.Start.SendRequestAsync();

            var transactionPolling = new TransactionReceiptPollingService(web3);

            //assumed client is mining already
            var contractAddress = await
                                  transactionPolling.DeployContractAndGetAddressAsync(
                () => web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), multiplier)
                );

            await web3Geth.Miner.Stop.SendRequestAsync();

            var contract = web3.Eth.GetContract(abi, contractAddress);

            var multiplyFunction = contract.GetFunction("multiply");

            var result = await multiplyFunction.CallAsync <int>(7);

            Assert.Equal(49, result);
        }
示例#19
0
        public async Task <TransactionReceipt> TransferEther(string fromAddr, string password, string toAddr, decimal amount)
        {
            var web3    = new Web3Geth(_ethUrl);
            var receipt = await _ethereumServices.TransferFund(web3, fromAddr, password, toAddr, amount);

            return(receipt);
        }
示例#20
0
        public async Task <string> IncreaseDisapprovalsAsync(string hash, string contractAddress, string contractABI)
        {
            string result = string.Empty;

            for (int i = 0; i <= ITERATIONS_TO_RETRY; i++)
            {
                try
                {
                    var account                  = new Account(MASTER_PRIVATEKEY);
                    var web3                     = new Web3Geth(account, RPC_CLIENT);
                    var contract                 = web3.Eth.GetContract(contractABI, contractAddress);
                    var function                 = contract.GetFunction("IncreaseDisapprovals");
                    Bytes32TypeEncoder enc       = new Bytes32TypeEncoder();
                    byte[]             bhash     = hash.HexToBytes(2, hash.Length);
                    BigInteger         gasPrice  = UnitConversion.Convert.ToWei(new BigDecimal(41), UnitConversion.EthUnit.Gwei);
                    HexBigInteger      hgasPrice = new HexBigInteger(gasPrice);
                    result = await function.SendTransactionAsync(MASTER_ADDRESS, new HexBigInteger(150000), hgasPrice, new HexBigInteger(0), new object[] { bhash });

                    break;
                }
                catch (Exception ex)
                {
                    telemetryClient.TrackException(ex);
                    telemetryClient.TrackTrace($"Retry #{i}, EXCEPTION: {ex.Message}. STACKTRACE: {ex.StackTrace}");
                    Thread.Sleep(TIME_TO_SLEEP_FOR_RETRY);
                    continue;
                }
            }
            return(result);
        }
示例#21
0
        //Create new account, returns account address
        //Triba se riješit plaintexta
        public async Task CreateNew(int userID, string password)
        {
            var web3 = new Web3Geth();
            await web3.Personal.NewAccount.SendRequestAsync(password);

            //save account and password on new database
        }
示例#22
0
        public async Task <string> CreateAccountAsync(string gethConnectionUrl, string password)
        {
            Web3Geth web3   = new Web3Geth(gethConnectionUrl);
            var      result = await web3.Personal.NewAccount.SendRequestAsync(password);

            return(result);
        }
示例#23
0
        public Contract(string senderAddress, string password)
        {
            this.AccountAddress = senderAddress;
            this.Password       = password;

            this.Web3 = new Web3Geth();
        }
        public async Task <string> NewAccountAsync(string Password)
        {
            Web3Geth Web3   = new Web3Geth(url);
            var      result = await Web3.Personal.NewAccount.SendRequestAsync(Password);

            return(result);
        }
示例#25
0
        public static async void Registration(string username, string password)
        {
            try
            {
                Web3 = new Web3Geth(RpcUrl);

                var address = await Web3.Personal.NewAccount.SendRequestAsync(password);

                await using (db = new DropCoinDbContext())
                {
                    var newUser = new Users()
                    {
                        UserName   = username,
                        Password   = password,
                        DrpAddress = address
                    };

                    await db.Users.AddAsync(newUser);

                    await db.SaveChangesAsync();
                }

                MessageBox.Show($"Регистрация прошла успешно.", "Информация", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
示例#26
0
        private async Task VerificaExistenciaSmartContract()
        {
            if (contractAddress == string.Empty)
            {
                account = new ManagedAccount(senderAddress, password);
                geth    = new Web3Geth(account, "http://localhost:8501");
                try
                {
                    var transactionHash = await geth.Eth.DeployContract.SendRequestAsync(abi, bytecode, senderAddress, new Nethereum.Hex.HexTypes.HexBigInteger(900000), 5);

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

                    while (receipt == null)
                    {
                        Thread.Sleep(5000);
                        receipt = await geth.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
                    }
                    contractAddress = receipt.ContractAddress;
                }
                catch (Exception chingadamadre)
                {
                    Console.WriteLine("Message: " + chingadamadre.Message);
                    Console.WriteLine("InnerException: " + chingadamadre.InnerException);
                    Console.WriteLine("Source: " + chingadamadre.Source);
                }
            }
        }
示例#27
0
        static void Main(string[] args)
        {
            _dic = args.Where(arg => arg != "DeployApp.csproj")
                   .Aggregate(new Dictionary <string, string>(),
                              (dic, arg) =>
            {
                dic.Add(arg.Split("=")[0], arg.Split("=")[1]);
                return(dic);
            });

            //EV.Clear();
            EV.WalletAddress  = _dic["-wa"];
            EV.WalletPassword = _dic["-wp"];
            if (!_dic.ContainsKey("-afn"))
            {
                _dic.Add("-afn", "Admin");
            }
            if (!_dic.ContainsKey("-aln"))
            {
                _dic.Add("-aln", "Admin");
            }
            if (_dic.ContainsKey("-rcp"))
            {
                EV.RcpClient = _dic["-rcp"];
            }
            if (_dic.ContainsKey("-lib"))
            {
                EV.LibraryAddress = _dic["--lib"];
            }
            if (_dic.ContainsKey("-gas"))
            {
                EV.Gas = new HexBigInteger(_dic["-gas"]);
            }

            _web3 = new Web3Geth(EV.GetNotNull(EV.DOCCHAIN_RCP_CLIENT));
            _gas  = new HexBigInteger(EV.GetNotNull(EV.DOCCHAIN_GAS));
            admin = new[]
            {
                _dic["-al"], _dic["-ap"], _dic["-afn"], _dic["-aln"], _dic.ContainsKey("-ai") ? _dic["-ai"] : " "
            };


            WriteLog("============ Deploy Contract App ===============", clear: true);
            WriteLog("\n\n------------ Library Deploying ------------------\n");
            if (_dic.ContainsKey("--lib"))
            {
                WriteLog("\nUse deployed library\n" +
                         $">>> Library Address: {EV.LibraryAddress}");
            }
            else
            {
                DeployLibrary().Wait();
            }

            WriteLog("\n\n------------ Contract Deploying ------------------\n");
            DeployContract().Wait();

            WriteLog("\n==================== Done ======================");
            Console.ReadKey();
        }
        public async Task ShouldIntereceptAndSendRawTransaction()
        {
            var privateKey             = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var senderAddress          = "0x12890d2cce102216644c59daE5baed380d84830c";
            var receiveAddress         = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var web3                   = new Web3Geth();
            var transactionInterceptor = new TransactionRequestToOfflineSignedTransactionInterceptor(senderAddress, privateKey, web3);

            web3.Client.OverridingRequestInterceptor = transactionInterceptor;

            var txId = await web3.Eth.Transactions.SendTransaction.SendRequestAsync(new RPC.Eth.DTOs.TransactionInput()
            {
                From = senderAddress, To = receiveAddress, Value = new Hex.HexTypes.HexBigInteger(10)
            });

            await web3.Miner.Start.SendRequestAsync(4);

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

            while (receipt == null)
            {
                Thread.Sleep(1000);
                receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId);
            }
            await web3.Miner.Stop.SendRequestAsync();

            Assert.Equal(txId, receipt.TransactionHash);
        }
示例#29
0
        private static async Task TestService(string fromAddress, string password)
        {
            var account = new ManagedAccount(fromAddress, password);

            var web3 = new Web3Geth(account);

            var gas = new HexBigInteger(900000);

            Console.WriteLine("DeployContract");
            string contractAddress = await UUIDProviderContractService.DeployContractAsync(web3, fromAddress, null, gas);

            IUUIDProviderContractService service = new UUIDProviderContractService(web3, contractAddress);

            byte[] uuid1 = await service.GenerateUUID4CallAsync(fromAddress, gas);

            var guid1 = new Guid(uuid1);

            Console.WriteLine($"guid1 = {guid1}");

            string trans = await service.GenerateUUID4Async(fromAddress, gas);

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

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

            byte[] uuid2 = await service.GenerateUUID4CallAsync(fromAddress, gas);

            var guid2 = new Guid(uuid2);

            Console.WriteLine($"guid2 = {guid2}");
        }
        public async Task ShouldOutputAllData()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var password      = "******";
            var abi           = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""customerName"",""type"":""string""},{""name"":""mobileNumber"",""type"":""int256""},{""name"":""serviceProvider"",""type"":""string""}],""name"":""addCustomer"",""outputs"":[{""name"":"""",""type"":""bool""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getAllCustomers"",""outputs"":[{""name"":""mobile"",""type"":""int256[]""},{""name"":""customerName"",""type"":""bytes32[]""},{""name"":""serviceProvider"",""type"":""bytes32[]""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""}],""name"":""get"",""outputs"":[{""name"":""mobile"",""type"":""int256""},{""name"":""customerName"",""type"":""bytes32""},{""name"":""serviceProvider"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""}],""name"":""getCustomersByMobileNumber"",""outputs"":[{""name"":""mobile"",""type"":""uint256""},{""name"":""customerName"",""type"":""bytes32""},{""name"":""serviceProvider"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""inputs"":[],""type"":""constructor""}]";
            var byteCode      = "606060405260006001556104f1806100176000396000f3606060405260e060020a60003504631df4f144811461004a5780634f5d64ce146100675780637da67ba814610121578063846719e0146102e15780638babdb681461034a575b610002565b346100025760076004350260408051918252519081900360200190f35b34610002576103746004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375050604080516020604435808b0135601f81018390048302840183019094528383529799893599909860649850929650919091019350909150819084018382808284375094965050505050505060408051606081018252600060208201819052918101829052838152610448855b6020015190565b34610002576040805160208082018352600080835283518083018552818152845180840186528281528551808501875283815286518086018852848152875180870189528581528851606081018a5286815296870186905286890186905285549851610388999597949693949293919290869080591061019e5750595b9080825280602002602001820160405280156101b5575b509450856040518059106101c65750595b9080825280602002602001820160405280156101dd575b509350856040518059106101ee5750595b908082528060200260200182016040528015610205575b509250600091505b858260ff1610156104e3576002600050600060006000508460ff168154811015610002579060005260206000209001600050548152602080820192909252604090810160002081516060810183528154808252600183015494820194909452600290910154918101919091528651909250869060ff8516908110156100025760209081029091018101919091528101518451859060ff851690811015610002576020908102909101015260408101518351849060ff851690811015610002576020908102909101015260019091019061020d565b34610002576004357f61626300000000000000000000000000000000000000000000000000000000007f53330000000000000000000000000000000000000000000000000000000000005b60408051938452602084019290925282820152519081900360600190f35b3461000257600080546004358252600260208190526040909220600181015492015490919061032c565b604080519115158252519081900360200190f35b604051808060200180602001806020018481038452878181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038352868181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038252858181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001965050505050505060405180910390f35b60208201526104568361011a565b604082015260008054600181018083558281838015829011610499576000838152602090206104999181019083015b808211156104df5760008155600101610485565b5050506000928352506020808320909101869055948152600280865260409182902083518155958301516001808801919091559290910151940193909355509092915050565b5090565b50929791965094509250505056";

            var web3 = new Web3Geth(new ManagedAccount(senderAddress, password));

            var transactionHash =
                await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(1999990));

            var receipt = await WaitForReceiptAsync(web3, transactionHash);

            var contractAddress = receipt.ContractAddress;

            var contract = web3.Eth.GetContract(abi, contractAddress);

            var addCustomerFunction = contract.GetFunction("addCustomer");

            var getCustomersByMobileNumberFunction = contract.GetFunction("getCustomersByMobileNumber");

            var resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh", 111, "Airtel");

            receipt = await WaitForReceiptAsync(web3, resultHash);

            var results = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync <CustomerData>(111);

            Assert.Equal(results.customerName, "Mahesh");

            var getAllCustomers = contract.GetFunction("getAllCustomers");
            var results2        = await getAllCustomers.CallDeserializingToObjectAsync <AllCustomerData>();
        }