如何通过 Phantom 钱包集成使用 Vanilla JS 和 JSON-RPC 获取 Solana 帐户信息和/或 SOL 余额?
Posted
技术标签:
【中文标题】如何通过 Phantom 钱包集成使用 Vanilla JS 和 JSON-RPC 获取 Solana 帐户信息和/或 SOL 余额?【英文标题】:How to get Solana Account Info and-or SOL Balance using Vanilla JS and JSON-RPC via Phantom wallet integration? 【发布时间】:2021-12-05 03:23:02 【问题描述】:以下 Vanilla JS 示例通过 Phantom 钱包连接和断开 Solana 区块链。
连接成功,获取公共地址。
尝试使用 JSON-RPC 请求获取钱包余额和账户信息时失败。
如果有人可以帮助解决这个问题,我们将为我们这些喜欢尽可能保留原版的人提供一些基本示例。
连接功能:
// Connect Phantom
function phantom_connect()
// Check for Solana & Phantom
var provider = () =>
if ("solana" in window)
var provider = window.solana;
if (provider.isPhantom)
return provider;
else
return false;
window.open("https://phantom.app", "_blank");
;
var phantom = provider();
if (phantom !== false)
console.log("Phantom Wallet Found, Connecting..");
try
// Connect to Solana
var connect_wallet = phantom.connect();
// After Connecting
phantom.on("connect", () =>
// Check Connection
console.log("Phantom Connected: " + phantom.isConnected);
// Get Wallet Address
var wallet_address = phantom.publicKey.toString();
console.log("Solana Wallet Address: " + wallet_address);
// ********** THIS FAILS **********
// Get Account Info
var account = phantom.request(
"jsonrpc": "2.0",
"id": 1,
"method": "getAccountInfo",
"params": [wallet_address,
"encoding": "jsonParsed"
]
);
console.log("Solana Account Info:");
console.log(account);
// ********************************
// ********** THIS FAILS **********
// Get Wallet Balance
var balance = phantom.request(
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": [wallet_address]
);
console.log("Solana Wallet Balance:");
console.log(balance);
// ********************************
);
//
catch (err)
console.log("Connection Cancelled!");
断开功能:
// Disconnect Phantom
function phantom_disconnect()
window.solana.request(
method: "disconnect"
);
window.solana.on('disconnect', () =>
console.log("Phantom Disconnected!");
);
控制台在 getBalance 和 getAccountInfo 上均显示 -32603 错误。
RPC Error: JsonRpcEngine: Response has no error or result for request:
【问题讨论】:
【参考方案1】:它不使用 JSON-RPC API,但我在代码下方添加了 Devnet
上的 Solana (Phantom) 钱包余额。
provider = window.solana;
connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl('devnet'), 'confirmed');
// After Connecting
connection.getBalance(provider.publicKey).then(function(value) console.log(value); )
【讨论】:
以上是关于如何通过 Phantom 钱包集成使用 Vanilla JS 和 JSON-RPC 获取 Solana 帐户信息和/或 SOL 余额?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用现有钱包签署使用节点 JS 脚本运行的 solana 交易?
如何使用 Solana keygen 中的密钥来使用网络钱包?
通过 NFC(钱包支付)将 Apple Pay 与 Android 应用程序集成
通过设置 cookie 使用 Phantom.Js 打开受密码保护的站点 (Passport.js)