Example #1
0
        public static Blockchain RandomBlockchain(RandomDataOptions options = default(RandomDataOptions))
        {
            //TODO blockCount algorithm isn't exact
            var blockCount       = random.Next((options != null ? options.BlockCount : null) ?? 100) + ((options != null ? options.MinimumBlockCount : null) ?? 1);
            var blockList        = new List <Block>(blockCount);
            var chainedBlockList = new List <ChainedBlock>(blockCount);

            var previousBlockHash = UInt256.Zero;
            var totalWork         = new BigInteger(0);

            for (var i = 0; i < blockCount; i++)
            {
                var block = RandomData.RandomBlock(options);
                block = block.With(Header: block.Header.With(PreviousBlock: previousBlockHash));
                blockList.Add(block);

                previousBlockHash = block.Hash;
                totalWork        += block.Header.CalculateWork();

                chainedBlockList.Add(new ChainedBlock(block.Hash, block.Header.PreviousBlock, i, totalWork));
            }

            var blockListHashes = blockList.Select(x => x.Hash).ToImmutableHashSet();
            var utxo            = blockList.SelectMany(block =>
                                                       block.Transactions.Select((tx, txIndex) =>
                                                                                 new UnspentTx(block.Hash, (UInt32)txIndex, tx.Hash, random.NextImmutableBitArray((options != null ? options.TxOutputCount : null) ?? 100))))
                                  .ToImmutableDictionary(unspentTx => unspentTx.TxHash, unspentTx => unspentTx);

            return(new Blockchain
                   (
                       chainedBlockList.ToImmutableList(),
                       blockListHashes,
                       utxo
                   ));
        }
Example #2
0
        public static Blockchain RandomBlockchain(RandomDataOptions options = default(RandomDataOptions))
        {
            //TODO blockCount algorithm isn't exact
            var blockCount = random.Next((options != null ? options.BlockCount : null) ?? 100) + ((options != null ? options.MinimumBlockCount : null) ?? 1);
            var blockList = new List<Block>(blockCount);
            var chainedBlockList = new List<ChainedBlock>(blockCount);

            var previousBlockHash = UInt256.Zero;
            var totalWork = new BigInteger(0);
            for (var i = 0; i < blockCount; i++)
            {
                var block = RandomData.RandomBlock(options);
                block = block.With(Header: block.Header.With(PreviousBlock: previousBlockHash));
                blockList.Add(block);

                previousBlockHash = block.Hash;
                totalWork += block.Header.CalculateWork();

                chainedBlockList.Add(new ChainedBlock(block.Hash, block.Header.PreviousBlock, i, totalWork));
            }

            var blockListHashes = blockList.Select(x => x.Hash).ToImmutableHashSet();
            var utxo = blockList.SelectMany(block =>
                block.Transactions.Select((tx, txIndex) =>
                    new UnspentTx(block.Hash, (UInt32)txIndex, tx.Hash, random.NextImmutableBitArray((options != null ? options.TxOutputCount : null) ?? 100))))
                .ToImmutableDictionary(unspentTx => unspentTx.TxHash, unspentTx => unspentTx);

            return new Blockchain
            (
                chainedBlockList.ToImmutableList(),
                blockListHashes,
                utxo
            );
        }
Example #3
0
 public static Block RandomBlock(RandomDataOptions options = default(RandomDataOptions))
 {
     return new Block
     (
         header: RandomBlockHeader(),
         transactions: Enumerable.Range(0, random.Next((options != null ? options.TransactionCount : null) ?? 100)).Select(x => RandomTransaction()).ToImmutableArray()
     );
 }
Example #4
0
 public static TxOutput RandomTxOutput(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new TxOutput
            (
                value: random.NextUInt64(),
                scriptPublicKey: random.NextBytes(random.Next((options != null ? options.ScriptPublicKeySize : null) ?? 100)).ToImmutableArray()
            ));
 }
Example #5
0
 public static Block RandomBlock(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new Block
            (
                header: RandomBlockHeader(),
                transactions: Enumerable.Range(0, random.Next((options != null ? options.TransactionCount : null) ?? 100)).Select(x => RandomTransaction()).ToImmutableArray()
            ));
 }
Example #6
0
 public static Transaction RandomTransaction(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new Transaction
            (
                version: random.NextUInt32(),
                inputs: Enumerable.Range(0, random.Next((options != null ? options.TxInputCount : null) ?? 100)).Select(x => RandomTxInput()).ToImmutableArray(),
                outputs: Enumerable.Range(0, random.Next((options != null ? options.TxOutputCount : null) ?? 100)).Select(x => RandomTxOutput()).ToImmutableArray(),
                lockTime: random.NextUInt32()
            ));
 }
Example #7
0
 public static UnspentTx RandomUnspentTx(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new UnspentTx
            (
                txHash: random.NextUInt256(),
                blockHash: random.NextUInt256(),
                txIndex: random.NextUInt32(),
                unspentOutputs: random.NextImmutableBitArray(random.Next((options != null ? options.TxOutputCount : null) ?? 100))
            ));
 }
Example #8
0
 public static BlockHeader RandomBlockHeader(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new BlockHeader
            (
                version: random.NextUInt32(),
                previousBlock: random.NextUInt256(),
                merkleRoot: random.NextUInt256(),
                time: random.NextUInt32(),
                bits: random.NextUInt32(),
                nonce: random.NextUInt32()
            ));
 }
Example #9
0
 public static TxInput RandomTxInput(RandomDataOptions options = default(RandomDataOptions))
 {
     return(new TxInput
            (
                previousTxOutputKey: new TxOutputKey
                (
                    txHash: random.NextUInt32(),
                    txOutputIndex: random.NextUInt32()
                ),
                scriptSignature: random.NextBytes(random.Next((options != null ? options.ScriptSignatureSize : null) ?? 100)).ToImmutableArray(),
                sequence: random.NextUInt32()
            ));
 }
Example #10
0
 public static BlockHeader RandomBlockHeader(RandomDataOptions options = default(RandomDataOptions))
 {
     return new BlockHeader
     (
         version: random.NextUInt32(),
         previousBlock: random.NextUInt256(),
         merkleRoot: random.NextUInt256(),
         time: random.NextUInt32(),
         bits: random.NextUInt32(),
         nonce: random.NextUInt32()
     );
 }
Example #11
0
 public static UnspentTx RandomUnspentTx(RandomDataOptions options = default(RandomDataOptions))
 {
     return new UnspentTx
     (
         txHash: random.NextUInt256(),
         blockHash: random.NextUInt256(),
         txIndex: random.NextUInt32(),
         unspentOutputs: random.NextImmutableBitArray(random.Next((options != null ? options.TxOutputCount : null) ?? 100))
     );
 }
Example #12
0
 public static TxOutput RandomTxOutput(RandomDataOptions options = default(RandomDataOptions))
 {
     return new TxOutput
     (
         value: random.NextUInt64(),
         scriptPublicKey: random.NextBytes(random.Next((options != null ? options.ScriptPublicKeySize : null) ?? 100)).ToImmutableArray()
     );
 }
Example #13
0
 public static TxInput RandomTxInput(RandomDataOptions options = default(RandomDataOptions))
 {
     return new TxInput
     (
         previousTxOutputKey: new TxOutputKey
         (
             txHash: random.NextUInt32(),
             txOutputIndex: random.NextUInt32()
         ),
         scriptSignature: random.NextBytes(random.Next((options != null ? options.ScriptSignatureSize : null) ?? 100)).ToImmutableArray(),
         sequence: random.NextUInt32()
     );
 }
Example #14
0
 public static Transaction RandomTransaction(RandomDataOptions options = default(RandomDataOptions))
 {
     return new Transaction
     (
         version: random.NextUInt32(),
         inputs: Enumerable.Range(0, random.Next((options != null ? options.TxInputCount : null) ?? 100)).Select(x => RandomTxInput()).ToImmutableArray(),
         outputs: Enumerable.Range(0, random.Next((options != null ? options.TxOutputCount : null) ?? 100)).Select(x => RandomTxOutput()).ToImmutableArray(),
         lockTime: random.NextUInt32()
     );
 }