コード例 #1
0
        public bool TryReadValue(UInt256 blockHash, out ImmutableArray <Transaction> blockTransactions)
        {
            using (var conn = this.OpenConnection())
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"
                    SELECT MinTxIndex, MaxTxIndex, TxChunkBytes
                    FROM BlockTransactionsChunked
                    WHERE BlockHash = @blockHash
                    ORDER BY MinTxIndex ASC";

                    cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = blockHash.ToDbByteArray();

                    using (var reader = cmd.ExecuteReader())
                    {
                        var blockTransactionsBuilder = ImmutableArray.CreateBuilder <Transaction>();

                        while (reader.Read())
                        {
                            var minTxIndex   = reader.GetInt32(0);
                            var maxTxIndex   = reader.GetInt32(1);
                            var txChunkBytes = reader.GetBytes(2);

                            var txChunkStream = txChunkBytes.ToMemoryStream();
                            for (var i = minTxIndex; i <= maxTxIndex; i++)
                            {
                                blockTransactionsBuilder.Add(StorageEncoder.DecodeTransaction(txChunkStream));
                            }
                        }

                        blockTransactions = blockTransactionsBuilder.ToImmutable();
                        return(blockTransactions.Length > 0);
                    }
                }
        }
コード例 #2
0
        public bool TryReadTransaction(TxKey txKey, out Transaction transaction)
        {
            using (var conn = this.OpenConnection())
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"
                    SELECT TxHash, TxBytes
                    FROM BlockTransactions
                    WHERE BlockHash = @blockHash AND TxIndex = @txIndex";

                    cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = txKey.BlockHash.ToDbByteArray();
                    cmd.Parameters.SetValue("@txIndex", SqlDbType.Int).Value          = txKey.TxIndex.ToIntChecked();

                    using (var reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            var txHash  = reader.GetUInt256(0);
                            var txBytes = reader.GetBytes(1);

                            transaction = StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash);
                            return(true);
                        }
                        else
                        {
                            transaction = default(Transaction);
                            return(false);
                        }
                    }
                }
        }
コード例 #3
0
        public bool TryReadValue(UInt256 blockHash, out ImmutableArray <Transaction> blockTransactions)
        {
            using (var conn = this.OpenConnection())
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"
                    SELECT TxHash, TxBytes
                    FROM BlockTransactions
                    WHERE BlockHash = @blockHash
                    ORDER BY TxIndex ASC";

                    cmd.Parameters.SetValue("@blockHash", SqlDbType.Binary, 32).Value = blockHash.ToDbByteArray();

                    using (var reader = cmd.ExecuteReader())
                    {
                        var blockTransactionsBuilder = ImmutableArray.CreateBuilder <Transaction>();

                        while (reader.Read())
                        {
                            var txHash  = reader.GetUInt256(0);
                            var txBytes = reader.GetBytes(1);

                            blockTransactionsBuilder.Add(StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash));
                        }

                        blockTransactions = blockTransactionsBuilder.ToImmutable();
                        return(blockTransactions.Length > 0);
                    }
                }
        }
コード例 #4
0
ファイル: TransactionStorage.cs プロジェクト: radtek/BitSharp
        public bool TryReadValue(UInt256 txHash, out Transaction transaction)
        {
            using (var conn = this.OpenConnection())
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"
                    SELECT TxBytes
                    FROM BlockTransactions
                    WHERE TxHash = @txHash";

                    cmd.Parameters.SetValue("@txHash", FbDbType.Char, FbCharset.Octets, 32).Value = txHash.ToDbByteArray();

                    using (var reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            var txBytes = reader.GetBytes(0);

                            transaction = StorageEncoder.DecodeTransaction(txBytes.ToMemoryStream(), txHash);
                            return(true);
                        }
                        else
                        {
                            transaction = default(Transaction);
                            return(false);
                        }
                    }
                }
        }