コード例 #1
0
        public async void ShouldBeAbleToConnectTo7NodesPrivate()
        {
            var ipAddress = DefaultSettings.QuorumIPAddress;
            var node1Port = "22000";
            var node2Port = "22001";
            var node7Port = "22006";
            var urlNode1  = ipAddress + ":" + node1Port;
            var urlNode2  = ipAddress + ":" + node2Port;
            var urlNode7  = ipAddress + ":" + node7Port;

            var address = "0x1932c48b2bf8102ba33b4a6b545c32236e342f34";
            var abi     = "[{ 'constant':true,'inputs':[],'name':'storedData','outputs':[{'name':'','type':'uint256'}],'payable':false,'type':'function'},{'constant':false,'inputs':[{'name':'x','type':'uint256'}],'name':'set','outputs':[],'payable':false,'type':'function'},{'constant':true,'inputs':[],'name':'get','outputs':[{'name':'retVal','type':'uint256'}],'payable':false,'type':'function'},{'inputs':[{'name':'initVal','type':'uint256'}],'type':'constructor'}]";


            var web3Node1          = new Web3Quorum(urlNode1);
            var transactionService = new TransactionReceiptPollingService(web3Node1);
            var account            = await web3Node1.Eth.CoinBase.SendRequestAsync();

            var contract    = web3Node1.Eth.GetContract(abi, address);
            var functionSet = contract.GetFunction("set");

            //set the private for
            var privateFor = new List <string>(new[] { "ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=" });

            web3Node1.SetPrivateRequestParameters(privateFor);
            //send transaction
            var txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, 4));

            var node1Value = await GetValue(abi, address, urlNode1);

            Assert.Equal(4, node1Value);

            var node2Value = await GetValue(abi, address, urlNode2);

            Assert.Equal(0, node2Value);

            var node7Value = await GetValue(abi, address, urlNode7);

            Assert.Equal(4, node7Value);

            txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, 42));

            //node1
            node1Value = await GetValue(abi, address, urlNode1);

            Assert.Equal(42, node1Value);

            node2Value = await GetValue(abi, address, urlNode2);

            Assert.Equal(0, node2Value);

            node7Value = await GetValue(abi, address, urlNode7);

            Assert.Equal(42, node7Value);

            //private.set(4,{from:eth.coinbase,privateFor:["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]});
        }
コード例 #2
0
        public async void Test()
        {
            var contractByteCode =
                "0x60606040526040516020806106f5833981016040528080519060200190919050505b80600160005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550806000600050819055505b506106868061006f6000396000f360606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063095ea7b31461008157806318160ddd146100b657806323b872dd146100d957806370a0823114610117578063a9059cbb14610143578063dd62ed3e1461017857610074565b61007f5b610002565b565b005b6100a060048080359060200190919080359060200190919050506101ad565b6040518082815260200191505060405180910390f35b6100c36004805050610674565b6040518082815260200191505060405180910390f35b6101016004808035906020019091908035906020019091908035906020019091905050610281565b6040518082815260200191505060405180910390f35b61012d600480803590602001909190505061048d565b6040518082815260200191505060405180910390f35b61016260048080359060200190919080359060200190919050506104cb565b6040518082815260200191505060405180910390f35b610197600480803590602001909190803590602001909190505061060b565b6040518082815260200191505060405180910390f35b600081600260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905061027b565b92915050565b600081600160005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541015801561031b575081600260005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505410155b80156103275750600082115b1561047c5781600160005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a381600160005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600260005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505403925050819055506001905061048656610485565b60009050610486565b5b9392505050565b6000600160005060008373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505490506104c6565b919050565b600081600160005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541015801561050c5750600082115b156105fb5781600160005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600160005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061060556610604565b60009050610605565b5b92915050565b6000600260005060008473ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054905061066e565b92915050565b60006000600050549050610683565b9056";
            var abi =
                @"[{""constant"":false,""inputs"":[{""name"":""_spender"",""type"":""address""},{""name"":""_value"",""type"":""uint256""}],""name"":""approve"",""outputs"":[{""name"":""success"",""type"":""bool""}],""type"":""function""},{""constant"":true,""inputs"":[],""name"":""totalSupply"",""outputs"":[{""name"":""supply"",""type"":""uint256""}],""type"":""function""},{""constant"":false,""inputs"":[{""name"":""_from"",""type"":""address""},{""name"":""_to"",""type"":""address""},{""name"":""_value"",""type"":""uint256""}],""name"":""transferFrom"",""outputs"":[{""name"":""success"",""type"":""bool""}],""type"":""function""},{""constant"":true,""inputs"":[{""name"":""_owner"",""type"":""address""}],""name"":""balanceOf"",""outputs"":[{""name"":""balance"",""type"":""uint256""}],""type"":""function""},{""constant"":false,""inputs"":[{""name"":""_to"",""type"":""address""},{""name"":""_value"",""type"":""uint256""}],""name"":""transfer"",""outputs"":[{""name"":""success"",""type"":""bool""}],""type"":""function""},{""constant"":true,""inputs"":[{""name"":""_owner"",""type"":""address""},{""name"":""_spender"",""type"":""address""}],""name"":""allowance"",""outputs"":[{""name"":""remaining"",""type"":""uint256""}],""type"":""function""},{""inputs"":[{""name"":""_initialAmount"",""type"":""uint256""}],""type"":""constructor""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""_from"",""type"":""address""},{""indexed"":true,""name"":""_to"",""type"":""address""},{""indexed"":false,""name"":""_value"",""type"":""uint256""}],""name"":""Transfer"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""_owner"",""type"":""address""},{""indexed"":true,""name"":""_spender"",""type"":""address""},{""indexed"":false,""name"":""_value"",""type"":""uint256""}],""name"":""Approval"",""type"":""event""}]";


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

            var   gethTester  = GethTesterFactory.GetLocal(web3);
            ulong totalSupply = 1000000;

            var receipt = await gethTester.DeployTestContractLocal(abi, contractByteCode, totalSupply);

            string pass = "******";
            await web3.Personal.UnlockAccount.SendRequestAsync(gethTester.Account, pass, 60);

            var newAddress = await web3.Personal.NewAccount.SendRequestAsync(pass);

            Assert.NotNull(newAddress);
            var contract           = web3.Eth.GetContract(abi, receipt.ContractAddress);
            var transferFunction   = contract.GetFunction("transfer");
            var balanceFunction    = contract.GetFunction("balanceOf");
            var transactionService = new TransactionReceiptPollingService(web3);

            var gethWeb3 = new Web3Geth(web3.Client);
            await gethWeb3.Miner.Start.SendRequestAsync(6);

            var receiptFirstBlock = await transactionService.SendRequestAsync(() => transferFunction.SendTransactionAsync(gethTester.Account, newAddress, 1000));

            var balanceFirstBlock = await balanceFunction.CallAsync <int>(newAddress);

            var receiptSecondBlock = await transactionService.SendRequestAsync(() => transferFunction.SendTransactionAsync(gethTester.Account, newAddress, 1000));

            var balanceSecondBlock = await balanceFunction.CallAsync <int>(newAddress);

            var balanceOldBlock =
                await
                balanceFunction.CallAsync <int>(
                    new BlockParameter(receiptFirstBlock.BlockNumber), newAddress);

            await gethWeb3.Miner.Stop.SendRequestAsync();

            Assert.Equal(2000, balanceSecondBlock);
            Assert.Equal(1000, balanceOldBlock);
            Assert.Equal(1000, balanceFirstBlock);
        }
コード例 #3
0
        public async Task ShouldBeAbleToTransferBetweenAccountsUsingManagedAccount()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";

            // A managed account is an account which is maintained by the client (Geth / Parity)
            var account = new ManagedAccount(senderAddress, password);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = new TransactionReceiptPollingService(web3);

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already

            //When sending the transaction using the transaction manager for a managed account, personal_sendTransaction is used.
            var transactionReceipt = await transactionPolling.SendRequestAsync(() =>
                                                                               web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20))
                                                                               );

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
コード例 #4
0
        public async Task ShouldBeAbleToTransferBetweenAccountsUsingThePrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";

            var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";


            // The default account is an account which is mananaged by the user

            var account = new Account(privateKey);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = new TransactionReceiptPollingService(web3);

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already

            //when sending a transaction using an Account, a raw transaction is signed and send using the private key
            var transactionReceipt = await transactionPolling.SendRequestAsync(() =>
                                                                               web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20))
                                                                               );

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
コード例 #5
0
ファイル: AccountTransfer.cs プロジェクト: xchit/Nethereum
        public async Task ShouldBeAbleToTransferBetweenAccountsLoadingEncryptedPrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";

            var keyStoreEncryptedJson =
                @"{""crypto"":{""cipher"":""aes-128-ctr"",""ciphertext"":""b4f42e48903879b16239cd5508bc5278e5d3e02307deccbec25b3f5638b85f91"",""cipherparams"":{""iv"":""dc3f37d304047997aa4ef85f044feb45""},""kdf"":""scrypt"",""mac"":""ada930e08702b89c852759bac80533bd71fc4c1ef502291e802232b74bd0081a"",""kdfparams"":{""n"":65536,""r"":1,""p"":8,""dklen"":32,""salt"":""2c39648840b3a59903352b20386f8c41d5146ab88627eaed7c0f2cc8d5d95bd4""}},""id"":""19883438-6d67-4ab8-84b9-76a846ce544b"",""address"":""12890d2cce102216644c59dae5baed380d84830c"",""version"":3}";

            //this is your wallet key  file which can be found on

            //Linux: ~/.ethereum/keystore
            //Mac: /Library/Ethereum/keystore
            //Windows: %APPDATA%/Ethereum

            //if not using portable or netstandard (^net45) you can use LoadFromKeyStoreFile to load the file from the file system.

            var account = Account.LoadFromKeyStore(keyStoreEncryptedJson, password);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = new TransactionReceiptPollingService(web3);

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already
            //when sending a transaction using an Account, a raw transaction is signed and send using the private key
            var transactionReceipt = await transactionPolling.SendRequestAsync(() =>
                                                                               web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20))
                                                                               );

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
コード例 #6
0
        public ContractDemo CreateAccount()
        {
            //To full the new account
            var    password           = "******";
            var    senderAddress      = "0x12890d2cce102216644c59daE5baed380d84830c";
            var    web3               = new Nethereum.Web3.Web3(new ManagedAccount(senderAddress, password));
            var    transactionPolling = new TransactionReceiptPollingService(web3);
            string path               = @"C:\Programathon\Nethereum-master\testchain\devChain\keystore\";

            //Generate a private key pair using SecureRandom
            var ecKey = Nethereum.Signer.EthECKey.GenerateKey();
            //Get the public address (derivied from the public key)
            var newAddress = ecKey.GetPublicAddress();
            var privateKey = ecKey.GetPrivateKey();

            //Create a store service, to encrypt and save the file using the web3 standard
            var service      = new KeyStoreService();
            var encryptedKey = service.EncryptAndGenerateDefaultKeyStoreAsJson(password, ecKey.GetPrivateKeyAsBytes(), newAddress);
            var fileName     = service.GenerateUTCFileName(newAddress);

            //save the File

            using (var newfile = System.IO.File.CreateText(Path.Combine(path, fileName)))
            {
                newfile.Write(encryptedKey);
                newfile.Flush();
            }


            var web3Geth     = new Web3Geth();
            var miningResult = web3Geth.Miner.Start.SendRequestAsync(6).Result;

            var currentBalance = web3.Eth.GetBalance.SendRequestAsync(newAddress).Result;
            //when sending a transaction using an Account, a raw transaction is signed and send using the private key

            var transactionReceipt = transactionPolling.SendRequestAsync(() =>
                                                                         web3.TransactionManager.SendTransactionAsync(senderAddress, newAddress, new HexBigInteger(4000000000000000000))
                                                                         ).Result;


            var newBalance = web3.Eth.GetBalance.SendRequestAsync(newAddress).Result;

            miningResult = web3Geth.Miner.Stop.SendRequestAsync().Result;


            ContractDemo d = new ContractDemo();

            d.Address = newAddress;
            return(d);
        }
コード例 #7
0
        public async Task <List <TransactionReceipt> > TransferEqualAmounts(Web3 web3, string from, BigInteger amount,
                                                                            params string[] toAdresses)
        {
            var transfers = new List <Func <Task <string> > >();


            foreach (var to in toAdresses)
            {
                transfers.Add(() =>
                              web3.Eth.TransactionManager.SendTransactionAsync(new TransactionInput()
                {
                    From  = from,
                    To    = to,
                    Value = new HexBigInteger(amount),
                }));
            }
            var pollingService = new TransactionReceiptPollingService(web3);

            return(await pollingService.SendRequestAsync(transfers));
        }
コード例 #8
0
        private async Task <List <TransactionReceipt> > TransferRPC(Web3 web3, string from, BigInteger amount, string toAdresses)
        {
            try
            {
                var transfers = new List <Func <Task <string> > >();

                transfers.Add(() =>
                              web3.Eth.TransactionManager.SendTransactionAsync(new TransactionInput()
                {
                    From  = from,
                    To    = toAdresses,
                    Value = new HexBigInteger(amount),
                    Gas   = new HexBigInteger(461238)
                }));

                var pollingService = new TransactionReceiptPollingService(web3);
                return(await pollingService.SendRequestAsync(transfers));
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.StackTrace); throw ex;
            }
        }
コード例 #9
0
        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));
            await web3.Miner.Start.SendRequestAsync(4);

            var transactionReceiptService = new TransactionReceiptPollingService(web3);
            var contractAddress           = await transactionReceiptService.DeployContractAndGetAddressAsync(() =>
                                                                                                             web3.Eth.DeployContract.SendRequestAsync(abi, contractByteCode, senderAddress,
                                                                                                                                                      new HexBigInteger(900000), 7));

            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 transactionReceiptService.SendRequestAsync(transactions);

            await web3.Miner.Stop.SendRequestAsync();

            Assert.Equal(4, transactionsReceipts.Count);
        }
コード例 #10
0
        /// <summary>
        /// Runs this instance.
        /// </summary>
        public static async void Run()
        {
            var ipAddress = DefaultSettings.QuorumIPAddress;
            var node1Port = "22000";
            var node2Port = "22001";
            var node7Port = "22006";
            var urlNode1  = ipAddress + ":" + node1Port;
            var urlNode2  = ipAddress + ":" + node2Port;
            var urlNode7  = ipAddress + ":" + node7Port;

            var address = "0xed9d02e382b34818e88b88a309c7fe71e65f419d";
            //var address = "0x0638e1574728b6d862dd5d3a3e0942c3be47d996";

            var abi = "[{ 'constant':true,'inputs':[],'name':'storedData','outputs':[{'name':'','type':'uint256'}],'payable':false,'type':'function'},{'constant':false,'inputs':[{'name':'x','type':'uint256'}],'name':'set','outputs':[],'payable':false,'type':'function'},{'constant':true,'inputs':[],'name':'get','outputs':[{'name':'retVal','type':'uint256'}],'payable':false,'type':'function'},{'inputs':[{'name':'initVal','type':'uint256'}],'type':'constructor'}]";


            var web3Node1          = new Web3Quorum(urlNode1);
            var transactionService = new TransactionReceiptPollingService(web3Node1.TransactionManager);
            var account            = await web3Node1.Eth.CoinBase.SendRequestAsync();

            var contract    = web3Node1.Eth.GetContract(abi, address);
            var functionSet = contract.GetFunction("set");

            //set the private for
            var privateFor = new List <string>(new[] { "ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=" });

            web3Node1.SetPrivateRequestParameters(privateFor);

            //send transaction
            var txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, new HexBigInteger(210000), new HexBigInteger(42), 42));

            var node1Value = await GetValue(abi, address, urlNode1);

            Console.WriteLine("QuorumPrivateContractTests node1Value:");
            Console.WriteLine(node1Value);

            var node2Value = await GetValue(abi, address, urlNode2);

            Console.WriteLine("QuorumPrivateContractTests node2Value:");
            Console.WriteLine(node2Value);

            var node7Value = await GetValue(abi, address, urlNode7);

            Console.WriteLine("QuorumPrivateContractTests node7Value:");
            Console.WriteLine(node7Value);

            txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, new HexBigInteger(210000), new HexBigInteger(1024), 1024));

            node1Value = await GetValue(abi, address, urlNode1);

            Console.WriteLine("QuorumPrivateContractTests node1Value:");
            Console.WriteLine(node1Value);

            node2Value = await GetValue(abi, address, urlNode2);

            Console.WriteLine("QuorumPrivateContractTests node2Value:");
            Console.WriteLine(node2Value);

            node7Value = await GetValue(abi, address, urlNode7);

            Console.WriteLine("QuorumPrivateContractTests node7Value:");
            Console.WriteLine(node7Value);
        }
コード例 #11
0
        public async void ShouldCreateEnsRegistarResolverAndRegiterandResolveANewAddress()
        {
            //The address we want to resolve when using "test.eth"
            var addressToResolve = "0x12890d2cce102216644c59dae5baed380d84830c";

            var defaultGas = new HexBigInteger(900000);

            var addressFrom = "0x12890d2cce102216644c59dae5baed380d84830c";
            var pass        = "******";

            var web3     = new Web3(new ManagedAccount(addressFrom, pass), ClientFactory.GetClient());
            var web3Geth = new Web3Geth(ClientFactory.GetClient());

            var txService = new TransactionReceiptPollingService(web3.TransactionManager);

            // var addressFrom = (await web3.Eth.Accounts.SendRequestAsync()).First();
            //uncomment to use geth instead of test-rpc

            //deploy ENS contract
            var ensAddress = await txService.DeployContractAndGetAddressAsync(() => EnsService.DeployContractAsync(web3, addressFrom, defaultGas));

            var ensUtil = new EnsUtil();
            var ethNode = ensUtil.GetEnsNameHash("eth");

            //create a new First in First service registrar for "eth"
            var fifsAddress = await txService.DeployContractAndGetAddressAsync(() => FIFSRegistrarService.DeployContractAsync(web3, addressFrom, ensAddress, ethNode.HexToByteArray(),
                                                                                                                              defaultGas));


            //create a public registry, which will allow us to find the registered address
            var publicResolverAddress =
                await
                txService.DeployContractAndGetAddressAsync(
                    () =>
                    PublicResolverService.DeployContractAsync(web3, addressFrom, ensAddress,
                                                              defaultGas));


            var ensService = new EnsService(web3, ensAddress);

            //set ownership of "eth" to the fifs service
            //we are owners of "", so a subnode label "eth" will now be owned by the FIFS registar, which will allow to also to set ownership in Ens of further subnodes of Eth.
            var ethLabel = ensUtil.GetEnsLabelHash("eth");

            await txService.SendRequestAsync(() => ensService.SetSubnodeOwnerAsync(addressFrom, ensUtil.GetEnsNameHash("").HexToByteArray(),
                                                                                   ethLabel.HexToByteArray(), fifsAddress, defaultGas));

            //Now the owner of Eth is the FIFS
            var ownerOfEth = await ensService.OwnerAsyncCall(ethNode.HexToByteArray());

            Assert.Equal(fifsAddress, ownerOfEth);
            /**** setup done **/

            //registration of "myname"

            //create a service for the registrar
            var fifsService = new FIFSRegistrarService(web3, fifsAddress);

            //create a label
            var testLabel = ensUtil.GetEnsLabelHash("myname");
            //submit the registration using the label bytes, and set ourselves as the owner
            await txService.SendRequestAsync(() => fifsService.RegisterAsync(addressFrom, testLabel.HexToByteArray(), addressFrom, defaultGas));

            //now using the the full name
            var fullNameNode = ensUtil.GetEnsNameHash("myname.eth");
            //set the resolver (the public one)
            await txService.SendRequestAsync(() => ensService.SetResolverAsync(addressFrom, fullNameNode.HexToByteArray(), publicResolverAddress, defaultGas));

            var publicResolverService = new PublicResolverService(web3, publicResolverAddress);
            // set the address in the resolver which we want to resolve, ownership is validated using ENS in the background
            await txService.SendRequestAsync(() => publicResolverService.SetAddrAsync(addressFrom, fullNameNode.HexToByteArray(), addressToResolve, defaultGas));

            //Now as "end user" we can start resolving...

            //get the resolver address from ENS
            var resolverAddress = await ensService.ResolverAsyncCall(fullNameNode.HexToByteArray());

            //using the resolver address we can create our service (should be an abstract / interface based on abi as we can have many)
            var resolverService = new PublicResolverService(web3, resolverAddress);

            //and get the address from the resolver
            var theAddress = await resolverService.AddrAsyncCall(fullNameNode.HexToByteArray());

            Assert.Equal(addressToResolve, theAddress);
        }
コード例 #12
0
        /// <summary>
        /// Runs this instance.
        /// </summary>
        public static async void Run()
        {
            var ipAddress = DefaultSettings.QuorumIPAddress;
            var node1Port = "22000";
            var node4Port = "22003";
            var node7Port = "22006";
            var urlNode1  = ipAddress + ":" + node1Port;
            var urlNode4  = ipAddress + ":" + node4Port;
            var urlNode7  = ipAddress + ":" + node7Port;

            var address = "0xed9d02e382b34818e88b88a309c7fe71e65f419d";
            //string address = "0xca843569e3427144cead5e4d5999a3d0ccf92b8e";

            var abi = @"[ { ""constant"": false, ""inputs"": [], ""name"": ""kill"", ""outputs"": [], ""payable"": false, ""type"": ""function"" }, { ""constant"": false, ""inputs"": [ { ""name"": ""_newgreeting"", ""type"": ""string"" } ], ""name"": ""setGreeting"", ""outputs"": [], ""payable"": false, ""type"": ""function"" }, { ""constant"": true, ""inputs"": [], ""name"": ""greet"", ""outputs"": [ { ""name"": """", ""type"": ""string"" } ], ""payable"": false, ""type"": ""function"" }, { ""inputs"": [ { ""name"": ""_greeting"", ""type"": ""string"" } ], ""payable"": false, ""type"": ""constructor"" } ]";


            var web3Node1          = new Web3Quorum(urlNode1);
            var transactionService = new TransactionReceiptPollingService(web3Node1.TransactionManager);
            var account            = await web3Node1.Eth.CoinBase.SendRequestAsync();

            var contract    = web3Node1.Eth.GetContract(abi, address);
            var functionSet = contract.GetFunction("setGreeting");

            //set the private for
            var privateFor = new List <string>(new[] { "ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=" });

            web3Node1.SetPrivateRequestParameters(privateFor);

            //send transaction
            var txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, new HexBigInteger(210000), null, "Hello Quorum!"));

            var node1Value = await GetValue(abi, address, urlNode1);

            Console.WriteLine("GreeterContractTest node1Value:");
            Console.WriteLine(node1Value);

            var node4Value = await GetValue(abi, address, urlNode4);

            Console.WriteLine("GreeterContractTest node4Value:");
            Console.WriteLine(node4Value);

            var node7Value = await GetValue(abi, address, urlNode7);

            Console.WriteLine("GreeterContractTest node7Value:");
            Console.WriteLine(node7Value);

            txnHash = await transactionService.SendRequestAsync(() => functionSet.SendTransactionAsync(account, new HexBigInteger(210000), null, "Hello world!"));

            node1Value = await GetValue(abi, address, urlNode1);

            Console.WriteLine("GreeterContractTest node1Value:");
            Console.WriteLine(node1Value);

            node4Value = await GetValue(abi, address, urlNode4);

            Console.WriteLine("GreeterContractTest node4Value:");
            Console.WriteLine(node4Value);

            node7Value = await GetValue(abi, address, urlNode7);

            Console.WriteLine("GreeterContractTest node7Value:");
            Console.WriteLine(node7Value);
        }