如何解码base58 solana事务信息?



我使用solana API,作为getTransaction函数的响应,我得到一些数据。总的来说,我对data领域很感兴趣。文档表示:

data: -程序输入以base-58字符串编码的数据。

这里是问题,我不能转换这个base-58字符串,它看起来像这个3Bxs43eF7ZuXE46B-到更可读的东西。

使用一些默认解码器转换不工作。那么,我该怎么做呢?

我知道这有点离题,但这是如何使用@solana/web3.js保存和读取solana上的数据并使用bs58和缓冲区解码数据

const web3 = require('@solana/web3.js');
var bs58 = require('bs58');
let keypair;
const memoProgramId = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
let connection;

const establishConnection = async () =>{
let rpcUrl = web3.clusterApiUrl('devnet')
connection = new web3.Connection(rpcUrl, 'confirmed');   
console.log('Connection to cluster established:', rpcUrl);
}
const connectWallet = async () => {
let secretKey = Uint8Array.from(enter_secret);
keypair = web3.Keypair.fromSecretKey(secretKey);
console.log('keypair created: ' + keypair.publicKey.toString());
}
saveData = async (data) => {
let transferTransaction = new web3.Transaction();
transferTransaction.add(new web3.TransactionInstruction({
programId: memoProgramId,
keys: [{
pubkey: keypair.publicKey,
isSigner: true,
isWritable: false,
}],
data: Buffer.from(JSON.stringify(data))
}))
const transcationHash =  await web3.sendAndConfirmTransaction(
connection, 
transferTransaction, 
[keypair]
);
return transcationHash;
}
readTransaction = async (signature) => {
const transaction = await connection.getTransaction(signature);
return transaction.transaction.message.instructions[0].data;
}
saveReadData = async () => {
const signature = await saveData({
amount: 1,
isWon: true,
ROI: 2,
});
console.log(signature);
const b58Address = await readTransaction(signature);
const dataAsUint8Arr = bs58.decode(b58Address);
const jsonString = new Buffer.from(dataAsUint8Arr).toString('utf8');
const data = JSON.parse(jsonString);
console.log(data);
}
initConnection = async () => {
await establishConnection();
await connectWallet();
}
initTestReadSaveData = async () => {
await initConnection();
await saveReadData();
}
initTestReadSaveData();

Solana通常使用bs58模块,因此要解码您的字符串:

import * as bs58 from 'bs58';
const bytes = bs58.decode('3Bxs43eF7ZuXE46B)

最新更新