ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
Pinata V3 API グループ機能の実装ガイド

Pinata V3 API グループ機能の実装ガイド

Pinata の Files API v3 でグループ機能を使用する際のはまりポイントと解決策をまとめます。 背景 Pinata でアップロードしたファイルをグループで管理し、特定のグループに属するファイルのみを取得したいケースがあります。例えば、NFT登録フォームで使用する入力画像を「input」グループに格納し、そのグループからのみ画像を選択できるようにする場合などです。 はまりポイント 1. レガシーAPI と V3 API のファイル管理は分離されている 問題 : レガシーAPI(pinFileToIPFS)でアップロードしたファイルは、V3 API(/v3/files)では取得できません。逆も同様です。 レガシーAPI (pinList) → レガシーでアップロードしたファイルのみ表示 V3 API (/v3/files) → V3でアップロードしたファイルのみ表示 解決策 : どちらかのAPIに統一する。V3 APIに移行する場合は、新規アップロードからV3を使用し、既存ファイルは手動でグループに追加するか、マイグレーションを検討。 2. V3 API のエンドポイントには {network} パラメータが必要 問題 : V3 API のエンドポイントは {network} パラメータ(public または private)が必須。 ❌ GET /v3/files?group={group_id} ✅ GET /v3/files/public?group={group_id} 解決策 : 通常のIPFSファイルには public を使用。 3. グループフィルタのパラメータ名が異なる 問題 : アップロード時とリスト取得時でパラメータ名が異なる。 操作 パラメータ名 アップロード group_id リスト取得 group 4. JWT の種類による認証の違い 問題 : Scoped Key で生成した JWT は V3 API で動作しない場合がある。 ...

デジタル文化財管理システム(試行版)のNFT対応

デジタル文化財管理システム(試行版)のNFT対応

お知らせ: 2025-06-14 開発の経過は以下にまとめています。 https://zenn.dev/nakamura196/books/41693d2d017082 概要 以下の記事をはじめとして、ブロックチェーンを用いたデジタル文化財管理システムの試作をしています。 今回、アップロードしたデータがNFTとして認識されるように改修しました。 勉強過程のため、不完全な点があるかと思いますが、参考になりましたら幸いです。 使い方ページ ファイルのアップロード方法はこれまでと同様です。アップロード後に表示される一覧ページにおいて、詳細ページへのリンクを追加しました。 リンクをクリックすると、以下のような詳細画面に遷移します。 実装方法 ※ この章は、AIが執筆しました。 1. コントラクトのNFT対応 既存のデジタル文化財管理コントラクトを、ERC721規格に準拠したNFTコントラクトに改修しました。 主な変更点: 1. OpenZeppelinライブラリの追加 import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721URIStorageUpgradeable.sol"; 2. コントラクトの継承構造を変更 contract DigitalHeritage is Initializable, OwnableUpgradeable, UUPSUpgradeable, ERC721Upgradeable, ERC721URIStorageUpgradeable { // ... } 3. 初期化関数の更新 function initialize() public initializer { __Ownable_init(msg.sender); __UUPSUpgradeable_init(); __ERC721_init("Digital Heritage", "DH"); __ERC721URIStorage_init(); } 4. 文化財登録時のNFTミント機能 function registerHeritage( string memory _name, string memory _description, string memory _imageUrl, string memory _tokenURI ) public { uint256 id = heritages.length; // 文化財データを保存 heritages.push(Heritage({ id: id, name: _name, description: _description, imageUrl: _imageUrl, owner: msg.sender, timestamp: block.timestamp, isDeleted: false })); // NFTとしてミント _safeMint(msg.sender, id); _setTokenURI(id, _tokenURI); emit HeritageRegistered(id, msg.sender, _name); } 2. メタデータ管理システムの実装 NFTの標準的なメタデータ形式に対応するため、サーバーサイドでのメタデータ生成・アップロード機能を実装しました。 ...

OpenSeaに画像を登録してみる

OpenSeaに画像を登録してみる

概要 OpenSeaに画像を登録してみたので、その備忘録です。 作成したアイテムのページは以下です。 https://opensea.io/assets/ethereum/0x495f947276749ce646f68ac8c248420045cb7b5e/10640296615676167047199551942164304992363478966543389627838835760480269631489 OpenSeaへのアップロード OpenSeaへの画像のアップロードは簡単に行うことができました。 一方、それまでのMetaMaskやOpenSeaのアカウント作成などに少し時間がかかりました。この手順についてはたくさんの記事がありましたので、そちらを参考にしてください。 bitFlyerからMetaMaskへの送金 bitFlyerで保有して0.005ETHをMetaMaskへ送金しました。この送金手数料に0.005ETH($7.72, 990.48円)かかりました。(高い…笑) メタデータの凍結 編集画面の「凍結」メニューから、メタデータの凍結を試みました。この凍結にも以下のガス代がかかりました。 0.00185631883313057 Ether ($2.87) 凍結が完了したところ、以下のように、Metadataが「Frozen」と表示されます。 そのリンクをクリックしてみると、以下のjsonファイルがダウンロードされます。 { "image_url": "ipfs://bafybeic27xyqz2zk4bgqlyc7tpmvcl6itfmvkyw2jdnv2b757t3z7ifuby/image", "name": "kunshujo", "description": "『捃拾帖』九五(東京大学総合図書館所蔵)を改変", "external_url": "https://uv-v4.netlify.app/#?manifest=https://ipfs.io/ipfs/QmWMWHAwvPLinD8aDZf9HXfy14u3SNdZRTzbqgMQJ95Q3b" } さらにimage_urlの値から、URLにアクセス、またはIPFSのデスクトップアプリでbafybeic27xyqz2zk4bgqlyc7tpmvcl6itfmvkyw2jdnv2b757t3z7ifubyをBrowseすると、画像を閲覧することができました。 これらのメタデータ(json)および画像がIPFSで管理されていることが確認できます。 まとめ OpenSeaへの画像アップロードと、メタデータや画像の凍結について経験することができました。 デジタルアーカイブにおけるコンテンツ管理への応用に向けて、引き続き色々と試してみたいと思います。