public void ReadWrite(BitcoinStream bitcoinStream) { bitcoinStream.ReadWrite(ref _scriptSig); if (bitcoinStream.Serializing) { Witness.WriteToStream(bitcoinStream); } else { Witness = WitScript.Load(bitcoinStream); } }
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); } } }
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"); } }
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"); } }
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); } }