-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathToken.cs
63 lines (55 loc) · 1.88 KB
/
Token.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Numerics;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UnityEngine.Scripting;
namespace Sequence
{
[Serializable]
[JsonConverter(typeof(TokenConverter))]
public class Token
{
public Chain Chain;
public Address Contract;
public string TokenId;
public Token(Chain chain, Address contract, string tokenId = null)
{
Chain = chain;
Contract = contract;
TokenId = tokenId;
}
[Preserve]
[JsonConstructor]
public Token(BigInteger chainId, string contractAddress, string tokenId = null)
{
Chain = ChainDictionaries.ChainById[chainId.ToString()];
Contract = new Address(contractAddress);
TokenId = tokenId;
}
}
internal class TokenConverter : JsonConverter<Token>
{
public override void WriteJson(JsonWriter writer, Token value, JsonSerializer serializer)
{
var jsonObject = new JObject
{
["chainId"] = ulong.Parse(ChainDictionaries.ChainIdOf[value.Chain]),
["contractAddress"] = value.Contract.ToString(),
};
if (value.TokenId != null)
{
jsonObject["tokenId"] = value.TokenId;
}
jsonObject.WriteTo(writer);
}
public override Token ReadJson(JsonReader reader, Type objectType, Token existingValue,
bool hasExistingValue, JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
BigInteger chainId = jsonObject["chainId"]?.Value<ulong>() ?? 0;
string contractAddress = jsonObject["contractAddress"]?.Value<string>();
string tokenId = jsonObject["tokenId"]?.Value<string>();
return new Token(chainId, contractAddress, tokenId);
}
}
}