Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Current »

Summary

The objective of this project is to extend FIO Protocol functionality to enable NFT artists or provenance expert to digitally sign NFTs and for NFT collectors to fetch those signature.

This would be accomplished by:

  • Allowing a FIO Address owner to map their NFT to a FIO Address, similarly to how they can map public addresses.

  • Allowing anyone to fetch NFTs associated with a FIO Address.

Signing NFTs Use Cases

Artist creates a FIO Address for every NFT

  1. Artist registers a unique FIO Domain, e.g. @artist and promotes it to its followers as the true domain of the artist. The domain is kept private, so only the artist can register FIO Addresses on it.

  2. Artist mints an NFT on any blockchain as they do today.

  3. Artist registers a FIO Address for that NFT, e.g. newnft@artist.

  4. Artist maps NFT’s chain code, contract address, and optionally token id and sha-256 hash of the work to newnft@artist on the FIO Chain.

Artist uses single address for all NFTs

  1. Artist registers a unique FIO Address, e.g. artist@nftplatform and promotes it to its followers as the true address of the artist.

  2. Artist mints an NFT on any blockchain as they do today.

  3. Artist maps NFT’s chain code, contract address, and and optionally token id and sha-256 hash of the work to artist@nftplatform on the FIO Chain.

Trusted party verifies work

The model above could also be used by a trusted party, e.g. a gallery or provenance expert, to map work it has verified.

  1. Gallery registers a unique FIO Address, e.g. verifiednfts@gallery and promotes it to its followers as the address containing verified NFTs.

  2. Gallery maps NFT’s chain code, contract address, and optionally token id and sha-256 hash of the work to verifiednfts@galery on the FIO Chain.

Verifying NFTs Use Cases

Get all signed NFTs for FIO Address or Domain

  1. NFT collector gets the FIO Address or Domain, e.g. from artist’s or gallery’s website, and queries the FIO Chain for associated NFTs.

  2. FIO Chain returns FIO Address, chain code, contract address, and and optionally token id and sha-256 hash of the works.

Get all signatures for given NFT

  1. NFT collector gets NFT identifying data such as chain code, contract address, token id or hash, e.g. from an NFT marketplace, and queries the FIO Chain for associated signatures. Any available information can be passed. For example if the NFT collector only has a hash of the image associated with the NFT they can pass only that info.

  2. FIO Chain returns FIO Addresses which mapped the NFT to their FIO Address along with chain code, contract address, and optionally token id and sha-256 hash of the works.

  3. NFT collector trusts only FIO Addresses they know, e.g. addresses on artist website or gallery or provenance expert, and can also compare the hash returned to hash of the work. In the future Verified FIO Addresses concept may be used to identified trusted FIO Addresses.

Integrations

FIO Website

Foundation for Interwallet Operability will build tools into its upcoming dApp (aka Dashboard) to enable:

  • Signing of NFTs as defined above.

  • Verifying NFTs as defined above.

NFT marketplaces

NFT marketplaces can:

  • Enable artists using its platform to:

    • Register FIO Domains and Addresses.

    • Sign their NFTs by mapping them to their FIO Addresses.

  • Rely on FIO Protocol to:

    • Check NFTs being listed for any other trusted signatures to confirm provenance.

  • Act as a provenance expert by:

    • Mapping any verified NFTs to their own FIO Address.

  • Integrate:

Sample UX

https://xd.adobe.com/view/4ed48848-8442-411d-bbd8-ac8c189b7183-1b87/?fullscreen

Proposed Modification to FIO Chain

New actions

addnfts

This action adds (maps) NFTs to a FIO Address. It is eligible to be paid using bundled transactions.

Request

Group

Parameter

Required

Format

Definition

fio_address

Yes

string

  • FIO Address to which to map NFTs

nft

  • Max 5 per call

nfts

chain_code

Yes

string

  • (1 to 10 chars), pattern: ^[A-Z0-9]+$

  • Chain code identifies the blockchain. For example: for Ethereum: chain_code = ETH, for BTC: chain_code = BTC. For list of chain codes you can refer to SLIP-44 and/or FIP-15.

nfts

contract_address

Yes

string

  • This is the public address of the NFT smart contract on the target blockchain.

nfts

token_id

Yes

string

  • This is the specific token ID of the NFT.

  • Set to empty if not relevant.

nfts

hash

Yes

string

  • sha-256 hash of the work, e.g. hash of the image.

  • Set to empty if not known.

max_fee

Yes

string

  • Maximum amount of SUFs the user is willing to pay for fee.

  • Should be preceded by /get_fee for correct value.

tpid

Yes

  • FIO Address of the wallet which generates this transaction.

  • This FIO Address will be paid 10% of the fee.

  • See TPID for details.

  • Set to empty if not know.

actor

Yes

string

Example
{
  "fio_address": "purse@alice",
  "nfts": [
    {
      "chain_code": "ETH",
      "contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
      "token_id": "100010001",
      "hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b"
    },
    {
      "chain_code": "EOS",
      "contract_address": "atomicassets",
      "token_id": "2199023271139",
      "hash": "b8cb100b12807bd8a8267800477ee5ba4bd387e840bbedf02e31787ca9430bb0"
    }
  ],
  "max_fee": 0,
  "tpid": "rewards@wallet",
  "actor": "aftyershcu22"
}

Response

Parameter

Format

Definition

status

string

OK

fee_collected

Int

Amount of SUFs collected as fee

New getters

get_nfts

Parameter

Required

Format

Definition

fio_address

No

string

  • FIO Address to which to map NFTs

chain_code

No

string

  • (1 to 10 chars), pattern: ^[A-Z0-9]+$

  • Chain code identifies the blockchain. For example: for Ethereum: chain_code = ETH, for BTC: chain_code = BTC. For list of chain codes you can refer to SLIP-44 and/or FIP-15.

contract_address

No

string

  • This is the public address of the NFT smart contract on the target blockchain.

token_id

No

string

  • This is the specific token ID of the NFT.

hash

No

string

  • sha-256 hash of the work, e.g. hash of the image.

limit

No

Int

  • Number of requests to return. If omitted, all requests will be returned.

offset

No

Int

  • First request from list to return. If omitted, 0 is assumed.

Example 1
{
  "fio_address": "purse@alice",
  "limit": 100
}
Example 2
{
  "chain_code": "EOS",
  "contract_address": "atomicassets",
  "token_id": "2199023271139"
}
Example 3
{
  "hash": "b8cb100b12807bd8a8267800477ee5ba4bd387e840bbedf02e31787ca9430bb0"
}

Response

Group

Parameter

Required

Format

Definition

nfts

fio_address

Yes

string

FIO Address which has the NFT mapped.

nfts

chain_code

Yes

string

(1 to 10 chars)

  • Pattern: ^[A-Z0-9]+$

  • Chain code identifies the blockchain. For example: for Ethereum: chain_code = ETH, for BTC: chain_code = BTC. For list of chain codes you can refer to SLIP-44 and/or FIP-15.

nfts

contract_address

Yes

string

  • This is the public address of the NFT smart contract on the target blockchain.

nfts

token_id

Yes

string

  • This is the specific token ID of the NFT.

  • May empty if not relevant.

nfts

hash

Yes

string

  • sha-256 hash of the work, e.g. hash of the image.

  • May be empty if not known.

nfts

time_stamp

Yes

string

  • Timestamp of when mapped last.

more

Yes

Int

  • 0 - no more results 1 - more results

Example
{
  "nfts": [
    {
      "fio_address": "alice@purse",
      "chain_code": "ETH",
      "contract_address": "0x63c0691d05f441f42915ca6ca0a6f60d8ce148cd",
      "token_id": "100010001",
      "hash": "f83b5702557b1ee76d966c6bf92ae0d038cd176aaf36f86a18e2ab59e6aefa4b",
      "time_stamp": "2020-09-11T18:30:56"
    },
    {
      "fio_address": "alice@purse",
      "chain_code": "EOS",
      "contract_address": "atomicassets",
      "token_id": "2199023271139",
      "hash": "b8cb100b12807bd8a8267800477ee5ba4bd387e840bbedf02e31787ca9430bb0"
      "time_stamp": "2020-09-11T18:30:56"
    }
  ],
  "more": 0
}
  • No labels