Open8

create NFT

こいつを使ってmintしてみる
-> mintするくらいならAPI使わなくてもできそうなので、フルスクラッチ開発でデプロイする

immutable X

basic

https://www.immutable.com/
https://blog.bybit.com/ja-JP/post/dapps-imx-l2-immutable-211111--blta58c6955f33ea46b/

develop

https://docs.x.immutable.com/docs

reference

OpenSeaとの連携

予定はあるが、まだ未実施らしい

https://gaiax-blockchain.com/immutablex

OpenSeaの対応は2021年11月現在まだ実現していませんが、Immutable Xの最新のウェブサイトにOpenSeaのロゴが掲載されていることから、今後OpenSeaがImmutable Xに対応する可能性はありそうです。

https://coinpost.jp/?p=233293

mint方法

目的

ユーザのmint前にこちらで画像を検証したい
以下を考慮して、こちらでmintする

ユーザがmint

  • pros
    • ユーザが気軽にmintしやすい
  • cons
    • イタズラで全く異なる画像をmintされる可能性がある
      • 手数料がかかるのでほぼないと思うが、余地はなくしておきたい

こちらでmint

  • pros
    • イタズラを防げる
  • cons
    • ユーザが気軽にmintできない
    • 先にmint時のgas feeを受け取るフローにすると、ユーザからすると持ち逃げのリスクがある

burnについて

https://ethereum.stackexchange.com/questions/94538/is-it-possible-to-unmint-an-nft-as-in-is-the-reversal-of-the-tokenisation-proc
  • NFTのsmart contractにoptionalでburnのfunctionを実装することはできるが、make senseしない
  • 運営側が勝手にNFTをburnできる余地があるのは良くない

雑多に

  • サーバ側でAPIキー的なの使って認証
  • Ownableの活用
  • 認証コードを画像に埋め込む?
  • gas feeが気になるなら、Layer2などを使う?
    • やっぱりETHが王道

理想フロー

  • [ユーザ]こちらのサイト上でmintする
  • [smart contract] mintNFT関数内で運営側に承認リクエストを飛ばす
  • [運営] リクエストの内容を確認して、承認or否認
  • [smart contract]
    • if 承認
      • mint処理を続行
    • if 否認
      • mint処理を中断
    • ユーザに結果を通知

rinkeby使ってみる

contractのdeployでつまる

上記チュートリアルのropstenをrinkebyに書き換えると、以下のエラー発生

% npx hardhat run scripts/deploy.js --network rinkeby
ProviderError: Must be authenticated!
    at HttpProvider.request (/PATH/node_modules/hardhat/src/internal/core/providers/http.ts:49:19)
    at LocalAccountsProvider.request (/PATH/node_modules/hardhat/src/internal/core/providers/accounts.ts:187:34)
    at GanacheGasMultiplierProvider._isGanache (/PATH/node_modules/hardhat/src/internal/core/providers/gas-providers.ts:315:30)
    at GanacheGasMultiplierProvider.request (/PATH/node_modules/hardhat/src/internal/core/providers/gas-providers.ts:304:23)
    at EthersProviderWrapper.send (/PATH/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)
    at getSigners (/PATH/node_modules/@nomiclabs/hardhat-ethers/src/internal/helpers.ts:23:20)
    at main (/PATH/scripts/deploy.js:2:22)

このページに基づき、hardhat.config.jsgasなどを設定すると、以下のエラーが発生

% npx hardhat run scripts/deploy.js --network rinkeby
Deploying contracts with the account: 0xXXXXXXXXXXXX
Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.5.1)
    at Logger.makeError (PATH/node_modules/@ethersproject/logger/src.ts/index.ts:225:28)
    at Logger.throwError (PATH/node_modules/@ethersproject/logger/src.ts/index.ts:237:20)
    at EthersProviderWrapper.<anonymous> (PATH/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:403:23)
    at step (PATH/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
    at Object.throw (PATH/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
    at rejected (PATH/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  reason: 'could not detect network',
  code: 'NETWORK_ERROR',
  event: 'noNetwork'
}

これと同じ技術スタックのはずなのに動かない。。
質問サイトを使ってみる、rinkebyネット側の問題かも?

https://stermi.medium.com/how-to-deploy-your-first-smart-contract-on-ethereum-with-solidity-and-hardhat-22f21d31096e

解決

output

contract

https://rinkeby.etherscan.io/address/0x0d7d4640891558f7de72e896ce648dbdcd2b1a46

token

https://rinkeby.etherscan.io/token/0x0d7d4640891558f7de72e896ce648dbdcd2b1a46?a=1

opensea

https://testnets.opensea.io/collection/heartrateart

ブラウザ上でmintする

reference

https://dev.to/rounakbanik/building-a-web3-frontend-with-react-340c

log

output

  • 27591174859c9d5f7129d665f7735f906f481a25
  • このコミット時点のフロントソースコートが一番プレーンな状態
  • 他にDApps作る時に使い回せるかも

contract

https://rinkeby.etherscan.io/address/0xB4213001e7F4614A7339Cd7FA7Be36e8344E08dC

opensea

https://testnets.opensea.io/collection/heartrateart-v2
作成者以外のコメントは許可されていません