public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         var bytes = Encoders.Hex.DecodeData((string)reader.Value);
         if (objectType == typeof(Key))
         {
             return(new Key(bytes));
         }
         else if (objectType == typeof(PubKey))
         {
             return(new PubKey(bytes));
         }
         else if (objectType == typeof(TaprootPubKey))
         {
             return(new TaprootPubKey(bytes));
         }
         else
         {
             return(new TaprootInternalPubKey(bytes));
         }
     }
     catch (EndOfStreamException)
     {
     }
     catch (FormatException)
     {
     }
     throw new JsonObjectException("Invalid bitcoin object of type " + objectType.Name, reader);
 }
예제 #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            reader.AssertJsonType(JsonToken.String);
            var network = (string)reader.Value;

            if (network == null)
            {
                return(null);
            }
            if (network.Equals("MainNet", StringComparison.OrdinalIgnoreCase) || network.Equals("main", StringComparison.OrdinalIgnoreCase))
            {
                return(Network.Main);
            }
            if (network.Equals("TestNet", StringComparison.OrdinalIgnoreCase) || network.Equals("test", StringComparison.OrdinalIgnoreCase))
            {
                return(Network.TestNet);
            }
            if (network.Equals("RegTest", StringComparison.OrdinalIgnoreCase) || network.Equals("reg", StringComparison.OrdinalIgnoreCase))
            {
                return(Network.RegTest);
            }
            var net = Network.GetNetwork(network);

            if (net != null)
            {
                return(net);
            }
            throw new JsonObjectException("Unknown network (valid values : main, test, reg)", reader);
        }
예제 #3
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         if (objectType == typeof(KeyId))
         {
             return(new KeyId(Encoders.Hex.DecodeData((string)reader.Value)));
         }
         if (objectType == typeof(ScriptId))
         {
             return(new ScriptId(Encoders.Hex.DecodeData((string)reader.Value)));
         }
         if (objectType == typeof(WitKeyId))
         {
             return(new WitKeyId(Encoders.Hex.DecodeData((string)reader.Value)));
         }
         if (objectType == typeof(WitScriptId))
         {
             return(new WitScriptId(Encoders.Hex.DecodeData((string)reader.Value)));
         }
     }
     catch
     {
     }
     throw new JsonObjectException("Invalid signature", reader);
 }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(new[] { JsonToken.Integer, JsonToken.Float });
     try
     {
         if (reader.TokenType == JsonToken.Integer)
         {
             return(new FeeRate(Money.Satoshis((long)reader.Value), 1));
         }
         if (reader.TokenType == JsonToken.Float)
         {
             if (reader.Value is decimal v)
             {
                 return(new FeeRate(v));
             }
             if (reader.Value is double d)
             {
                 return(new FeeRate((decimal)d));
             }
             return(new FeeRate((decimal)(double)reader.Value));
         }
         throw new JsonObjectException("Fee rate amount should be in satoshi", reader);
     }
     catch (InvalidCastException)
     {
         throw new JsonObjectException("Fee rate should be in satoshi", reader);
     }
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            reader.AssertJsonType(JsonToken.String);
            try
            {
                IBitcoinString result = Network.Parse(reader.Value.ToString(), objectType);
                if (result == null)
                {
                    throw new JsonObjectException("Invalid BitcoinString network", reader);
                }

                if (!objectType.GetTypeInfo().IsAssignableFrom(result.GetType().GetTypeInfo()))
                {
                    throw new JsonObjectException("Invalid BitcoinString type expected " + objectType.Name + ", actual " + result.GetType().Name, reader);
                }
                return(result);
            }
            catch (FormatException ex)
            {
                throw new JsonObjectException(ex.Message, reader);
            }
        }
예제 #6
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         IBitcoinSerializable obj = null;
         var bytes = Encoders.Hex.DecodeData((string)reader.Value);
         if (!Network.Consensus.ConsensusFactory.TryCreateNew(objectType, out obj))
         {
             if (objectType == typeof(PubKey))
             {
                 obj = new PubKey(bytes);
             }
             else
             {
                 obj = (IBitcoinSerializable)Activator.CreateInstance(objectType);
             }
         }
         obj.ReadWrite(bytes, Network);
         return(obj);
     }
     catch (EndOfStreamException)
     {
     }
     catch (FormatException)
     {
     }
     throw new JsonObjectException("Invalid bitcoin object of type " + objectType.Name, reader);
 }
        public override ChainName ReadJson(JsonReader reader, Type objectType, ChainName existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            reader.AssertJsonType(JsonToken.String);
            var v = (string)reader.Value;

            if (v.Length == 0)
            {
                return(null);
            }
            return(new ChainName(v));
        }
예제 #8
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     try
     {
         if (reader.TokenType == JsonToken.Null)
         {
             return(null);
         }
         reader.AssertJsonType(JsonToken.String);
         return(Encoders.Hex.DecodeData((string)reader.Value));
     }
     catch
     {
         throw new JsonObjectException("Invalid hex", reader);
     }
 }
예제 #9
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     try
     {
         if (reader.TokenType == JsonToken.Null)
         {
             return(null);
         }
         reader.AssertJsonType(JsonToken.Integer);
         return(new Money((long)reader.Value));
     }
     catch (InvalidCastException)
     {
         throw new JsonObjectException("Money amount should be in satoshi", reader);
     }
 }
예제 #10
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         var value = reader.Value.ToString();
         return(new BitcoinAssetId(value, Network).AssetId);
     }
     catch (FormatException)
     {
         throw new JsonObjectException("Invalid BitcoinAssetId ", reader);
     }
 }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         return(PSBT.Parse((string)reader.Value, Network));
     }
     catch (EndOfStreamException)
     {
     }
     catch (FormatException)
     {
     }
     throw new JsonObjectException("Invalid PSBT", reader);
 }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         return(uint256.Parse((string)reader.Value));
     }
     catch (EndOfStreamException)
     {
     }
     catch (FormatException)
     {
     }
     throw new JsonObjectException("Invalid bitcoin object of type " + objectType.Name, reader);
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.Value == null)
            {
                return(null);
            }
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            reader.AssertJsonType(JsonToken.Integer);
            var result = Utils.UnixTimeToDateTime((ulong)(long)reader.Value);

            if (objectType == typeof(DateTime))
            {
                return(result.UtcDateTime);
            }
            return(result);
        }
 public override object?ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         if (!OutputDescriptor.TryParse((string)reader.Value, Network, out var od, _requireChecksum, _signingRepository))
         {
             throw new JsonObjectException("Invalid OutputDescriptor", reader);
         }
         return(od);
     }
     catch (FormatException ex)
     {
         throw new JsonObjectException($"Invalid OutputDescriptor {ex}", reader);
     }
 }
예제 #15
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }

            reader.AssertJsonType(JsonToken.String);
            try
            {
                if (!OutPoint.TryParse((string)reader.Value, out var outpoint))
                {
                    throw new JsonObjectException("Invalid bitcoin object of type OutPoint", reader);
                }
                return(outpoint);
            }
            catch (EndOfStreamException)
            {
            }
            throw new JsonObjectException("Invalid bitcoin object of type OutPoint", reader);
        }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     try
     {
         var nullable = objectType == typeof(LockTime?);
         if (reader.TokenType == JsonToken.Null)
         {
             if (nullable)
             {
                 return(null);
             }
             return(LockTime.Zero);
         }
         reader.AssertJsonType(JsonToken.Integer);
         return(new LockTime((uint)(long)reader.Value));
     }
     catch
     {
         throw new JsonObjectException("Invalid locktime", reader);
     }
 }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     try
     {
         if (objectType == typeof(Script))
         {
             return(Script.FromBytesUnsafe(Encoders.Hex.DecodeData((string)reader.Value)));
         }
         if (objectType == typeof(WitScript))
         {
             return(new WitScript(Encoders.Hex.DecodeData((string)reader.Value)));
         }
     }
     catch (FormatException)
     {
     }
     throw new JsonObjectException("A script should be a byte string", reader);
 }
예제 #18
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.Null)
     {
         return(null);
     }
     reader.AssertJsonType(JsonToken.String);
     if (typeof(KeyPath).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo()))
     {
         if (KeyPath.TryParse(reader.Value.ToString(), out var k))
         {
             return(k);
         }
         throw new JsonObjectException("Invalid key path", reader);
     }
     else
     {
         if (RootedKeyPath.TryParse(reader.Value.ToString(), out var k))
         {
             return(k);
         }
         throw new JsonObjectException("Invalid rooted key path", reader);
     }
 }