Tengo una conexión con la billetera Phantom.
Espero que phantom_balance() devuelva un saldo o datos que contengan el saldo.
¿Tengo un error en el formateo json-rpc ?
Recibo el siguiente error de JsonRpcEngine en catch() .
Phantom - RPC Error: JsonRpcEngine: Response has no error or result for request: { "jsonrpc": "2.0", "id": 1161935556, "method": "getBalance", "params": [ "iQKBP3tSX6g3j6pS6g3LuzhoqTQKBP3tSX6g33tSX6g3j6pS6g" ] }Aquí está el js
// get wallet provider, phantom const get_provider = () => { if ("solana" in window) { const provider = window.solana; if (provider.isPhantom) { return provider; } } window.open("https://phantom.app/", "_blank"); }; // async get wallet balance async function phantom_balance() { // alt window.solana const phantom = get_provider(); console.log("Still Connected: " + phantom.isConnected); if (phantom.isConnected !== false) { const wallet_address = phantom.publicKey.toString(); console.log("Getting Balance For: " + wallet_address); // json-rpc request (ERROR!) const balance = await phantom.request({ method: "getBalance", params: [wallet_address] }) .then(function(data) { console.log(data); }).catch(function(e) { console.log(e); }); } } También probé lo siguiente y aparece un error que dice que phantom.getBalance() no es una función.
const balance = await phantom.getBalance(wallet_address) .then(function(data) { console.log(data); }).catch(function(e) { console.log(e); }); Actualmente no estoy incluyendo ningún <script> en el encabezado del documento. Según los documentos de Phantom, inyectan window.solana en el documento (que también expone la interfaz RPC). ¿Quizás todavía necesito web3 en la cabeza para acceder a window.solana.getBalance(wallet_address) y/o al método RPC window.solana.request(method: "getBalance") ?
Aquí está mi ejemplo de trabajo.
Asegúrese de tener instalada la extensión de billetera Phantom. app.fantasma
Incluya solana-web3 en el encabezado del documento.
<script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.min.js"></script>type="module" . <script type="module" src="/path/to/your/main.js"></script> // get wallet provider, phantom const get_provider = () => { if ("solana" in window) { const provider = window.solana; if (provider.isPhantom) { return provider; } } window.open("https://phantom.app/", "_blank"); }; // get balance from connected Phantom wallet async function phantom_balance() { // alt window.solana const phantom = get_provider(); console.log("Wallet Connected: " + phantom.isConnected); if (phantom.isConnected !== false) { const wallet = phantom.publicKey; const wallet_b58 = phantom.publicKey.toString(); // connect to the cluster console.log("Connecting Cluster"); var connection = new solanaWeb3.Connection( solanaWeb3.clusterApiUrl('devnet'), 'confirmed', ); // remember, do not use base 58 encoded key with getBalance(); console.log("Getting Balance: " + wallet_b58); let _balance = await connection.getBalance(wallet) .then(function(data) { console.log("Wallet Balance: " + data); return data; }) .catch(function(error) { console.log(error); return error; }); } } var balance = phantom_balance();Devuelve un número entero de Lamports
992953240Este código si desea obtener un número que no está en Lamports let _balance = await connection.getBalance(wallet).then(function(data) { console.log("Wallet Balance: " + data / lamports_per_sol); return data; })