I’m trying to show the values of an application global state in a human-readable format.
If the global state param is of type “Bytes”, Then it can be converted to a human-readable string by doing
EX: atob(“Z29sZGk=”) will return “glodi”
But it is failing, if the value stored is the address or Tx-id.
I know how to decode address and tx-id to actual values, but the problem I’m trying to resolve is how to identify whether the values saved as “Bytes” are a normal string vs address/tx-id?
= padding if present.
Normal string, Address, tx-id , all of them are stored as bytes in a global state.
To decode to actual values:
Normal string: atob(value.bytes);
Address: sdk.encodeAddress(new Uint8Array(Buffer.from(value.bytes, “base64”)));
tx-id: encode(new Uint8Array(Buffer.from(value.bytes, “base64”))).slice(0, 52);
But here the problem is that all of them are stored as bytes and there is no way to distinguish between normal string vs address vs tx-id.
Right, unless you key them specifically to denote what type they are you’d have no way to know if a given 32 byte array is a txid or account or a generic hash
Got it. thanks, ben.
In my case, it can be any application, so I will not be able to identify based on the keys.
I will provide all the options in the UI and users can toggle between them.