public List <Transaction> CreateTx(Hash chainId) { var contractAddressZero = AddressHelpers.GetSystemContractAddress(chainId, GlobalConfig.GenesisBasicContract); Console.WriteLine($"zero {contractAddressZero}"); var code = ExampleContractCode; ECKeyPair keyPair = new KeyPairGenerator().Generate(); ECSigner signer = new ECSigner(); var txPrint = new Transaction() { From = keyPair.GetAddress(), To = contractAddressZero, IncrementId = NewIncrementId(), MethodName = "Print", Params = ByteString.CopyFrom(new Parameters() { Params = { new Param { StrVal = "AElf" } } }.ToByteArray()), Fee = TxPoolConfig.Default.FeeThreshold + 1 }; Hash hash = txPrint.GetHash(); ECSignature signature = signer.Sign(keyPair, hash.DumpByteArray()); txPrint.Sig = new Signature { P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded()), R = ByteString.CopyFrom(signature.R), S = ByteString.CopyFrom(signature.S), }; var txs = new List <Transaction>() { txPrint }; return(txs); }
public List <Transaction> CreateTx(Hash chainId) { var contractAddressZero = AddressHelpers.GetSystemContractAddress(chainId, GlobalConfig.GenesisBasicContract); var keyPair = new KeyPairGenerator().Generate(); var signer = new ECSigner(); var txPrint = new Transaction() { From = keyPair.GetAddress(), To = contractAddressZero, MethodName = "Print", Params = ByteString.CopyFrom(new Parameters() { Params = { new Param { StrVal = "AElf" } } }.ToByteArray()), Fee = 0 }; var hash = txPrint.GetHash(); var signature = signer.Sign(keyPair, hash.DumpByteArray()); txPrint.Sig = new Signature { P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded()), R = ByteString.CopyFrom(signature.R), S = ByteString.CopyFrom(signature.S) }; var txs = new List <Transaction> { txPrint }; return(txs); }
public async Task Mine() { var chain = await _mock.CreateChain(); // create miner var keypair = new KeyPairGenerator().Generate(); var minerconfig = _mock.GetMinerConfig(chain.Id, 10, keypair.GetAddress().DumpByteArray()); ChainConfig.Instance.ChainId = chain.Id.DumpHex(); NodeConfig.Instance.NodeAccount = keypair.GetAddressHex(); var txPool = _mock.CreateTxPool(); txPool.Start(); var txs = CreateTx(chain.Id); foreach (var tx in txs) { await txPool.AddTransactionAsync(tx); } var manager = _mock.MinerClientManager(); var miner = _mock.GetMiner(minerconfig, txPool, manager); GrpcLocalConfig.Instance.ClientToSideChain = false; GrpcLocalConfig.Instance.WaitingIntervalInMillisecond = 10; NodeConfig.Instance.ECKeyPair = keypair; miner.Init(); var block = await miner.Mine(); Assert.NotNull(block); Assert.Equal(GlobalConfig.GenesisBlockHeight + 1, block.Header.Index); byte[] uncompressedPrivKey = block.Header.P.ToByteArray(); Address addr = Address.FromRawBytes(uncompressedPrivKey); Assert.Equal(minerconfig.CoinBase, addr); ECKeyPair recipientKeyPair = ECKeyPair.FromPublicKey(uncompressedPrivKey); ECVerifier verifier = new ECVerifier(recipientKeyPair); Assert.True(verifier.Verify(block.Header.GetSignature(), block.Header.GetHash().DumpByteArray())); }
public async Task MineWithIndexingSideChain() { GlobalConfig.InvertibleChainHeight = 0; string dir = @"/tmp/minerpems"; var chain = await _mock.CreateChain(); var keyPair = new KeyPairGenerator().Generate(); var minerConfig = _mock.GetMinerConfig(chain.Id, 10, keyPair.GetAddress().DumpByteArray()); NodeConfig.Instance.ECKeyPair = keyPair; NodeConfig.Instance.NodeAccount = keyPair.GetAddressHex(); ChainConfig.Instance.ChainId = chain.Id.DumpHex(); var pool = _mock.CreateTxPool(); pool.Start(); try { int sidePort = 50054; int parentPort = 50055; string address = "127.0.0.1"; _mock.ClearDirectory(dir); GrpcRemoteConfig.Instance.ParentChain = null; var sideChainId = _mock.MockSideChainServer(sidePort, address, dir); //var parentChainId = _mock.MockParentChainServer(parentPort, address, dir); var parimpl = _mock.MockParentChainBlockInfoRpcServerImpl(); //parimpl.Init(parentChainId); var sideimpl = _mock.MockSideChainBlockInfoRpcServerImpl(); sideimpl.Init(sideChainId); var serverManager = _mock.ServerManager(parimpl, sideimpl); serverManager.Init(dir); var manager = _mock.MinerClientManager(); int t = 1000; GrpcRemoteConfig.Instance.ChildChains = new Dictionary <string, Uri> { { sideChainId.DumpHex(), new Uri { Address = address, Port = sidePort } } }; GrpcLocalConfig.Instance.ClientToSideChain = true; GrpcLocalConfig.Instance.ClientToParentChain = false; manager.Init(dir, t); var miner = _mock.GetMiner(minerConfig, pool, manager); miner.Init(); //Thread.Sleep(t/2); var block = await miner.Mine(); Assert.NotNull(block); Assert.NotNull(block.Body.IndexedInfo); int count = block.Body.IndexedInfo.Count; Assert.Equal(1, count); Assert.Equal(GlobalConfig.GenesisBlockHeight, block.Body.IndexedInfo[0].Height); Assert.Equal(GlobalConfig.GenesisBlockHeight + 1, block.Header.Index); Thread.Sleep(t); block = await miner.Mine(); Assert.NotNull(block); Assert.NotNull(block.Body.IndexedInfo); count = block.Body.IndexedInfo.Count; Assert.Equal(1, count); Assert.Equal(GlobalConfig.GenesisBlockHeight + 1, block.Body.IndexedInfo[0].Height); Assert.Equal(GlobalConfig.GenesisBlockHeight + 2, block.Header.Index); Thread.Sleep(t); block = await miner.Mine(); Assert.NotNull(block); Assert.NotNull(block.Body.IndexedInfo); count = block.Body.IndexedInfo.Count; Assert.Equal(1, count); Assert.Equal(GlobalConfig.GenesisBlockHeight + 2, block.Body.IndexedInfo[0].Height); Assert.Equal(GlobalConfig.GenesisBlockHeight + 3, block.Header.Index); manager.CloseClientsToSideChain(); } finally { Directory.Delete(Path.Combine(dir), true); } }
public List <Transaction> CreateTxs(Hash chainId) { var contractAddressZero = AddressHelpers.GetSystemContractAddress(chainId, GlobalConfig.GenesisBasicContract); var code = ExampleContractCode; ECKeyPair keyPair = new KeyPairGenerator().Generate(); ECSigner signer = new ECSigner(); var txnDep = new Transaction() { From = keyPair.GetAddress(), To = contractAddressZero, IncrementId = 0, MethodName = "DeploySmartContract", Params = ByteString.CopyFrom(ParamsPacker.Pack((int)0, code)), Fee = TxPoolConfig.Default.FeeThreshold + 1, Type = TransactionType.ContractTransaction }; Hash hash = txnDep.GetHash(); ECSignature signature1 = signer.Sign(keyPair, hash.DumpByteArray()); txnDep.Sig = new Signature { P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded()), R = ByteString.CopyFrom(signature1.R), S = ByteString.CopyFrom(signature1.S), }; var txInv_1 = new Transaction { From = keyPair.GetAddress(), To = contractAddressZero, IncrementId = 1, MethodName = "Print", Params = ByteString.CopyFrom(ParamsPacker.Pack("AElf")), Fee = TxPoolConfig.Default.FeeThreshold + 1, Type = TransactionType.ContractTransaction }; ECSignature signature2 = signer.Sign(keyPair, txInv_1.GetHash().DumpByteArray()); txInv_1.Sig = new Signature { P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded()), R = ByteString.CopyFrom(signature2.R), S = ByteString.CopyFrom(signature2.S) }; var txInv_2 = new Transaction { From = keyPair.GetAddress(), To = contractAddressZero, IncrementId = txInv_1.IncrementId, MethodName = "Print", Params = ByteString.CopyFrom(ParamsPacker.Pack("AElf")), Fee = TxPoolConfig.Default.FeeThreshold + 1, Type = TransactionType.ContractTransaction }; ECSignature signature3 = signer.Sign(keyPair, txInv_2.GetHash().DumpByteArray()); txInv_2.Sig = new Signature { P = ByteString.CopyFrom(keyPair.PublicKey.Q.GetEncoded()) }; txInv_2.Sig.R = ByteString.CopyFrom(signature3.R); txInv_2.Sig.S = ByteString.CopyFrom(signature3.S); var txs = new List <Transaction>() { txnDep, txInv_1, txInv_2 }; return(txs); }