SCALE 解码 RPC getKeysPaged
SCALE decode RPC getKeysPaged
背景:
Polkadot 应用程序的前端允许我们在没有任何选项的情况下调用 claimer.lookup
link。 returns APN 和相关帐户的列表。
我们一直在构建的 substrate-frontend-template 要求我们包含一个选项,该选项不允许我们获取所有 APN 和帐户。作为解决方法,我们尝试进行直接 RPC 调用,但我们无法弄清楚如何解码响应。
我相信响应是 SCALE 编码的。下面是一篇博客 post,讨论了执行此操作的一些复杂问题:
https://www.shawntabrizi.com/substrate/querying-substrate-storage-via-rpc/
有关我们目前正在尝试的具体内容,您可以查看此文件:
https://github.com/Greenetwork/BLX_frontend_new/blob/maprefresh/src/MapRefresh.js#L21
Polkadot 前端正在解码对 getKeysPaged
调用的响应,但我还没有在我们的 https://github.com/Greenetwork/BLX_frontend_new
中找到解码它的方法
来自链的示例响应:
[
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a20cf935632272b1131281c8c417ea1d513500000000000000000000000000000000000000000000000000000000000000",
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a21640c3ff7716f6e3d046d710919caccb3434343735380000000000000000000000000000000000000000000000000000",
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a229bde7c5407d4c0e698d76543e46e51c3334353039383600000000000000000000000000000000000000000000000000"
]
Polkadot js 应用程序前端的解码结果
[
[
[
0x3500000000000000000000000000000000000000000000000000000000000000
],
5Ec3KvnQdwYfLDgZB6JujjatVkHKbzMPQP5YojDAmia8YBuQ
],
[
[
0x3434343735380000000000000000000000000000000000000000000000000000
],
5EE6fRKB1Drd8cZAVHGuZJHpmQr7bV66Mz2VaXEPJCnJSChw
],
[
[
0x3334353039383600000000000000000000000000000000000000000000000000
],
5Ew5ExAtUSBEMw96ZMMvS5TsyR7RQfwuve6zpebVYJQDetYZ
]
]
需要解码的前端模板响应示例:
进一步阅读 https://www.shawntabrizi.com/substrate/transparent-keys-in-substrate/
RPC 响应:
0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a2a0e98c1569443b450c93febfe626c7683331373035330000000000000000000000000000000000000000000000000000
---------------------- storage prefix key ------------------------+++++++ blake2 128 hash ++++++++------------------------ account id ----------------------------
但是我们的 account id
是 Address32 类型,所以我们需要再进行一次查找并将帐户 ID 反馈回 claimer.lookup
背景:
Polkadot 应用程序的前端允许我们在没有任何选项的情况下调用 claimer.lookup
link。 returns APN 和相关帐户的列表。
我们一直在构建的 substrate-frontend-template 要求我们包含一个选项,该选项不允许我们获取所有 APN 和帐户。作为解决方法,我们尝试进行直接 RPC 调用,但我们无法弄清楚如何解码响应。
我相信响应是 SCALE 编码的。下面是一篇博客 post,讨论了执行此操作的一些复杂问题: https://www.shawntabrizi.com/substrate/querying-substrate-storage-via-rpc/
有关我们目前正在尝试的具体内容,您可以查看此文件:
https://github.com/Greenetwork/BLX_frontend_new/blob/maprefresh/src/MapRefresh.js#L21
Polkadot 前端正在解码对 getKeysPaged
调用的响应,但我还没有在我们的 https://github.com/Greenetwork/BLX_frontend_new
来自链的示例响应:
[
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a20cf935632272b1131281c8c417ea1d513500000000000000000000000000000000000000000000000000000000000000",
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a21640c3ff7716f6e3d046d710919caccb3434343735380000000000000000000000000000000000000000000000000000",
"0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a229bde7c5407d4c0e698d76543e46e51c3334353039383600000000000000000000000000000000000000000000000000"
]
Polkadot js 应用程序前端的解码结果
[
[
[
0x3500000000000000000000000000000000000000000000000000000000000000
],
5Ec3KvnQdwYfLDgZB6JujjatVkHKbzMPQP5YojDAmia8YBuQ
],
[
[
0x3434343735380000000000000000000000000000000000000000000000000000
],
5EE6fRKB1Drd8cZAVHGuZJHpmQr7bV66Mz2VaXEPJCnJSChw
],
[
[
0x3334353039383600000000000000000000000000000000000000000000000000
],
5Ew5ExAtUSBEMw96ZMMvS5TsyR7RQfwuve6zpebVYJQDetYZ
]
]
需要解码的前端模板响应示例:
进一步阅读 https://www.shawntabrizi.com/substrate/transparent-keys-in-substrate/
RPC 响应:
0x2df95c7f7f0d67daa549602785d7beae891ad457bf4da54990fa84a2acb148a2a0e98c1569443b450c93febfe626c7683331373035330000000000000000000000000000000000000000000000000000
---------------------- storage prefix key ------------------------+++++++ blake2 128 hash ++++++++------------------------ account id ----------------------------
但是我们的 account id
是 Address32 类型,所以我们需要再进行一次查找并将帐户 ID 反馈回 claimer.lookup