Reactを使ってトランザクションをXummで署名してみよう!
Xummとは
Ethereumで開発を行う際はメタマスクを使うのと同じように、XRP LedgerではXummというウォレットがデファクトスタンダードとなっています。
Xummはモバイル向けのウォレットであり、iOSやAndroidで利用することができます。
本記事ではReactからXummへアクセスし、トランザクションへ署名する方法について説明します。
準備
テストネットアカウントの作成、ネットワークの切り替え、API Keyの取得については以下のページを参照してください
Xumm API Key / API Secretの取扱いについて
Xumm Developer Consoleで取得できるAPI KeyとAPI Secretは、XummのAPIを利用する際に使用します。
フロントエンドではXumm Developer ConsoleのAPI Keyのみを利用し、API Secretは使用しません。
コード
今回はReactを利用しXummでトランザクションへ署名するアプリケーションを作成します。
Reactのインストール
- npm
npx create-react-app sample-app
cd sample-app
- yarn
yarn create react-app sample-app
cd sample-app
Xumm SDKのインストール
Xummと接続するためのライブラリとしてXumm Universal SDKを利用します。
- npm
npm install xumm
- yarn
yarn add xumm
コード例
import { useState } from "react";
const { Xumm } = require("xumm");
const xumm = new Xumm("api-key");
const App = () => {
const [account, setAccount] = useState(undefined);
xumm.user.account.then((account) => setAccount(account));
const connect = async () => {
// Xummでサインイン
await xumm.authorize();
};
const disconnect = async () => {
// Xummからサインアウト
await xumm.logout();
// アカウント情報を削除
setAccount(undefined);
};
const createTransaction = async () => {
const payload = await xumm.payload?.create({
TransactionType: "Payment",
Destination: "rQQQrUdN1cLdNmxH4dHfKgmX5P4kf3ZrM",
Amount: "100", // 100 drops (=0.000100XRP)
});
if(!payload?.pushed){
// Xummへプッシュ通知が届かない場合
// payload?.refs.qr_png を利用してQRコードを表示することで署名画面を表示することも可能
}
};
return (
<div>
{account && (
<>
<div>{account}</div>
<button onClick={disconnect}>Disonnect</button>
<button onClick={createTransaction}>Payment</button>
</>
)}
{!account && <button onClick={connect}>Connect</button>}
</div>
);
};
export default App;
Connectボタンを押すとXummのサインイン画面が表示されます。
Xummでサインイン画面のQRコードを読み込みサインインすると、Webアプリにアカウントアドレスが表示されます!
その後Paymentボタンを押すと、XummへPaymentトランザクションのプッシュ通知が届きますので、それを開くと署名画面が表示されます。
xumm.payload?.create
の返り値は以下のようなオブジェクトです。
Xummの設定によってはプッシュ通知が届かない場合があります。
その場合はpushed
がfalse
であるため、refs.qr_png
などを利用してQRコードを表示することで署名を行うことができます。
{
uuid: string;
next: {
always: string;
no_push_msg_received?: string;
};
refs: {
qr_png: string;
qr_matrix: string;
qr_uri_quality_opts: XummQrQuality[];
websocket_status: string;
};
pushed: boolean;
}
もっと試してみましょう
XRP Ledgerは支払いのためのPaymentトランザクション以外にも様々なトランザクションが存在します。
たとえば次のようなトランザクションがあります。
-
AccountSet
: アカウントの状態などのプロパティを変更する -
NFTokenMint
: NFTを発行する -
OfferCreate
: DEXへの注文を作成する -
SignerListSet
: マルチシグを設定する
これらを参考に、先ほどのコードを修正し、他のトランザクションを試してみましょう!
まとめ
React+Xummを利用したトランザクションへの署名方法について解説しました。
今回のコードを少し修正するだけでXumm内アプリのxAppとして利用することも可能です。
XRP LedgerではSolidityなどのスマートコントラクトコードなしに、フロントエンドのコードだけでXRP Ledgerで利用可能なトランザクション全てでウォレットを介した署名が可能になります。
興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
Discussion