EOSIO / eosjs

General purpose library for the EOSIO blockchain.
http://eosio.github.io/eosjs
MIT License
1.43k stars 462 forks source link

Deserialize Table_rows #716

Open regisBafutwabo opened 4 years ago

regisBafutwabo commented 4 years ago

Is there a way to deserialize the table_rows returned data that are serialized since they are not actions? (preferably through eosjs)

here below is the screenshot of what I was trying to accomplish:

Screen Shot 2020-04-13 at 3 00 24 PM
emperorhan commented 4 years ago
function deserializeTypeData(contract: Contract, account: string, structName: string, data: string | Uint8Array, textEncoder: TextEncoder, textDecoder: TextDecoder): any {
    const type = contract.types.get(structName);
    if (typeof data === "string") {
        data = hexToUint8Array(data);
    }
    if(!type) {
        throw new Error(`Unknown type ${structName} in contract ${account}`);
    }
    const buffer = new SerialBuffer({textDecoder, textEncoder});
    buffer.pushArray(data);
    return type.deserialize(buffer);
}

This works but you should know the struct name from contract code (ex. for eosio rammarket in eosio.system/exchange_state.hpp the struct name is exchange_state)