Estoy usando @solana/web3.js y tengo este código:
const web3 = require("@solana/web3.js"); const clusterApi = process.env.SOLANA_CLUSTER; module.exports = { getConfirmedSignaturesForAddress: async address => { try { const connection = new web3.Connection(web3.clusterApiUrl(clusterApi), "confirmed"); const result = await connection.getSignaturesForAddress(address, { limit: 25 }); return { tx: result, status: true }; } catch (e) { return { status: false, error: e.message }; } } }Y cada vez que llamo a esta función me sale este error:
{ status: false, error: 'address.toBase58 is not a function' }Estaba tratando de enviarlo ya convertido a Base58, pero simplemente no funciona. ¿Qué ocurre?
Así es como resolví este problema. En términos generales, debe convertirlo no solo convirtiéndolo a Base58 puro, sino así:
const web3 = require("@solana/web3.js"); const bip39 = require("bip39"); const getKeyFromMemonic = async mnemonic => { return new Promise((resolve, reject) => { bip39 .mnemonicToSeed(mnemonic) .then(buffer => { const a = new Uint8Array(buffer.toJSON().data.slice(0, 32)); const key = web3.Keypair.fromSeed(a); resolve(key); }) .catch(err => reject(err)); }); }; getSignaturesForAddress: async address => { try { const key = await getKeyFromMemonic(address); const connection = new web3.Connection(web3.clusterApiUrl(clusterApi), "confirmed"); const result = await connection.getSignaturesForAddress(key.publicKey); return { tx: result, status: true }; } catch (e) { return { status: false, error: e.message }; } }