Webアプリケーションを完成させよう!
さて、ようやくGIFを保存できるようになりました。
これからsendGif関数を変更していきます。
addGif関数を呼び出し、getGifList関数を呼び出すことで、Webアプリケーションをリフレッシュして最新のGIF画像を表示しましょう。
const sendGif = async () => {
if (inputValue.length === 0) {
console.log("No gif link given!");
return;
}
setInputValue("");
console.log("Gif link:", inputValue);
try {
const provider = getProvider();
const program = new Program(idl, programID, provider);
await program.rpc.addGif(inputValue, {
accounts: {
baseAccount: baseAccount.publicKey,
user: provider.wallet.publicKey,
},
});
console.log("GIF successfully sent to program", inputValue);
await getGifList();
} catch (error) {
console.log("Error sending GIF:", error);
}
};
GIFリンクを送信し、Phantom Wallet経由でトランザクションを承認すると、Webアプリケーションに送信したGIFが表示されるようになります。
🙈 アカウントが持続しない問題を解決する
ページを更新するたびにアカウントがリセットされる問題を解決していきましょう。
問題は次の行で起こっています。
let baseAccount = Keypair.generate();
ここでは、プログラムが通信する際に、毎回新しいアカウントを生成しています。
これを修正するためには、すべてのユーザーが共有する1つのキーペアを用意してあげる必要があります。
そのために、srcディレクトリの下にcreateKeyPair.jsという名前のファイルを作成し、以下のコードを貼り付けてください。
const fs = require("fs");
const anchor = require("@coral-xyz/anchor");
const account = anchor.web3.Keypair.generate();
fs.writeFileSync("./keypair.json", JSON.stringify(account));
このスクリプトは、キーペアを直接ファイルシステムに書き込んでいます。
このように処理すれば、Webアプリケーションにアクセスする人はいつでも同じキーペアを読み込むことができます。
createKeyPair.jsの準備ができたら以下のコマンドをそれぞれ実行してください。
※ srcディレクトリ内に移動したことを確認してからnode createKeyPair.jsコマンドを実行してください。
cd src
node createKeyPair.js
無事に実行されると、src内にkeypair.jsonという名前の共有キーペアができあがります。
次に、App.jsを少し変更します。
App.jsの上部で以下のようにkeypair.jsonをimport