XRPLのアプリケーションで複数のウォレットをサポートする
XRP Ledger とは
XRP LedgerはBitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。
トークン機能やDEX機能をプロトコルネイティブに搭載しており、強力な決済機能があります。決済機能だけでなくNFTやAMM、Hooks(スマコン/開発中)など様々な機能を搭載しています。
XRP Ledgerエコシステムのウォレット
XRP Ledgerに対応したウォレットとして、次のようなものがあります。
Wallet Standard
現在、XRP LedgerエコシステムのWallet向けの規格の議論が進められています。
Wallet Standardを利用したReactライブラリ
StandardをベースとしたJavaScript実装および、Reactライブラリを公開しています
本記事ではこのライブラリを利用した複数ウォレット対応のXRPLアプリケーションの作成方法を説明します。
サンプルアプリケーションの作成
1. Reactプロジェクトの作成
Viteを利用してReactプロジェクトを作成します。
npm create vite@latest xrpl-wallet-example -- --template react-ts
プロジェクトルートに移動し、依存関係をインストールしておきます。
cd xrpl-wallet-example
npm i
2. ライブラリのインストール
React向けのXRPLウォレット接続ライブラリをインストールします。
npm i @xrpl-wallet-standard/react
ウォレットのアダプタをインストールします。
ここではXamanとCrossmarkの2つを利用します。
npm i @xrpl-wallet-adapters/xaman @xrpl-wallet-adapters/crossmark
3. コードの変更(src/main.ts)
registerWalletsに配列型式で追加したいウォレットのアダプタを追加することで任意のウォレットを追加することが可能です。
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import './index.css'
+ import { CrossmarkWallet } from '@xrpl-wallet-adapter/crossmark'
+ import { XamanWallet } from '@xrpl-wallet-adapter/xaman'
+ import { WalletProvider } from '@xrpl-wallet-standard/react'
+ const additionalWallets = [
+ new XamanWallet('8f1280ed-****-****-****-************'),
+ new CrossmarkWallet(),
+ ]
createRoot(document.getElementById('root')!).render(
<StrictMode>
+ <WalletProvider registerWallets={additionalWallets}>
<App />
+ </WalletProvider>
</StrictMode>,
)
4. コードの変更(src/App.tsx)
import './App.css'
import {
ConnectButton,
useAccount,
useConnectionStatus,
useDisconnect,
useSignAndSubmitTransaction,
} from '@xrpl-wallet-standard/react'
function App() {
const account = useAccount()
const status = useConnectionStatus()
const disconnect = useDisconnect()
const signAndSubmitTransaction = useSignAndSubmitTransaction()
const handleSignAndSubmitTransaction = async () => {
const submittedTransaction = await signAndSubmitTransaction(
{
TransactionType: 'AccountSet',
Account: account!.address,
},
'xrpl:1', // XRPL Testnet
)
console.log(submittedTransaction)
}
return (
<>
<h1>Example</h1>
<ConnectButton />
{status === 'connected' && (
<div>
<button type="button" onClick={() => handleSignAndSubmitTransaction()}>
SignAndSubmitTransaction
</button>
<button type="button" onClick={() => disconnect()}>
Disconnect
</button>
</div>
)}
</>
)
}
export default App
5. 開発サーバの起動
次のコマンドを実行することで開発サーバが起動します。
npm run dev
http://localhost:5173/
にアクセスすることでアプリケーションが確認できます。
Connect Walletボタンを押すと、事前にsrc/main.tsx
ファイルで設定していたXamanとCrossmarkのウォレットが表示されます。
クリックするとウォレット接続処理が行われます。
接続が成功すると、SignAndSubmitTransactionボタンとDisconnectボタンが表示されます。
SignAndSubmitTransactionボタンを押下することでテストネットでのトランザクション送信を行うことができ、Disconnectボタンを押下することでウォレット接続を切断することができます。
Discussion