Example #1
0
        /*
         * 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());
        }
Example #2
0
        /*
         * 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);
        }
Example #3
0
        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();
        }