Solana:添加 Sollet / Phantom Wallet 连接到我的网站 - 步骤?

jee*_*joe 10 wallet solana

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

yan*_*-io 10

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

对于幻影钱包,文档位于https://docs.phantom.app/integrating/builting-a-connection

请注意,EVM 钱包(例如 Metamask)之间的一个主要区别是,大多数 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);
Run Code Online (Sandbox Code Playgroud)

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