Intentando hacer una función simple de envío y recepción en Solana con vainilla JS.
A continuación se muestra mi función de envío que funciona bien, y ahora quiero una función de recepción. Donde el proveedor obtendría Solana transferida de mi billetera de tesorería.
No estoy seguro de qué enfoque debería tener, solo estoy comenzando. ¿Hay alguna manera de simplemente mover las cosas en esta función? ¿O tengo que tener un enfoque totalmente diferente?
¡Gracias!
async function transferSOL() { // Detecing and storing the phantom wallet of the user (creator in this case) var provider = phantom; // Establishing connection var connection = new web3.Connection( web3.clusterApiUrl('devnet'), ); var transaction = new web3.Transaction().add( web3.SystemProgram.transfer({ fromPubkey: provider.publicKey, toPubkey: treasuryWallet.publicKey, lamports: 0.1 * web3.LAMPORTS_PER_SOL - 100 }), ); // Setting the variables for the transaction transaction.feePayer = await provider.publicKey; let blockhashObj = await connection.getRecentBlockhash(); transaction.recentBlockhash = await blockhashObj.blockhash; // Request creator to sign the transaction (allow the transaction) let signed = await provider.signTransaction(transaction); let signature = await connection.sendRawTransaction(signed.serialize()); await connection.confirmTransaction(signature); }Si desea transferir de su tesorería al usuario, entonces debe firmar para treasuryWallet de alguna manera. En su caso, parece que ya tiene el par de llaves disponible en su aplicación, por lo que simplemente puede hacer lo siguiente:
var transaction = new web3.Transaction().add( web3.SystemProgram.transfer({ toPubkey: provider.publicKey, fromPubkey: treasuryWallet.publicKey, lamports: 0.1 * web3.LAMPORTS_PER_SOL - 100 }), ); // Setting the variables for the transaction transaction.feePayer = treasuryWallet.publicKey; let blockhashObj = await connection.getRecentBlockhash(); transaction.recentBlockhash = await blockhashObj.blockhash; // Request creator to sign the transaction (allow the transaction) transaction.sign(treasuryWallet); let signature = await connection.sendRawTransaction(transaction.serialize()); await connection.confirmTransaction(signature);Tenga en cuenta que esto es muy inseguro! Todos los que usan su aplicación web tienen acceso completo a los fondos del tesoro si el par de llaves está expuesto, ya que pueden firmar todas las transacciones que quieran con él.