Exemplo n.º 1
0
        //Check whether output has been spent or contained in another transaction, true = spent, false = unspent
        private bool checkOutputSpent(string currentTxHash, string outputTxHash, int outputIndex)
        {
            var outputDac = new OutputDac();
            var inputDac  = new InputDac();
            var txDac     = new TransactionDac();
            var blockDac  = new BlockDac();

            var outputEntity = outputDac.SelectByHashAndIndex(outputTxHash, outputIndex);
            var inputEntity  = inputDac.SelectByOutputHash(outputTxHash, outputIndex);

            if (inputEntity != null && inputEntity.TransactionHash != currentTxHash)
            {
                var tx = txDac.SelectByHash(inputEntity.TransactionHash);

                if (tx != null)
                {
                    var blockEntity = blockDac.SelectByHash(tx.BlockHash);

                    if (blockEntity != null && blockEntity.IsVerified)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取区块总的奖励
        /// </summary>
        /// <param name="blockHash"></param>
        /// <returns></returns>
        public long GetBlockReward(string blockHash)
        {
            //总的奖励分为两部分,一部分挖矿所得,一部分区块中交易手续费
            BlockDac dac         = new BlockDac();
            Block    block       = dac.SelectByHash(blockHash);
            long     miningAward = block.TotalAmount;
            long     totalfee    = block.TotalFee;

            return(miningAward + totalfee);
        }
Exemplo n.º 3
0
        private bool exists(string blockHash)
        {
            var blockDac = new BlockDac();

            if (blockDac.SelectByHash(blockHash) != null)
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 4
0
        public BlockMsg GetBlockMsgByHash(string hash)
        {
            var      blockDac = new BlockDac();
            var      txDac    = new TransactionDac();
            BlockMsg block    = null;

            var entity = blockDac.SelectByHash(hash);

            if (entity != null)
            {
                block = this.convertEntityToBlockMsg(entity);
            }

            return(block);
        }
Exemplo n.º 5
0
        public void GetBalanceInDB(out long confirmedBalance, out long unconfirmedBalance)
        {
            //return new OutputDac().SumSelfUnspentOutputs();
            confirmedBalance   = 0;
            unconfirmedBalance = 0;
            var outputDac = new OutputDac();
            var txDac     = new TransactionDac();
            var blockDac  = new BlockDac();

            var lastHeight = -1L;
            var lastBlock  = blockDac.SelectLast();

            if (lastBlock != null)
            {
                lastHeight = lastBlock.Height;
            }

            var outputs = outputDac.SelectAllUnspentOutputs();

            foreach (var output in outputs)
            {
                var tx = txDac.SelectByHash(output.TransactionHash);

                if (tx != null)
                {
                    var block = blockDac.SelectByHash(tx.BlockHash);

                    if (block != null)
                    {
                        if (tx.TotalInput == 0)
                        {
                            //coinbase
                            if (lastHeight - block.Height >= 100)
                            {
                                confirmedBalance += output.Amount;
                            }
                            else
                            {
                                unconfirmedBalance += output.Amount;
                            }
                        }
                        else
                        {
                            if (block.IsVerified)
                            {
                                if (Time.EpochTime >= tx.LockTime)
                                {
                                    confirmedBalance += output.Amount;
                                }
                                else
                                {
                                    unconfirmedBalance += output.Amount;
                                }
                            }
                            else
                            {
                                unconfirmedBalance += output.Amount;
                            }
                        }
                    }
                }
            }
        }