public override string ToString() { var strWriter = new StringWriter(); var jsonWriter = new JsonTextWriter(strWriter); jsonWriter.Formatting = Formatting.Indented; jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("tx"); jsonWriter.WriteStartObject(); var formatter = new RPC.BlockExplorerFormatter(); formatter.WriteTransaction2(jsonWriter, tx); jsonWriter.WriteEndObject(); if (TryGetFee(out var fee)) { jsonWriter.WritePropertyValue("fee", $"{fee} BTC"); } if (TryGetEstimatedFeeRate(out var feeRate)) { jsonWriter.WritePropertyValue("feeRate", $"{feeRate}"); } if (unknown.Count != 0) { jsonWriter.WritePropertyName("unknown"); jsonWriter.WriteStartObject(); foreach (var el in unknown) { jsonWriter.WritePropertyValue(Encoders.Hex.EncodeData(el.Key), Encoders.Hex.EncodeData(el.Value)); } jsonWriter.WriteEndObject(); } jsonWriter.WritePropertyName("inputs"); jsonWriter.WriteStartArray(); foreach (var input in this.Inputs) { input.Write(jsonWriter); } jsonWriter.WriteEndArray(); jsonWriter.WritePropertyName("outputs"); jsonWriter.WriteStartArray(); foreach (var output in this.Outputs) { output.Write(jsonWriter); } jsonWriter.WriteEndArray(); jsonWriter.WriteEndObject(); jsonWriter.Flush(); return(strWriter.ToString()); }
internal void Write(JsonTextWriter jsonWriter) { jsonWriter.WriteStartObject(); jsonWriter.WritePropertyValue("index", Index); if (unknown.Count != 0) { jsonWriter.WritePropertyName("unknown"); jsonWriter.WriteStartObject(); foreach (var el in unknown) { jsonWriter.WritePropertyValue(Encoders.Hex.EncodeData(el.Key), Encoders.Hex.EncodeData(el.Value)); } jsonWriter.WriteEndObject(); } jsonWriter.WritePropertyName("partial_signatures"); jsonWriter.WriteStartObject(); foreach (var sig in partial_sigs) { jsonWriter.WritePropertyValue(sig.Key.ToString(), Encoders.Hex.EncodeData(sig.Value.ToBytes())); } jsonWriter.WriteEndObject(); if (SighashType is SigHash s) { jsonWriter.WritePropertyValue("sighash", GetName(s)); } if (this.FinalScriptSig != null) { jsonWriter.WritePropertyValue("final_script_sig", FinalScriptSig.ToString()); } if (this.FinalScriptWitness != null) { jsonWriter.WritePropertyValue("final_script_witness", FinalScriptWitness.ToString()); } if (this.redeem_script != null) { jsonWriter.WritePropertyValue("redeem_script", redeem_script.ToString()); } if (this.witness_script != null) { jsonWriter.WritePropertyValue("witness_script", witness_script.ToString()); } if (this.NonWitnessUtxo != null) { jsonWriter.WritePropertyName("non_witness_utxo"); jsonWriter.WriteStartObject(); var formatter = new RPC.BlockExplorerFormatter(); formatter.WriteTransaction2(jsonWriter, NonWitnessUtxo); jsonWriter.WriteEndObject(); } if (this.WitnessUtxo != null) { jsonWriter.WritePropertyName("witness_utxo"); jsonWriter.WriteStartObject(); jsonWriter.WritePropertyValue("value", WitnessUtxo.Value.ToString(false, false)); jsonWriter.WritePropertyValue("scriptPubKey", WitnessUtxo.ScriptPubKey.ToString()); jsonWriter.WriteEndObject(); } jsonWriter.WriteBIP32Derivations(this.hd_keypaths); jsonWriter.WriteEndObject(); }
private static RawFormatter GetFormatter(RawFormat rawFormat, Network network) { RawFormatter formatter = null; switch(rawFormat) { case RawFormat.Satoshi: formatter = new SatoshiFormatter(); break; case RawFormat.BlockExplorer: formatter = new BlockExplorerFormatter(); break; default: throw new NotSupportedException(rawFormat.ToString()); } formatter.Network = network ?? formatter.Network; return formatter; }
public static Block ParseJson(string json) { var formatter = new BlockExplorerFormatter(); var block = JObject.Parse(json); var txs = (JArray)block["tx"]; Block blk = new Block(); blk.Header.Bits = new Target((uint)block["bits"]); blk.Header.BlockTime = Utils.UnixTimeToDateTime((uint)block["time"]); blk.Header.Nonce = (uint)block["nonce"]; blk.Header.Version = (int)block["ver"]; blk.Header.HashPrevBlock = uint256.Parse((string)block["prev_block"]); blk.Header.HashMerkleRoot = uint256.Parse((string)block["mrkl_root"]); foreach (var tx in txs) { blk.AddTransaction(formatter.Parse((JObject)tx)); } return blk; }