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 )); }
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 ); }
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() ); }
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() )); }
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() )); }
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() )); }
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)) )); }
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() )); }
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() )); }
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() ); }
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)) ); }
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() ); }
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() ); }
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() ); }