title: CoreとToken Metadataの違い metaTitle: CoreとToken Metadataの違い | Core
このページでは、まずTMと比較したCoreの一般的な改善点を探り、後でTM関数の同等のものをCoreでどのように使用できるかについてより技術的な情報を提供します。
Core Assetを作成するには、単一の作成インストラクションのみが必要です。Token Metadataで必要だったように、後でミントしてメタデータを付加する必要はありません。これにより、複雑さとトランザクションサイズが削減されます。
{% totem %} {% totem-accordion title="作成" %} 次のスニペットは、アセットデータを既にアップロードしていることを前提としています。
import { generateSigner, percentAmount } from '@metaplex-foundation/umi'
import { create } from '@metaplex-foundation/mpl-core'
const assetAddress = generateSigner(umi)
const result = createV1(umi, {
asset: assetAddress,
name: 'My Nft',
uri: 'https://example.com/my-nft',
}).sendAndConfirm(umi)
{% /totem-accordion %} {% /totem %}
Coreコレクションには複数の新機能が含まれています。コレクションは独自のアカウントタイプであり、通常のアセットとは区別されます。これは、NFTとコレクションの両方を表すために同じアカウントと状態を使用するToken Metadataのアプローチからの歓迎すべき追加であり、両者を区別するのが困難でした。
Coreでは、コレクションは追加機能を可能にするファーストクラスアセットです。例えば、Coreはコレクションにロイヤリティプラグインを追加することで、コレクションレベルのロイヤリティ調整を提供します。開発者とクリエイターは、各アセットを個別に更新することを強制されるのではなく、コレクション内のすべてのアセットを一度に更新できるようになりました。しかし、コレクション内の一部のアセットが異なるロイヤリティ設定を持つべき場合はどうでしょうか?問題ありません - 同じプラグインをアセットに追加するだけで、コレクションレベルのロイヤリティプラグインが上書きされます。
TMでは不可能だったコレクション機能の例として、コレクションレベルロイヤリティがあります - ロイヤリティやクリエイターを変更する際にもう各アセットを更新する必要はなく、コレクションで定義します。これは、コレクションにロイヤリティプラグインを追加することで実現できます。一部のアセットが異なるロイヤリティ設定を持つべきですか?同じプラグインをアセットに追加するだけで、コレクションレベルのロイヤリティプラグインが上書きされます。
フリーズもコレクションレベルで可能です。
コレクションの作成や更新など、コレクションの取り扱いに関する詳細情報は、コレクション管理ページで見つけることができます。
アセットのライフサイクル中に、以下のような複数のイベントがトリガーされる可能性があります:
TMでは、これらのライフサイクルイベントは所有者または委任者によって実行されます。すべてのTMアセット(nfts/pNfts)には、すべてのライフサイクルイベントに対する関数が含まれています。Coreでは、これらのイベントはアセットまたはコレクション全体レベルでプラグインによって処理されます。
アセットレベルまたはコレクションレベルの両方に付加されたプラグインは、これらのライフサイクルイベント中に検証プロセスを実行し、イベントの実行を承認、拒否、または強制承認します。
TMでアセットをフリーズするには、通常まずフリーズ権限を別のウォレットに委任し、それがNFTをフリーズします。Coreでは、2つのプラグインのいずれかを使用する必要があります:Freeze DelegateまたはPermanent Freeze Delegate。後者はアセット作成時にのみ追加できますが、Freeze Delegateプラグインは、現在の所有者がトランザクションに署名すれば、いつでも追加できます。
委任もCoreでより簡単になります。Delegete Recordアカウントを廃止し、委任権限を直接プラグイン自体に保存し、アセット作成時またはaddPluginV1関数を介してアセットにプラグインを追加する際に割り当て可能にしています。
所有者がフリーズ権限を別のアカウントに割り当てる場合、アセットにまだフリーズプラグインがない場合は、その権限でプラグインを追加してフリーズする必要があります。
委任権限に割り当てながら、アセットにFreeze Delegateプラグインを追加する簡単な例を以下に示します。
{% totem %} {% totem-accordion title="フリーズプラグインを追加し、権限を割り当ててフリーズ" %}
await addPlugin(umi, {
asset: asset.publicKey,
plugin: createPlugin('FreezeDelegate', { frozen: true }),
initAuthority: pluginAuthority('Address', { address: delegate.publicKey }),
}).sendAndConfirm(umi)
{% /totem-accordion %} {% /totem %}
さらに、Coreではフリーズはコレクションレベルで実行できます。完全なコレクションを単一のトランザクションでフリーズまたは解凍できます。
TMでは、アセットの現在のステータスと、それがフリーズ、ロック、または転送可能な状態にあるかどうかを確認するために、複数のアカウントをチェックする必要があることがよくあります。Coreでは、このステータスはアセットアカウントに保存されますが、コレクションアカウントによっても影響を受ける可能性があります。
物事を簡単にするために、@metaplex-foundation/mpl-coreパッケージに含まれるcanBurn、canTransfer、canUpdateなどのライフサイクルヘルパーを導入しました。これらのヘルパーはboolean値を返し、渡されたアドレスがこれらのライフサイクルイベントを実行する権限を持っているかどうかを知らせます。
const burningAllowed = canBurn(authority, asset, collection)
上記で説明した機能は氷山の一角に過ぎません。追加の興味深いトピックには以下が含まれます: