public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JToken tokens = JToken.Load(reader); var gameItems = new List <GameItem>(); foreach (var token in tokens) { if (token["contract_type"].ToString() == "ERC721") { string symbol = token["item_type"].ToString(); string contractAddress = token["contract_address"].ToString(); byte[] stateBytes = token["state"].ToString().HexToByteArray(); BigInteger tokenId = BigInteger.Parse(token["token_id"].ToString()); var meta = new ERC721GameItemContract.Metadata(contractAddress, tokenId); var item = new GameItem(HoardService.Instance.DefaultGame, symbol, meta); item.State = stateBytes; gameItems.Add(item); } else if (token["contract_type"].ToString() == "ERC223") { string symbol = token["item_type"].ToString(); string contractAddress = token["contract_address"].ToString(); byte[] stateBytes = token["state"].ToString().HexToByteArray(); BigInteger balance = BigInteger.Parse(token["balance"].ToString()); var meta = new ERC223GameItemContract.Metadata(contractAddress, balance); var item = new GameItem(HoardService.Instance.DefaultGame, symbol, meta); item.State = stateBytes; gameItems.Add(item); } else { throw new NotSupportedException(); } } return(gameItems); }
/// <inheritdoc/> public override async Task <GameItem[]> GetGameItems(HoardID address) { var items = new List <GameItem>(); var balanceData = await plasmaComm.GetBalanceData(address, contract.Address); if (balanceData is NFCBalanceData) { string symbol = await contract.GetSymbol(); foreach (var tokenId in (balanceData as NFCBalanceData).TokenIds) { ERC721GameItemContract.Metadata meta = new ERC721GameItemContract.Metadata(contract.Address, tokenId); GameItem gameItem = new GameItem(game, symbol, meta); gameItem.State = await plasmaComm.GetTokenState(contract.Address, tokenId); items.Add(gameItem); } } return(items.ToArray()); }