//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); }
/// <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); }
private bool exists(string blockHash) { var blockDac = new BlockDac(); if (blockDac.SelectByHash(blockHash) != null) { return(true); } return(false); }
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); }
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; } } } } } }