Closed53

nft登録するまで

ERC-721とは何かについて深ぼる

ERC-721とはNFTのユニーク性を保つための規格。
同じスマートコントラクト内でNFTのユニーク性を保つ為の規格(決まり事)。
=> 「同じスマートコントラクト内で」は、「同じアドレス内で」と同義。

つまり、同じアドレス内でNFTノユニーク性を保つための規格。

具体的な話をすると、
NFTはtoken ID(uint256変数)とAddressの情報を持つ。
Addressが同じだとしても、NFT1つ1つにtoken IDがあるから、NFTはユニークなのか。
名前の通りですね。
NFT(非代替性トークン)

参考

https://ethereum.org/en/developers/docs/standards/tokens/erc-721/

uint256とは

256 bitの符号付整数型

ネットワークの選択

https://docs.alchemy.com/alchemy/guides/choosing-a-network

Arbitrumとは
イーサリアムのレイヤー2プロジェクト。ほう。技術が進化しているのね。

https://bokujyuumai-salon.ethereum-japan.net/wiki/13405

レイヤー2とは?

https://bokujyuumai-salon.ethereum-japan.net/wiki/13385
L2コア技術
  • Plasma
  • State Channel
  • Rollup

Rollup とは
L2コア技術の1つ
L1とL2をハイブリッドに使用したもの

https://bokujyuumai-salon.ethereum-japan.net/wiki/13376

Optimistic Rollup とは
Rollupの中のOptimistic Rollup 。

https://bokujyuumai-salon.ethereum-japan.net/wiki/13383

NFT metadata is the core of an NFT. It is a JSON document that often contains the following:
NFT’s name
Description of the NFT
Link to the hosted image
Traits

NFTのメタデータはjsonファイルなんだ。

ちなみにメタデータってなんだ?

メタデータとは、本体であるデータに関する付帯情報が記載されたデータです。「データのためのデータ」と説明されることもあります。

人間でいう、性別、身長、体重、年齢とか。
データであれば、作成日、作成者、更新日、サイズなど

引用

https://udemy.benesse.co.jp/marketing/basic/metadata.html

なぜIPFSを使うのか?

  • ブロックチェーンのデータは永久
  • リンクはリンク切れがある。

それを避けるためっぽい

スマートコントラクトとは

「スマートコントラクト」とは、ブロックチェーンシステム上の概念であり、あらかじめ設定されたルールに従って、ブロックチェーン上のトランザクション(取引)、もしくはブロックチェーン外から取り込まれた情報をトリガーにして実行されるプログラムを指す。

https://www.sbbit.jp/article/fj/40394#head1

A smart contract is a program that runs on the Ethereum blockchain. Its code and data reside at a specific address on the Ethereum blockchain.

https://betterprogramming.pub/how-to-deploy-nft-smart-contracts-9271ce5e91c0
  • チェーン状で走る処理。
  • イーサリアムのアドレスごとに存在しているイメージ

そしてスマートコントラクトが、

  • NFTを譲渡できるか?の判定処理
  • 所有者の判定処理
    などを行うっぽい。

もうちょい具体的に

あるパラメータを指定して呼び出すと、特定の条件が満たされた場合に何らかのアクションや計算を実行するスクリプト。

具体例

単純なベンダースマートコントラクトは、呼び出し側が特定の受信者にETHを送信した場合、デジタル資産の所有権を作成し、割り当てることができます。

参考

https://ethereum.org/ja/developers/docs/intro-to-ethereum/#what-are-smart-contracts

transactionとは何か。

アカウントからの暗号化された署名付きの指示です

ところでアカウントってなに?
ether(ETH)が保存されている場所。
アカウントとアカウントの残高はEVMの中に格納されている。つまりEVMのステートの一部

https://ethereum.org/ja/developers/docs/intro-to-ethereum/#accounts
https://ethereum.org/ja/developers/docs/accounts/

アカウントのタイプ

  • Externally-owned ・・・private-keyを持つ誰もがコントロールできる
  • Contract ・・・ネットワークに展開されたスマートコントラクトで、コードによって制御されます。

どちらのアカウントタイプでもできること

  • ETHとトークンの受信、保有、送信
  • デプロイされているスマートコントラクトとの連動

参考

https://ethereum.org/ja/developers/docs/accounts/#types-of-account

参考

https://ethereum.org/ja/developers/docs/transactions/

ブロックチェーンとは

  • publicなデータベース。
  • 複数(多く)のコンピューターからアクセス可能。

「ブロック」とは何を意味しているのか

データや状態(ステート)が "ブロック "と呼ばれる連続したグループに保存されているということ。

「チェーン」とは何を意味しているのか

"チェーン "とは、各ブロックが暗号的にその親を参照することを指す。
=> つまり、ブロックは連鎖していく
=> とあるブロックのデータを変更するために、それに連なる次のブロックのデータも変更しないといけない
=> ネットワーク全体のコンセンサスが必要となる

なんとなくわかる気もするが、まだ難しい。

MetaMaskでRopsten Test Networkが選択肢に出てこない場合

Ropsten Test Networkしたいのに出てこない場合

アカウントアイコンをクリック => settingを選択

Advancedを選択

Show test networksをONにする

Balanceのチェック

https://ethereum.org/ja/developers/tutorials/how-to-write-and-deploy-an-nft/#check-balance

Alchemyのcomposerツールに、アカウントのアドレスを入力すると口座残高が返ってきます。

https://composer.alchemyapi.io/

weiという単位で返ってくる。
1 eth = 1018 wei

イーサリアム用の単位変換ツールを使うと、単位変換できます。

https://converter.murkin.me/

下の画面では
0x5d423c655aa0000 wei = 0.42 eth

solcを使って、solidityファイルをコンパイルしようと思うと、openzeppelinからのimport分がParserErrorになるな~

ParserError: Source "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol" not found: File not found\n'

pathが間違っていることが原因でした。
エラー出ている箇所のパスを要確認。

pinataに画像URLのデータをアップロードしたい。
imageURL => Blob => File => FormData => アップロードという流れかな?

https://docs.pinata.cloud/api-pinning/pin-file#javascript-example-with-axios

FormDataってまず何者だ?

https://javascript.keicode.com/newjs/how-to-use-formdata.php#1

これか!!

https://freelance321.com/javascript/ajax-get-binary/#outline__1

ハードフォークってなに?

https://bitflyer.com/ja-jp/s/glossary/hard-fork

export type chain =
| 'mainnet'
| 'goerli'
| 'kovan'
| 'rinkeby'
| 'ropsten';

export type hardfork =
| 'chainstart'
| 'homestead'
| 'dao'
| 'tangerineWhistle'
| 'spuriousDragon'
| 'byzantium'
| 'constantinople'
| 'petersburg'
| 'istanbul';

  • スマコンのデプロイ
  • abiとアドレスを保管
  • スマートコントラクト内にある関数を使用するためには、保管してあるabiとトランザクションを送るアドレスの情報を使う。
  • mintも保管されたabiとスマコンのアドレスを使って、関数を呼ぶ(transaction)

前回のトランザクションがpendingであった場合の対処法

新しいトランザクションとして送る

  • nonceを更新して送る

リプレイスする

  • nonceは同じ
  • gasの値段を10%あげて送り直す(基本計算量は増えているので、10%以上になる)

https://ethereum.stackexchange.com/a/44875

solidityの型まとめ

//storage : ブロックチェーン内に保存される値。関数外ではデフォルトでstorage型になる。ガス代は高くなる。
//memory : コントラクト実行時のみ保持される変数。ブロックチェーンには保存されないのでガス代が安くなる。
//virtual: この関数は後でオーバーライドしても良い
//override: この関数はすでにオーバーライドしている
//address : 20バイトの値。Ethereumアドレスの大きさ。
//address payable : addressに加えて、追加のメンバ transfer と send が使える。

Solidityのライブラリの使い方

@openzeppelin/contracts/utils/Counters.sol内にある、library Counters {...}
Countersライブラリを使う場合

using Counters for Counters.Counter;

forの後には型が入るのかな

参考

https://qiita.com/ryu-yama/items/0d248605c7447638df64

nodejsで画像のURLを受け取り、pinataへアップロードする方法
typescriptだと、型はanyにしないといけない
PinataCloud/Pinata-SDK#28 (comment)

ミント自体は完了したのでクローズ!

このスクラップは2ヶ月前にクローズされました
ログインするとコメントできます