default-nft-contract v0.0.2
default-nft-contract
サマリ
本ライブラリは現在開発中であり、テスト未済です。 利用する場合は自己責任でお願いします。
標準的なNFTの機能を備えたコントラクトです。 このプロジェクトで提供するコントラクトを利用することで、よくある機能の実装・テストに時間をかけなくても良くなり、独自ギミック等に注力できます。
インストール方法
npm i default-nft-contract
種類
- NFT : ERC721ベースのNFT
- NonFungibleSBT : ERC721ベースのSBT
- FungibleSBT : ERC1155ベースのSBT
NFT(BasicNFTByMarkleForMultiWallets)
使い方
以下のように継承してコンストラクタに、コレクション名
、コレクション略称
、寄付率
を指定するだけで利用できます。
寄付率は0にしても利用可能です。
もし本プロジェクトの開発者に売り上げの一部を寄付してくださる利用者の方がいれば1以上の数字を設定してください。
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0 <0.9.0;
import "./BasicNFTByMarkleForMultiWallets.sol";
contract SampleBasicNFTByMarkleForMultiWallets is
BasicNFTByMarkleForMultiWallets
{
// If you are willing to donate, please set the third argument to a number between 1 (0.01%) and 10000 (100%),
// and the percentage you set will be donated to the library developer when you withdraw.
constructor() BasicNFTByMarkleForMultiWallets("SampleNFT", "SNFT", 1000) {}
}
機能
主な機能は以下の通りです。
セール
ERC721MultiSaleを利用した複数回のセールを実装しています。 ALはマークルツリーを採用しています。 同一人物の複数ウォレットについて、ALと購入数を一元管理できます。
どのウォレットが同一人物のものであるかの確認は本プロジェクトのスコープ外です。 別途、ご確認の上ご利用ください。
エアドロップ
管理者から複数のウォレット宛てに一括でミントできます。
交換
NFTをバーンし、新しいNFTを入手する機能です。(NinjaDAO界隈での所謂バー忍)
OpenSeaのクリエイターフィーを受け取るための実装
OpenSeaのクリエイターフィーを受け取るための実装を入れてあります。 ERC2981の実装も入っているため、2023/1月から適用されるルールにも対応しています。
approveの抑制
ContractAllowListを用いて、信頼できるコントラクトのみapprove可能としています。
ロック
ホルダーの意思でNFTのtransferを抑制できるようにしています。 機能はCNP Rebornのリボロックと同様です。
ロックには以下の二種類があります。
- トークンロック(Token lock):
1つ1つロック・アンロックを行う方法です。 - ウォレットロック(Wallet lock):
ウォレット指定でロック・アンロックを行う方法です。 ウォレットロック中のウォレットに新たにトークンを入れると自動的にロックされます。 多数のトークンをトークンロックするよりもウォレットロックの方がガス代が安くなります。
トークンロックの方がウォレットロックよりも優先されます。 例えばウォレットロック中でもトークンアンロックすれば、一部のトークンをアンロックできます。
ロック状態のトークンをアンロックした場合、アンロック操作してから3時間はロック状態が継続されます。 これはアンロックとトランスファーを行わせるスキャムサイトが登場してもすぐにトランスファーできないことでホルダーを守るための仕組みです。
ロック中はトークンURLの拡張子前に_lock
が付きます。
これにより、ロック中のみ画像を特別なものに差し替えることができます。
利用しない場合はoverrideして_lock
が付かないようにしてください。
オフチェーンメタデータ・フルオンチェーン切り替え対応
デフォルト実装ではオフチェーンにメタデータが存在する前提の実装ですが、外部コントラクトからtokenURIを受け取る用切り替えられるようにしてあります。
NonFungibleSBT(BasicNonFungibleSBT)
ERC721ベースの代替不能なSBTです。 トークン毎に状態を持たせたいケースで利用します。
使い方
以下のように継承してコンストラクタに、コレクション名
、コレクション略称
、寄付率
を指定するだけで利用できます。
寄付率は0にしても利用可能です。
もし本プロジェクトの開発者に売り上げの一部を寄付してくださる利用者の方がいれば1以上の数字を設定してください。
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0 <0.9.0;
import "./BasicNonFungibleSBT.sol";
contract SampleBasicNonFungibleSBT is
BasicNonFungibleSBT
{
// If you are willing to donate, please set the third argument to a number between 1 (0.01%) and 10000 (100%),
// and the percentage you set will be donated to the library developer when you withdraw.
constructor() BasicNonFungibleSBT("SampleSBT", "SSBT", 1000) {}
}
機能
主な機能は以下の通りです。
セール
ERC721MultiSaleを利用した複数回のセールを実装しています。 ALはマークルツリーを採用しています。 同一人物の複数ウォレットについて、ALと購入数を一元管理できます。
どのウォレットが同一人物のものであるかの確認は本プロジェクトのスコープ外です。 別途、ご確認の上ご利用ください。
エアドロップ
管理者から複数のウォレット宛てに一括でミントできます。
burn
NFT保有者に限り、自身のNFTをburnできます。
approve禁止
SBTであるため、いかなるコントラクトでもapproveできないようにしてあります。
transfer禁止
SBTであるため、以下のケースをのぞいてtransferは禁止してあります。
- mint(0アドレスからのtransferは許可)
- burn(0アドレスへのtransferは許可)
オフチェーンメタデータ・フルオンチェーン切り替え対応
デフォルト実装ではオフチェーンにメタデータが存在する前提の実装ですが、外部コントラクトからtokenURIを受け取る用切り替えられるようにしてあります。
FungibleSBT(BasicFungibleSBT)
ERC1155ベースの代替可能なSBTです。 複数種類のSBTをガス代を節約しつつ作りたいときに利用します。 代替可能であるため、同一トークンIDのSBTは全く同じものとして扱われます。
使い方
以下のように継承するだけで利用できます。
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0 <0.9.0;
import "./BasicFungibleSBT.sol";
contract SampleBasicFungibleSBT is BasicFungibleSBT {}
機能
主な機能は以下の通りです。
エアドロップ
管理者から複数のウォレット宛てに一括でミントできます。
burn
NFT保有者に限り、自身のNFTをburnできます。
approve禁止
SBTであるため、いかなるコントラクトでもapproveできないようにしてあります。
transfer禁止
SBTであるため、以下のケースをのぞいてtransferは禁止してあります。
- mint(0アドレスからのtransferは許可)
- burn(0アドレスへのtransferは許可)
オフチェーンメタデータ・フルオンチェーン切り替え対応
デフォルト実装ではオフチェーンにメタデータが存在する前提の実装ですが、外部コントラクトからtokenURIを受け取る用切り替えられるようにしてあります。