¿Alguien sabe lo que está mal con este código?
await window.solana.connect(); let fromWallet = window.solana.publicKey; let toWallet = new PublicKey("<KEY>"); let transaction = new Transaction(); transaction.add( SystemProgram.transfer({ fromPubKey: fromWallet, toPubKey: toWallet, lamports: LAMPORTS_PER_SOL }) ); transaction.feePayer = fromWallet; const connection = new Connection(clusterApiUrl('devnet'), 'confirmed'); let bk = await connection.getLatestBlockhash(); transaction.recentBlockhash = bk.blockhash; const signature = await window.solana.signAndSendTransaction(await transaction); await connection.confirmTransaction(signature); console.log(signature);Lanza un error en la línea.
const signature = await window.solana.signAndSendTransaction(await transaction)Algo sobre convertir undefined a base58.
Revisé las llaves, ambas están bien.
Aquí está el registro de errores:
vue.runtime.esm.js?2b0e:1897 TypeError: Cannot read properties of undefined (reading 'toBase58') at eval (index.browser.esm.js?64b9:2451:1) at Array.sort (<anonymous>) at Transaction.compileMessage (index.browser.esm.js?64b9:2450:1) at Transaction._compile (index.browser.esm.js?64b9:2563:1) at Transaction.serializeMessage (index.browser.esm.js?64b9:2585:1) at ia (inpage.js:141:130205) at inpage.js:141:137033 at c (inpage.js:2:47880) at Generator._invoke (inpage.js:2:47668) at Generator.next (inpage.js:2:48309)¿Algunas ideas?
Oh querido señor,
Solucioné el problema cambiando el código:
transaction.add( SystemProgram.transfer({ fromPubKey: fromWallet, toPubKey: toWallet, lamports: LAMPORTS_PER_SOL }) );a lo siguiente:
const instruction = SystemProgram.transfer({ fromPubkey: fromWallet, toPubkey: toWallet, lamports: LAMPORTS_PER_SOL, }); transaction.add(instruction);Todavía no entiendo por qué funciona, pero bueno, resolvió mi problema.
El error TypeError: Cannot read properties of undefined (reading 'toBase58') generalmente significa que hay una PublicKey no válida en alguna parte.
Suponiendo que la conexión a la billetera sea correcta, probablemente haya un problema con la línea:
let toWallet = new PublicKey("<KEY>");Primero, asegúrese de que el resultado de esa llamada sea correcto, registrándolo, es decir:
console.log(toWallet.toBase58());Si eso funciona, es probable que haya un problema con la conexión de la billetera.