如何通过 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)

如何将 Paytm 钱包集成到 Android 应用程序中? [关闭]

谷歌钱包与网站集成