Solana web3.js 将 onProgramAccountChange 通知解析为 JSON
Solana web3.js parse onProgramAccountChange notifications to JSON
如何将 connection.onProgramAccountChange
通知数据解析为 JSON?
https://solana-labs.github.io/solana-web3.js/modules.html#AccountInfo
文档将数据指定为类型 T
,对我来说通常是 Buffer
。
示例代码:
let progKey = new PublicKey("<program key here>");
conn.onProgramAccountChange(progKey, programCallback);
function programCallback(keyedAccountInfo: KeyedAccountInfo, context: Context) {
let data = keyedAccountInfo.accountInfo.data.toString("hex");
let ownerId = keyedAccountInfo.accountInfo.owner.toBase58();
let accId = keyedAccountInfo.accountId.toBase58();
console.log(`======
owner: ${ownerId}
accId: ${accId}
data: ${data}`);
}
在此特定实例中,数据类型实际上只是一个缓冲区,还是我需要做一些额外的事情来解码它?解码成十六进制、utf8、base64、base58 都不行。
尽管这是 programSubscribe
,但通知格式与 getProgramAccounts
相同。因此,答案可以在我的另一个答案中找到:
如何将 connection.onProgramAccountChange
通知数据解析为 JSON?
https://solana-labs.github.io/solana-web3.js/modules.html#AccountInfo
文档将数据指定为类型 T
,对我来说通常是 Buffer
。
示例代码:
let progKey = new PublicKey("<program key here>");
conn.onProgramAccountChange(progKey, programCallback);
function programCallback(keyedAccountInfo: KeyedAccountInfo, context: Context) {
let data = keyedAccountInfo.accountInfo.data.toString("hex");
let ownerId = keyedAccountInfo.accountInfo.owner.toBase58();
let accId = keyedAccountInfo.accountId.toBase58();
console.log(`======
owner: ${ownerId}
accId: ${accId}
data: ${data}`);
}
在此特定实例中,数据类型实际上只是一个缓冲区,还是我需要做一些额外的事情来解码它?解码成十六进制、utf8、base64、base58 都不行。
尽管这是 programSubscribe
,但通知格式与 getProgramAccounts
相同。因此,答案可以在我的另一个答案中找到: