/* * private void FillContext() * { * IEnumerable<Transaction> mem_pool = Blockchain.Singleton.GetMemoryPool(); * foreach (IPolicyPlugin plugin in Plugin.Policies) * mem_pool = plugin.FilterForBlock(mem_pool); * List<Transaction> transactions = mem_pool.ToList(); * Fixed8 amount_netfee = Block.CalculateNetFee(transactions); * TransactionOutput[] outputs = amount_netfee == Fixed8.Zero ? new TransactionOutput[0] : new[] { new TransactionOutput * { * AssetId = Blockchain.UtilityToken.Hash, * Value = amount_netfee, * ScriptHash = wallet.GetChangeAddress() * } }; * while (true) * { * ulong nonce = GetNonce(); * MinerTransaction tx = new MinerTransaction * { * Nonce = (uint)(nonce % (uint.MaxValue + 1ul)), * Attributes = new TransactionAttribute[0], * Inputs = new CoinReference[0], * Outputs = outputs, * Witnesses = new Witness[0] * }; * if (!context.Snapshot.ContainsTransaction(tx.Hash)) * { * context.Nonce = nonce; * transactions.Insert(0, tx); * break; * } * } * context.TransactionHashes = transactions.Select(p => p.Hash).ToArray(); * context.Transactions = transactions.ToDictionary(p => p.Hash); * context.NextConsensus = Blockchain.GetConsensusAddress(context.Snapshot.GetValidators(transactions).ToArray()); * } */ /// <summary> /// 添加挖矿产出 /// </summary> private void FillContext() { IEnumerable <Transaction> mem_pool = Blockchain.Singleton.GetMemoryPool(); foreach (IPolicyPlugin plugin in Plugin.Policies) { mem_pool = plugin.FilterForBlock(mem_pool); } List <Transaction> transactions = mem_pool.ToList(); Fixed8 amount_netfee = Block.CalculateNetFee(transactions); MiningTransaction miningTransaction = new MiningTransaction(amount_netfee); while (true) { ulong nonce = GetNonce(); MinerTransaction tx = miningTransaction.GetMinerTransaction(nonce, context.BlockIndex, wallet); if (!context.Snapshot.ContainsTransaction(tx.Hash)) { context.Nonce = nonce; transactions.Insert(0, tx); break; } } context.TransactionHashes = transactions.Select(p => p.Hash).ToArray(); context.Transactions = transactions.ToDictionary(p => p.Hash); context.NextConsensus = Blockchain.GetConsensusAddress(context.Snapshot.GetValidators(transactions).ToArray()); }
/* * private void Fill() * { * IEnumerable<Transaction> memoryPoolTransactions = Blockchain.Singleton.MemPool.GetSortedVerifiedTransactions(); * foreach (IPolicyPlugin plugin in Plugin.Policies) * memoryPoolTransactions = plugin.FilterForBlock(memoryPoolTransactions); * List<Transaction> transactions = memoryPoolTransactions.ToList(); * Fixed8 amountNetFee = Block.CalculateNetFee(transactions); * TransactionOutput[] outputs = amountNetFee == Fixed8.Zero ? new TransactionOutput[0] : new[] { new TransactionOutput * { * AssetId = Blockchain.UtilityToken.Hash, * Value = amountNetFee, * ScriptHash = wallet.GetChangeAddress() * } }; * while (true) * { * ulong nonce = GetNonce(); * MinerTransaction tx = new MinerTransaction * { * Nonce = (uint)(nonce % (uint.MaxValue + 1ul)), * Attributes = new TransactionAttribute[0], * Inputs = new CoinReference[0], * Outputs = outputs, * Witnesses = new Witness[0] * }; * if (!Snapshot.ContainsTransaction(tx.Hash)) * { * Nonce = nonce; * transactions.Insert(0, tx); * break; * } * } * TransactionHashes = transactions.Select(p => p.Hash).ToArray(); * Transactions = transactions.ToDictionary(p => p.Hash); * NextConsensus = Blockchain.GetConsensusAddress(Snapshot.GetValidators(transactions).ToArray()); * Timestamp = Math.Max(TimeProvider.Current.UtcNow.ToTimestamp(), this.PrevHeader().Timestamp + 1); * } */ public void Fill() { IEnumerable <Transaction> mem_pool = Blockchain.Singleton.MemPool.GetSortedVerifiedTransactions(); foreach (IPolicyPlugin plugin in Plugin.Policies) { mem_pool = plugin.FilterForBlock(mem_pool); } List <Transaction> transactions = mem_pool.ToList(); Fixed8 amount_netfee = Block.CalculateNetFee(transactions); //By BHP Fixed8 amount_txfee = BhpTxFee.CalcuTxFee(transactions); while (true) { ulong nonce = GetNonce(); //By BHP MinerTransaction tx = new MiningTransaction().MakeMinerTransaction(wallet, BlockIndex, nonce, amount_txfee, amount_netfee); if (!Snapshot.ContainsTransaction(tx.Hash)) { Nonce = nonce; transactions.Insert(0, tx); break; } } TransactionHashes = transactions.Select(p => p.Hash).ToArray(); Transactions = transactions.ToDictionary(p => p.Hash); NextConsensus = Blockchain.GetConsensusAddress(Snapshot.GetValidators(transactions).ToArray()); Timestamp = Math.Max(TimeProvider.Current.UtcNow.ToTimestamp(), this.PrevHeader().Timestamp + 1); }
static void Mining(BhpSystem system) { Fixed8 amount_netfee = Fixed8.Zero; Fixed8 transaction_fee = Fixed8.Zero; ulong nonce = 100156895; BRC6Wallet wallet = new BRC6Wallet(new Bhp.Wallets.WalletIndexer(@"walletindex"), @"D:\BHP\Test\t1.json"); wallet.Unlock("1"); wallet.WalletTransaction += Wallet_WalletTransaction; MiningTransaction miningTransaction = new MiningTransaction(); MinerTransaction tx = miningTransaction.MakeMinerTransaction(wallet, 1000, nonce, Fixed8.Zero, Fixed8.Zero); Console.WriteLine(tx.ToJson()); Console.WriteLine("\n Staring Sign......"); ContractParametersContext context = new ContractParametersContext(tx); wallet.Sign(context); if (context.Completed) { Console.WriteLine("\n Sign successfully."); context.Verifiable.Witnesses = context.GetWitnesses(); string hexString = GetTxHashData(context.Verifiable).ToHexString(); Console.WriteLine($"\n {hexString}"); system.LocalNode.Tell(new LocalNode.Relay { Inventory = tx }); RelayResultReason reason = system.Blockchain.Ask <RelayResultReason>(tx).Result; Console.WriteLine("\n relay tx: " + reason); } Console.ReadLine(); }