【问题标题】:Solana : Adding Sollet / Phantom Wallet Connect to my website - Steps?Solana:将 Sollet / Phantom Wallet Connect 添加到我的网站 - 步骤?
【发布时间】:2021-08-30 19:22:47
【问题描述】:

我希望有人能指出我正确的方向......我正在尝试将“钱包连接”扩展(例如 sollet / phantom)功能添加到我的网站,但我不知道从哪里开始。 Metamask 有很好的解释/示例,但我不确定 Solana 是否相同?

【问题讨论】:

    标签: wallet solana


    【解决方案1】:

    您可以将https://github.com/project-serum/sol-wallet-adapter 用于 Sollet Web 或 Sollet 扩展

    对于虚拟钱包,文档在这里https://docs.phantom.app/integrating/establishing-a-connection

    请注意,元掩码等 EVM 钱包之间的一个主要区别是,大多数 EVM 钱包还将处理在链上发送交易,而 Solana 钱包只处理对交易进行签名,并且发送由应用程序完成。

    以下是如何与 Sollet 和 Phantom 集成的示例

    import { Connection, SystemProgram, Transaction, clusterApiUrl } from '@solana/web3.js';
    import Wallet from '@project-serum/sol-wallet-adapter';
    
    let provider = 'https://www.sollet.io';
    
    // For sollet extension use
    // provider = window.sollet
    
    let wallet = new Wallet(provider);
    wallet.on('connect', publicKey => console.log('Connected to ' + publicKey.toBase58()));
    wallet.on('disconnect', () => console.log('Disconnected'));
    await wallet.connect();
    
    // Sending a transaction
    let connection = new Connection(clusterApiUrl('devnet'));
    
    let transaction = new Transaction().add(
      SystemProgram.transfer({
        fromPubkey: wallet.publicKey,
        toPubkey: wallet.publicKey,
        lamports: 100,
      })
    );
    let { blockhash } = await connection.getRecentBlockhash();
    transaction.recentBlockhash = blockhash;
    transaction.feePayer = wallet.publicKey;
    let signed = await wallet.signTransaction(transaction);
    let txid = await connection.sendRawTransaction(signed.serialize());
    await connection.confirmTransaction(txid);
    
    // Phantom Wallet
    window.solana.connect();
    window.solana.on("connect", () => console.log("connected!"))
    
    console.log(window.solana.publicKey);
    

    Solana 团队还编写了一个扩展库,用于与 Solana 上的大量现有钱包集成 - https://github.com/solana-labs/wallet-adapter

    【讨论】:

    • let wallet = new Wallet(provider); 你在哪里定义了Wallet
    • @dev-assassin 谢谢,我错过了-应该是import Wallet from '@project-serum/sol-wallet-adapter'
    • window.solana.publicKey的日志返回null。
    【解决方案2】:

    使用幻影

    <html>
      <head>
        <script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"></script>
      </head>
      <body>
        <script>
    
        const getProvider = async () => {
            if ("solana" in window) {
              
              await window.solana.connect(); // opens wallet to connect to
    
              const provider = window.solana;
              if (provider.isPhantom) {
                console.log("Is Phantom installed?  ", provider.isPhantom);
                return provider;
              }
            } else {
              document.write('Install https://www.phantom.app/');
            }
          };
    
          window.onload = () => {
    
            getProvider().then(provider => {
              console.log('key', provider.publicKey.toString())
            })
            .catch(function(error){
              console.log(error)
            });
    
          }
        </script>
      </body>
    </html>
    

    【讨论】:

    • 我安装了 phantom chrome 扩展,但仍然显示 Install phantom。为什么会这样?
    猜你喜欢
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多