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[]>;