Exemplo n.º 1
0
 public void ReadWrite(BitcoinStream bitcoinStream)
 {
     bitcoinStream.ReadWrite(ref _scriptSig);
     if (bitcoinStream.Serializing)
     {
         Witness.WriteToStream(bitcoinStream);
     }
     else
     {
         Witness = WitScript.Load(bitcoinStream);
     }
 }
Exemplo n.º 2
0
        private void UnSerialize(BitcoinStream stream)
        {
            var fAllowWitness = stream.TransactionOptions.HasFlag(TransactionOptions.Witness) && stream.ProtocolCapabilities.SupportWitness;

            // Detect dynamic federation block serialization using "HF bit",
            // or the signed bit which is invalid in Bitcoin
            var isDynamic = false;
            int version   = 0;

            stream.ReadWrite(ref version);
            isDynamic     = version < 0;
            this.nVersion = ~DYNAFED_HF_MASK & version;

            if (isDynamic)
            {
                stream.ReadWrite(ref hashPrevBlock);
                stream.ReadWrite(ref hashMerkleRoot);
                stream.ReadWrite(ref nTime);
                stream.ReadWrite(ref _nHeight);
                stream.ReadWrite(ref DynaFedParams);
                // We do not serialize witness for hashes, or weight calculation
                if (stream.Type != SerializationType.Hash && fAllowWitness)
                {
                    SignBlockWitness = WitScript.Load(stream);
                }
            }
            else
            {
                stream.ReadWrite(ref hashPrevBlock);
                stream.ReadWrite(ref hashMerkleRoot);
                stream.ReadWrite(ref nTime);
                if (ElementsParams <TNetwork> .BlockHeightInHeader)
                {
                    stream.ReadWrite(ref _nHeight);
                }

                if (ElementsParams <TNetwork> .SignedBlocks)
                {
                    stream.ReadWrite(ref _Proof);
                }
                else
                {
                    stream.ReadWrite(ref nBits);
                    stream.ReadWrite(ref nNonce);
                }
            }
        }
Exemplo n.º 3
0
            internal void ReadWrite(BitcoinStream stream)
            {
                for (int i = 0; i < _Inputs.Count; i++)
                {
                    if (stream.Serializing)
                    {
                        var bytes = (_Inputs[i].WitScript ?? WitScript.Empty).ToBytes();
                        stream.ReadWrite(ref bytes);
                    }
                    else
                    {
                        _Inputs[i].WitScript = WitScript.Load(stream);
                    }
                }

                if (IsNull())
                {
                    throw new FormatException("Superfluous witness record");
                }
            }
Exemplo n.º 4
0
            internal void ReadWrite(BitcoinStream stream)
            {
                for (int i = 0; i < _Inputs.Count; i++)
                {
                    if (stream.Serializing)
                    {
                        var bytes = ((ElementsTxIn)_Inputs[i]).IssuanceAmountRangeProof;
                        stream.ReadWriteAsVarString(ref bytes);


                        bytes = ((ElementsTxIn)_Inputs[i]).InflationKeysRangeProof;
                        stream.ReadWriteAsVarString(ref bytes);

                        bytes = (_Inputs[i].WitScript ?? WitScript.Empty).ToBytes();
                        stream.ReadWrite(ref bytes);

                        bytes = (((ElementsTxIn)_Inputs[i]).PeginWitScript ?? WitScript.Empty).ToBytes();
                        stream.ReadWrite(ref bytes);
                    }
                    else
                    {
                        byte[] bytes = null;
                        stream.ReadWriteAsVarString(ref bytes);
                        ((ElementsTxIn)_Inputs[i]).IssuanceAmountRangeProof = bytes;

                        bytes = null;
                        stream.ReadWriteAsVarString(ref bytes);
                        ((ElementsTxIn)_Inputs[i]).InflationKeysRangeProof = bytes;

                        ((ElementsTxIn)_Inputs[i]).WitScript = WitScript.Load(stream);

                        ((ElementsTxIn)_Inputs[i]).PeginWitScript = WitScript.Load(stream);
                    }
                }

                for (int i = 0; i < _Outputs.Count; i++)
                {
                    if (stream.Serializing)
                    {
                        var bytes = ((ElementsTxOut)_Outputs[i]).SurjectionProof;
                        stream.ReadWriteAsVarString(ref bytes);

                        bytes = ((ElementsTxOut)_Outputs[i]).RangeProof;
                        stream.ReadWriteAsVarString(ref bytes);
                    }
                    else
                    {
                        byte[] bytes = null;
                        stream.ReadWriteAsVarString(ref bytes);
                        ((ElementsTxOut)_Outputs[i]).SurjectionProof = bytes;

                        bytes = null;
                        stream.ReadWriteAsVarString(ref bytes);
                        ((ElementsTxOut)_Outputs[i]).RangeProof = bytes;
                    }
                }

                if (IsNull())
                {
                    throw new FormatException("Superfluous witness record");
                }
            }
Exemplo n.º 5
0
        public override void ReadWrite(BitcoinStream stream)
        {
            var fAllowWitness = stream.TransactionOptions.HasFlag(TransactionOptions.Witness) && stream.ProtocolCapabilities.SupportWitness;
            // Detect dynamic federation block serialization using "HF bit",
            // or the signed bit which is invalid in Bitcoin
            var isDynamic = false;
            int version   = 0;

            if (!stream.Serializing)
            {
                stream.ReadWrite(ref version);
                isDynamic = version < 0;
                nVersion  = ~DYNAFED_HF_MASK & version;
            }
            else
            {
                version = nVersion;
                if (!DynaFedParams.IsNull)
                {
                    version  |= DYNAFED_HF_MASK;
                    isDynamic = true;
                }
                stream.ReadWrite(ref version);
            }

            if (isDynamic)
            {
                stream.ReadWrite(ref hashPrevBlock);
                stream.ReadWrite(ref hashMerkleRoot);
                stream.ReadWrite(ref nTime);
                stream.ReadWrite(ref _nHeight);
                stream.ReadWrite(ref DynaFedParams);
                if (stream.Type != SerializationType.Hash && fAllowWitness)
                {
                    if (stream.Serializing)
                    {
                        SignBlockWitness.WriteToStream(stream);
                    }
                    else
                    {
                        SignBlockWitness = WitScript.Load(stream);
                    }
                }
                stream.ReadWrite(ref hashMerkleRoot);
                stream.ReadWrite(ref nTime);

                if (ElementsParams <TNetwork> .BlockHeightInHeader)
                {
                    stream.ReadWrite(ref _nHeight);
                }

                if (ElementsParams <TNetwork> .SignedBlocks)
                {
                    stream.ReadWrite(ref _Proof);
                }
                else
                {
                    stream.ReadWrite(ref nBits);
                    stream.ReadWrite(ref nNonce);
                }
            }
            else
            {
                stream.ReadWrite(ref hashPrevBlock);
                stream.ReadWrite(ref hashMerkleRoot);
                stream.ReadWrite(ref nTime);
                stream.ReadWrite(ref _nHeight);
                stream.ReadWrite(ref _Proof);
            }
        }