Cardano Projected NFT
Different blockchains may have different block times & finality, so trying to guarantee the state of blockchain A from blockchain B often requires timelock systems like projected data.
This primitive implements the Projected NFT system and, given Cardano NFTs are treated the same as any other asset in a UTXO, is seamlessly extended to be a general projected asset system (it is not limited to NFTs).
If your use-case does not require a guarantee the data is up-to-date to the second, consider using the delayed state primitive instead.
Projected NFT
Example
extensions:
- name: "projected-nft"
scheduledPrefix: cpn
type: cardano-projected-nft
startSlot: 22505578
stopSlot: 32815924
network: CardanoNetworkConfigEntryName
Meaning
startSlot
is required and means that only events after that slot (exclusive) will be considered. This should be a slot that happened before the first transaction involving the assets.stopSlot
is optional, and it stops the indexing at that point.
Paima Concise format
The scheduled input for each event is of the following form.
cardanoTransfer = cpn|ownerAddress|previousTxHash|previousOutputIndex|currentTxHash|currentOutputIndex|policyId|assetName|status
Where status
is one of:
Lock
Unlocking
Claim
Invalid
Utility functions
You can get all the projected NFTs for an address with the utility function below
export interface ICdeCardanoGetProjectedNftResult {
amount: string;
asset_name: string;
current_tx_hash: string;
current_tx_output_index: number | null;
for_how_long: string | null;
owner_address: string;
plutus_datum: string;
policy_id: string;
previous_tx_hash: string | null;
previous_tx_output_index: number | null;
status: 'Lock' | 'Unlocking' | 'Claim' | 'Invalid';
}
export declare function getCardanoAddressProjectedNfts(
readonlyDBConn: Pool,
address: string
): Promise<ICdeCardanoGetProjectedNftResult[]>;