Esempio n. 1
0
        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");
                    }
                }
            }
        }
Esempio n. 2
0
        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");
                    }
                }
            }
        }