fip | title | status | type | author | created | updated |
---|---|---|---|---|---|---|
27 |
NFT Signatures |
Final |
Functionality |
Pawel Mastalerz <[email protected]> |
2021-05-05 |
2021-10-21 |
The objective of this FIP is to extend FIO Protocol functionality to enable NFTs to be mapped to a FIO Address. It will allow anyone to see which FIO Address has mapped ("signed") a particular NFT and if it is a FIO Address they trust, they can also trust the NFT.
Example use case:
- Artist publishes the FIO Domain they own, e.g. artist, on their website.
- They register a new FIO Address for every art NFT, e.g. masterpiece1@artist
- They map new NFT (chain, contract address, token ID, media url) to masterpiece1@artist
- Now, irrespective of who owns the NFT at anytime, it's easy to prove if an NFT (based on chain, contract address, token ID or media url) is mapped to a FIO Address on the artist's FIO Domain and by therefore know if it was created by the artist.
Contract | Action | Endpoint | Description |
---|---|---|---|
fio.address | addnft | /add_nft | Maps a specific NFT to a FIO Address. |
fio.address | remnft | /remove_nft | Removes NFT from FIO Address |
fio.address | remallnfts | /remove_all_nfts | Adds FIO Address to NFT burn queue for removal |
fio.address | burnnfts | No endpoint | Burns NFTs in burn queue |
Contract | Action | Endpoint | Description |
---|---|---|---|
fio.address | burnexpired | /burn_expired | Burn expired FIO Addresses and Domains should also burn NFTs. |
fio.address | burnaddress | /burn_fio_address | Burn FIO Addresses should also burn NFTs. |
fio.address | xferaddress | /transfer_fio_address | Transfer FIO Address should also burn NFTs. |
Endpoint | Description |
---|---|
/get_nfts_fio_address | Returns all NFTs for specified FIO Address. |
/get_nfts_contract | Returns all mapped NFTs which have the specified contract address and token id. |
/get_nfts_hash | Returns all mapped NFTs which have the specified hash. |
Extending the FIO Protocol to allow NFT mappings is a natural progression for the protocol as FIO Addresses were always envisioned to replace complicated addresses such as public addresses or NFT contract addresses and NFT token IDs.
Maps a specific NFT to a FIO Address.
New fee: add_nft, bundle-eligible (2 bundled transaction) fee amount will be determined during development and updated here
Group | Parameter | Required | Format | Definition |
---|---|---|---|---|
fio_address | Yes | String | FIO Address to map to. | |
nfts | Yes | Array | List of NFTs to map, max 3 | |
nfts | chain_code | Yes | String | Min chars: 1, Max chars: 10, Characters allowed: ASCII a-z0-9, Case-insensitive |
nfts | contract_address | Yes | String | Min chars: 1, Max chars: 128 |
nfts | token_id | Yes | String | Token ID of NFT. May be left blank if not applicable. Max 64 characters. |
nfts | url | Yes | String | URL of NFT asset, e.g. media url. May be left blank if not applicable. Max 128 characters. |
nfts | hash | Yes | String | SHA-256 hash of NFT asset, e.g. media url. May be left blank if not applicable. Max 64 characters. |
nfts | metadata | Yes | String | Serialized json, max. 128 chars. May be left empty. |
max_fee | Yes | Positive Int | Maximum amount of SUFs the user is willing to pay for fee. Should be preceded by /get_fee for correct value. | |
actor | Yes | 12 character string | Valid actor of signer | |
tpid | Yes | FIO Address | FIO Address of the entity which generates this transaction. TPID rewards will be paid to this address. Set to empty if not known. |
{
"fio_address": "purse@alice",
"nfts": [
{
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001",
"url": "ipfs://ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq",
"hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
"metadata": ""
},
{
"chain_code": "EOS",
"contract_address": "atomicassets",
"token_id": "2199023271139",
"url": "",
"hash": "",
"metadata": "{\"creator_url\":\"https://yahoo.com/\"}"
}
],
"max_fee": 0,
"actor": "aftyershcu22",
"tpid": "rewards@wallet"
}
This standard for metadata structure will likely evelove over time and is intended to store meta information about the NFT. Current standard:
Parameter | Required | Format | Definition |
---|---|---|---|
creator_url | No | String | URL to NFT's creator website. |
- Request is validated per Exception handling.
- add_nft fee is collected or bundled transaction deducted (if FIO Address has available bundled transactions)
- RAM of signer is increased.
- Check for maximum FIO transaction size is applied.
- Store chain_code, contract_address, token_id, url, hash, metadata.
- If chain_code, contract_address, token_id already stored, update url, hash, metadata.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid FIO Address | Format of FIO Address not valid, FIO Address does not exist or is not mapped to a valid FIO Public Key. | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Address invalid, does not exist." |
FIO Domain expired | Domain of supplied FIO Address has expired more than 30 days ago | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Domain expired." |
Invalid chain format | Invalid format of chain_code (see above) | 400 | "chain_code" | Value sent in, e.g. "BTC!@#$%^&()" | "Invalid Chain Code" |
Invalid contract address format | Invalid format of contract_address (see above) | 400 | "contract_address" | Value sent in, e.g. "" | "Invalid Contract Address" |
Invalid token id | Invalid format of token_id (see above) | 400 | "token_id" | Value sent in | "Invalid Token ID" |
Invalid url | Invalid format of url (see above) | 400 | "token_id" | Value sent in | "Invalid URL" |
Invalid hash | Invalid format of hash (see above) | 400 | "hash" | Value sent in | "Invalid hash" |
Invalid metadata | Invalid format of metadata (see above) | 400 | "metadata" | Value sent in | "Invalid metadata" |
Invalid fee value | max_fee format is not valid | 400 | "max_fee" | Value sent in, e.g. "-100" | "Invalid fee value" |
Fee exceeds maximum | Actual fee is greater than supplied max_fee | 400 | "max_fee" | Value sent in, e.g. "1000000000" | "Fee exceeds supplied maximum" |
Insufficient balance | Available (unlocked and unstaked) balance in Staker's account is less than chain fee + amount | 400 | "max_fee" | Value sent in, e.g. "100000000000" | "Insufficient balance" |
Invalid TPID | tpid format is not valid | 400 | "tpid" | Value sent in, e.g. "notvalidfioaddress" | "TPID must be empty or valid FIO address" |
Invalid number of items | More than 3 NFTs in array | 400 | "nfts" | "Min 1, Max 3 NFTs are allowed" | |
Not owner of FIO Address | The signer does not own the FIO Address | 403 | Type: invalid_signature | ||
Signer not actor | Signer not actor | 403 | Type: invalid_signature |
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
fee_collected | Int | Amount of SUFs collected as fee |
{
"status": "OK",
"fee_collected": 2000000000
}
Removes NFT from FIO Address
New fee: remove_nft, bundle-eligible (1 bundled transaction) fee amount will be determined during development and updated here
Group | Parameter | Required | Format | Definition |
---|---|---|---|---|
fio_address | Yes | fio address, see FIO address validation rules. | FIO Address which will have NFT removed. | |
nfts | Yes | List of NFTs to remove, no limit. | ||
nfts | chain_code | Yes | String | Min chars: 1, Max chars: 10, Characters allowed: ASCII a-z0-9, Case-insensitive |
nfts | contract_address | Yes | String | Min chars: 1, Max chars: 128 |
nfts | token_id | Yes | String | Token ID of NFT. May be left blank if not applicable. Max 64 characters. |
max_fee | Yes | max fee SUFs | Maximum amount of SUFs the user is willing to pay for fee. Should be preceded by /get_fee for correct value. | |
actor | Yes | FIO account name | FIO account for the signer, the account owning this payee FIO Address. | |
tpid | Yes | FIO Address of TPID, See FIO Address validation rules | FIO Address of the wallet which generates this transaction. This FIO Address will be paid 10% of the fee. See FIO Protocol#TPIDs for details. Set to empty if not known. |
{
"fio_address": "purse@alice",
"nfts": [
{
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001"
},
{
"chain_code": "EOS",
"contract_address": "atomicassets",
"token_id": "2199023271139"
}],
"max_fee": 0,
"actor": "aftyershcu22",
"tpid": "rewards@wallet"
}
- Request is validated per Exception handling.
- remove_nft fee is collected or bundled transaction deducted (if FIO Address has available bundled transactions).
- Check for maximum FIO transaction size is applied.
- Remove chain_code, contract_address, token_id, url, hash, metadata.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid FIO Address | Format of FIO Address not valid, FIO Address does not exist or is not mapped to a valid FIO Public Key. | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Address invalid, does not exist." |
FIO Domain expired | Domain of supplied FIO Address has expired more than 30 days ago | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Domain expired." |
Invalid fee value | max_fee format is not valid | 400 | "max_fee" | Value sent in, e.g. "-100" | "Invalid fee value" |
Fee exceeds maximum | Actual fee is greater than supplied max_fee | 400 | "max_fee" | Value sent in, e.g. "1000000000" | "Fee exceeds supplied maximum" |
Insufficient balance | Available (unlocked and unstaked) balance in Staker's account is less than chain fee + amount | 400 | "max_fee" | Value sent in, e.g. "100000000000" | "Insufficient balance" |
Invalid TPID | tpid format is not valid | 400 | "tpid" | Value sent in, e.g. "notvalidfioaddress" | "TPID must be empty or valid FIO address" |
Not owner of FIO Address | The signer does not own the FIO Address | 403 | Type: invalid_signature | ||
Signer not actor | Signer not actor | 403 | Type: invalid_signature | ||
Nothing to remove | No NFTs are mapped to provided FIO Address | 400 | "fio_address" | Value sent in, e.g. "purse@alice" | "No NFTs" |
NFT not found | The fio address does not have specific NFT mapped to remove | 400 | "fio_address" | Value sent in, e.g. "purse@alice" | "NFT not found" |
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
fee_collected | Int | Amount of SUFs collected as fee |
{
"status": "OK",
"fee_collected": 2000000000
}
Removes all NFTs from FIO Address by adding to burn queue.
New fee: remove_all_nfts, bundle-eligible (1 bundled transaction) fee amount will be determined during development and updated here
Parameter | Required | Format | Definition |
---|---|---|---|
fio_address | Yes | fio address, see FIO address validation rules. | FIO Address which will have NFT removed. |
max_fee | Yes | max fee SUFs | Maximum amount of SUFs the user is willing to pay for fee. Should be preceded by /get_fee for correct value. |
actor | Yes | FIO account name | FIO account for the signer, the account owning this payee FIO Address. |
tpid | Yes | FIO Address of TPID, See FIO Address validation rules | FIO Address of the wallet which generates this transaction. This FIO Address will be paid 10% of the fee. See FIO Protocol#TPIDs for details. Set to empty if not known. |
{
"fio_address": "purse@alice",
"max_fee": 0,
"actor": "aftyershcu22",
"tpid": "rewards@wallet"
}
- Request is validated per Exception handling.
- remove_all_nfts fee is collected or bundled transaction deducted (if FIO Address has available bundled transactions).
- Check for maximum FIO transaction size is applied.
- Remove all NFTs mapped to FIO Address.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid FIO Address | Format of FIO Address not valid, FIO Address does not exist or is not mapped to a valid FIO Public Key. | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Address invalid, does not exist." |
FIO Domain expired | Domain of supplied FIO Address has expired more than 30 days ago | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Domain expired." |
Invalid fee value | max_fee format is not valid | 400 | "max_fee" | Value sent in, e.g. "-100" | "Invalid fee value" |
Fee exceeds maximum | Actual fee is greater than supplied max_fee | 400 | "max_fee" | Value sent in, e.g. "1000000000" | "Fee exceeds supplied maximum" |
Insufficient balance | Available (unlocked and unstaked) balance in Staker's account is less than chain fee + amount | 400 | "max_fee" | Value sent in, e.g. "100000000000" | "Insufficient balance" |
Invalid TPID | tpid format is not valid | 400 | "tpid" | Value sent in, e.g. "notvalidfioaddress" | "TPID must be empty or valid FIO address" |
Nothing to remove | No NFTs are mapped to provided FIO Address | 400 | "fio_address" | Value sent in, e.g. "purse@alice" | "No NFTs" |
|Not owner of FIO Address|The signer does not own the FIO Address|403|||Type: invalid_signature| |Signer not actor|Signer not actor|403|||Type: invalid_signature|
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
fee_collected | Int | Amount of SUFs collected as fee |
{
"status": "OK",
"fee_collected": 2000000000
}
Processes NFTs in the burn queue.
Parameter | Required | Format | Definition |
---|---|---|---|
actor | Yes | FIO account name | FIO account for the signer, the account authorizing the NFT burn. |
{
"actor": "aftyershcu22"
}
- First FIO Address in NFT burn queue is processed
- Up to 50 NFTs are removed.
- If NFTs are cleared for FIO Address before 50 NFTs are processed, some of the NFTs for the next addresses in the queue are processed
- burnnfts is called until all NFTs have been cleared from the burn queue
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Nothing NFTs to burn | No FIO Addresses in the burn queue to process | 400 | "nfts" | "Nothing to burn" | |
Signer not actor | Signer not actor | 403 | Type: invalid_signature |
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
{
"status": "OK",
}
Burn expired FIO Addresses and Domains should also burn NFTs
Unchanged
- Also burn NFTs mapped to FIO Address being burned.
Unchanged
Burn FIO Addresses should also burn NFTs.
Unchanged
- Also burn NFTs mapped to FIO Address being burned.
Unchanged
Transfer FIO Address should also burn NFTs.
Unchanged
- Also burn NFTs mapped to FIO Address being transferred.
Unchanged
Returns all NFTs for specified FIO Address.
Parameter | Required | Format | Definition |
---|---|---|---|
fio_address | Yes | FIO Address | FIO Address. |
limit | No | Positive Int | Number of records to return. If omitted, all records will be returned. Due to table read timeout, a value of less than 1,000 is recommended. |
offset | No | Positive Int | First record from list to return. If omitted, 0 is assumed. |
{
"fio_address": "purse@alice",
"limit": 100,
"offset": 0
}
- Request is validated per Exception handling
- NFTs are returned which are mapped by this FIO Address
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid FIO Address | Format of FIO Address not valid. | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "Invalid FIO Address format" |
FIO Address does not exist | FIO Address does not exist. | 400 | "fio_address" | Value sent in, i.e. "purse@alice" | "FIO Address does not exist" |
Invalid limit | limit is not valid | 400 | "limit" | Value sent in, e.g. "-1" | "Invalid limit" |
invalid offset | offset not valid | 400 | "offset" | Value sent in, e.g. "-1" | "Invalid offset" |
No NFTs are mapped | FIO Address does not have any NFTs mapped. | 404 | "NFTs not found" |
Group | Parameter | Format | Definition |
---|---|---|---|
nfts | JSON Array | Array of nfts | |
nfts | chain_code | String | Chain code |
nfts | contract_address | String | Contract address |
nfts | token_id | String | Token ID |
nfts | url | String | Url of NFT asset |
nfts | hash | String | Token ID of NFT |
nfts | metadata | String | Metadata for NFT |
more | Int | Number of remaining results |
{
"nfts": [
{
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001",
"url": "ipfs://ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq",
"hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
"metadata": ""
},
{
"chain_code": "EOS",
"contract_address": "atomicassets",
"token_id": "2199023271139",
"url": "",
"hash": "",
"metadata": ""{\"creator_url\":\"https://yahoo.com/\"}""
}
],
"more": 0
}
Returns all mapped NFTs which have the specified contract address and token id.
Parameter | Required | Format | Definition |
---|---|---|---|
chain_code | Yes | String | Chain code where NFT contract resides. |
contract_address | Yes | String | NFT contract address. |
token_id | No | String | NFT token ID. |
limit | No | Positive Int | Number of records to return. If omitted, all records will be returned. Due to table read timeout, a value of less than 1,000 is recommended. |
offset | No | Positive Int | First record from list to return. If omitted, 0 is assumed. |
{
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001",
"limit": 100,
"offset": 0
}
- Request is validated per Exception handling
- NFTs which match the chain_code, contract_address, token_id combination are returned. Omitting or providing empty token_id will return NFTs which have the same chain_code, contract_address. In other words, empty token_id field is a wildcard.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid chain format | Invalid format of chain_code (see above) | 400 | "chain_code" | Value sent in, e.g. "BTC!@#$%^&()" | "Invalid Chain Code" |
Invalid contract address format | Invalid format of contract_address (see above) | 400 | "contract_address" | Value sent in, e.g. "" | "Invalid Contract Address" |
Invalid token id | Invalid format of token_id (see above) | 400 | "token_id" | Value sent in | "Invalid Token ID" |
Invalid limit | limit is not valid | 400 | "limit" | Value sent in, e.g. "-1" | "Invalid limit" |
invalid offset | offset not valid | 400 | "offset" | Value sent in, e.g. "-1" | "Invalid offset" |
No NFTs are mapped | FIO Address does not have any NFTs mapped. | 404 | "NFTs not found" |
Group | Parameter | Format | Definition |
---|---|---|---|
nfts | JSON Array | Array of nfts | |
nfts | fio_address | String | FIO Address which mapped the NFT |
nfts | chain_code | String | Chain code |
nfts | contract_address | String | Contract address |
nfts | token_id | String | Token ID |
nfts | url | String | Url of NFT asset |
nfts | hash | String | Token ID of NFT |
nfts | metadata | String | Metadata for NFT |
more | Int | Number of remaining results |
{
"nfts": [
{
"fio_address": "purse@alice"
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001",
"url": "ipfs://ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq",
"hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
"metadata": ""
},
{
"fio_address": "purse@alice"
"chain_code": "EOS",
"contract_address": "atomicassets",
"token_id": "2199023271139",
"url": "",
"hash": "",
"metadata": ""{\"creator_url\":\"https://yahoo.com/\"}""
}
],
"more": 0
}
Returns all mapped NFTs which have the specified hash.
Parameter | Required | Format | Definition |
---|---|---|---|
hash | Yes | String | SHA-256 hash of NFT asset, e.g. media url. |
limit | No | Positive Int | Number of records to return. If omitted, all records will be returned. Due to table read timeout, a value of less than 1,000 is recommended. |
offset | No | Positive Int | First record from list to return. If omitted, 0 is assumed. |
{
"hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
"limit": 100,
"offset": 0
}
- Request is validated per Exception handling
- NFTs which match the hash are returned.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid hash | Invalid format of hash (see above) | 400 | "hash" | Value sent in | "Invalid hash" |
Invalid limit | limit is not valid | 400 | "limit" | Value sent in, e.g. "-1" | "Invalid limit" |
invalid offset | offset not valid | 400 | "offset" | Value sent in, e.g. "-1" | "Invalid offset" |
No NFTs are mapped | FIO Address does not have any NFTs mapped. | 404 | "NFTs not found" |
Group | Parameter | Format | Definition |
---|---|---|---|
nfts | JSON Array | Array of nfts | |
nfts | fio_address | String | FIO Address which mapped the NFT |
nfts | chain_code | String | Chain code |
nfts | contract_address | String | Contract address |
nfts | token_id | String | Token ID |
nfts | url | String | Url of NFT asset |
nfts | hash | String | Token ID of NFT |
nfts | metadata | String | Metadata for NFT |
more | Int | Number of remaining results |
{
"nfts": [
{
"fio_address": "purse@alice"
"chain_code": "ETH",
"contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
"token_id": "100010001",
"url": "ipfs://ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq",
"hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
"metadata": ""
},
{
"fio_address": "purse@alice"
"chain_code": "EOS",
"contract_address": "atomicassets",
"token_id": "2199023271139",
"url": "",
"hash": "",
"metadata": ""{\"creator_url\":\"https://yahoo.com/\"}""
}
],
"more": 0
}
Ability to search based on multiple parameters was scaled down and split into separate getter calls to ease development effort.
Impacted source FIO Contracts:
- fio.contracts/fio.address/fio.address.cpp
- fio.contracts/fio.address/fio.address.hpp
- fio.contracts/fio.common/fio_common_validator.hpp
FIO Node
- chain_plugin/chain_plugin.cpp
- chain_plugin/include/chain_plugin.hpp
- chain_api_plugin/chain_api.plugin.cpp
- programs/clio/main.cpp
Details:
- Adding new custom actions to fio.address contract and their supported endpoints on the chain api
- Add new table (nftstable) to support the necessary storage and searching NFT data
- Adding new validator functions to fio.common headers (long url and hexadecimal validator)
- Modifying the existing actions that "burn" nft account containers
- Updating the FIO Address ABI (static)
Updates to development environment:
fio.devtools/scripts/actions/update_contracts.sh fio.devtools/scripts/launch/04_create_accounts.sh fio.devtools/scripts/launch/09_set_permissions.sh fio.devtools/scripts/launch/19_bind_dev_contracts.sh
Table:
- nfts (nftstable)
Name | Type | Definition |
---|---|---|
id | uint64 | primary index |
owner | name | Searchable Owner (actor) of the NFT |
handle | string | FIO Handle (FIO Registered Address) |
handlehash | uint128 | Searchable hash of FIO handle (fio address) |
chain_code | string | Blockchain the NFT contract is on |
contract_address | string | Searchable Blockchain contract address of the NFTs |
token_id | uint64 | Unique identifier provided by the NFT contract |
url | string | Users URL for the NFT. Must be RFC3986 supported characters (128 max) |
hash | string | Searchable Sha256 Digest of the NFT |
metadata | string | Additional NFT metadata |
Structures: New type and reflections to support complex contract parameters for addnft and remnft.
-
nftinfo
uint64 id // id of the nft record string fio_address // fio address mapped to NFT string chain_code // chain code of the nft uint64 chain_code_hash //hash of the chain code, for searching from endpoint string tokenid //token id is string to support other blockchain id conventions uint64 token_id_hash // unique id of the NFT. Created by hashing fio_address + chain_code + contract_address + token_id string url //optional uint128 fio_address_hash // index of the fio_address (searchable) string contract_address // contract address of NFT string hash //optional NFT hash uint128 hash_index //searchable index for hash string metadata // optional data key 1: byaddress key 2: bycontract key 3: byhash key 4: bychain key 5: bytokenid
-
nftparam
string chain_code uint64 token_id string contract_address string url string hash string metadata
-
remnftparam
string chain_code string contract_address uint64 token_id
-
nftburninfo
uint64 id uint128 fio_address_hash
Released in:
No changes to requests/responses in existing actions or getters.
None
https://fioprotocol.atlassian.net/wiki/spaces/FC/pages/113606966/NFT+Digital+Signature