public static IEnumerable <object[]> GetSignCases(TxCaseType mode) { // Transactions are signed with bitcoin-core version 0.19.0.1 (bitcoin-0.19.0.1-x86_64-linux-gnu.tar) // All transactions are broadcast and are included in blocks on testnet. JArray jar = Helper.ReadResource <JArray>("SignedTxTestData"); foreach (var Case in jar) { Transaction prevTx = new Transaction(); prevTx.TryDeserialize(new FastStreamReader(Helper.HexToBytes(Case["TxToSpend"].ToString())), out string _); foreach (var item in Case["Cases"]) { if (mode == TxCaseType.BytesToSign || mode == TxCaseType.FinalSignedTx) { Transaction tx = new Transaction(); FastStreamReader stream = new FastStreamReader(Helper.HexToBytes(item["TxToSign"].ToString())); if (!tx.TryDeserialize(stream, out string err)) { throw new ArgumentException($"Could not deseralize the given tx case: " + $"{item["TestName"]}. Error: {err}"); } SigHashType sht = (SigHashType)(uint)item["SigHashType"]; int[] indexes = item["Indexes"].ToObject <int[]>(); if (mode == TxCaseType.BytesToSign) { string[] hashes = item["BytesToSign"].ToObject <string[]>(); yield return(new object[] { tx, prevTx, sht, indexes, hashes }); } else { string key = item["PrivateKey"].ToString(); byte[] signedTx = Helper.HexToBytes(item["SignedTx"].ToString()); yield return(new object[] { key, tx, prevTx, sht, indexes, signedTx }); } } else if (mode == TxCaseType.TxId) { Transaction tx = new Transaction(); FastStreamReader stream = new FastStreamReader(Helper.HexToBytes(item["SignedTx"].ToString())); if (!tx.TryDeserialize(stream, out string err)) { throw new ArgumentException($"Could not deseralize the given tx case: " + $"{item["TestName"]}. Error: {err}"); } string txId = item["TxId"].ToString(); string wtxId = item["WTxId"].ToString(); yield return(new object[] { tx, txId, wtxId }); } else { throw new ArgumentException("Undefined mode"); } } } }
public static IEnumerable <object[]> GetSignCases(TxCaseType mode) { // Transactions are signed with bitcoin-core version 0.19.0.1 (bitcoin-0.19.0.1-x86_64-linux-gnu.tar) // All transactions are broadcast and are included in blocks on testnet. JArray jar = Helper.ReadResource <JArray>("SignedTxTestData"); foreach (var Case in jar) { var prevTx = new Transaction(Case["TxToSpend"].ToString()); foreach (var item in Case["Cases"]) { if (mode == TxCaseType.BytesToSign || mode == TxCaseType.FinalSignedTx) { var tx = new Transaction(item["TxToSign"].ToString()); SigHashType sht = (SigHashType)(uint)item["SigHashType"]; int[] indexes = item["Indexes"].ToObject <int[]>(); if (mode == TxCaseType.BytesToSign) { string[] hashes = item["BytesToSign"].ToObject <string[]>(); yield return(new object[] { tx, prevTx, sht, indexes, hashes }); } else { string key = item["PrivateKey"].ToString(); byte[] signedTx = Helper.HexToBytes(item["SignedTx"].ToString()); yield return(new object[] { key, tx, prevTx, sht, indexes, signedTx }); } } else if (mode == TxCaseType.TxId) { var tx = new Transaction(item["SignedTx"].ToString()); string txId = item["TxId"].ToString(); string wtxId = item["WTxId"].ToString(); yield return(new object[] { tx, txId, wtxId }); } else if (mode == TxCaseType.Size) { string hex = item["SignedTx"].ToString(); var tx = new Transaction(hex); int totalSize = hex.Length / 2; int baseSize = (int)item["BaseSize"]; int weight = (int)item["Weight"]; int virtualSize = (int)item["VirtualSize"]; yield return(new object[] { tx, totalSize, baseSize, weight, virtualSize }); } else { throw new ArgumentException("Undefined mode"); } } } }