[FIP-27] Development Spec

Links

Design

Summary of changes to fio and fio.contracts

FIO Contracts:

  • fio.address.hpp changed

  • fio.address.cpp changed

 

FIO Node:

  • chain_plugin/chain_plugin.cpp

  • chain_plugin/include/chain_plugin.hpp

  • chain_api_plugin/chain_api.plugin.cpp

  • programs/clio/main.cpp

Actions

  • addnft

  • remnft

  • remallnfts

  • burnexpired (modified)

  • xferaddress (modified)

  • burnaddress (modified)

Endpoints

  • get_nfts_fio_address

  • get_nfts_contract

  • get_nfts_hash

Structs and ABIs

  • NFT table manually added to fio.address.abi

  • addnft, remnft, remallnfts manually added to fio.address.abi

  • addnftparam and remnftparam structs for complex parameters

Tables

  • NFT table added to FIO Address contract

  • Index support for new getters

    • contract address & tokenid

    • nft hash

    • by fio address

    • by owner

  • Binary extensions

Risks

  • Increase in state utilization

SDK Requirements

  • Support for three new actions and new getters if applicable

Functional Testing

Design

  • add nft

    • NFT is searchable by hash

    • Searchable by owner

    • Verify fee amount properly paid from user

    • Verify fee amount distribution between bp pools and tpids

  • transfer address

    • Ensure NFTs are burned on transfer

  • burn address

    • Ensure NFTs burned with address

  • remove nft

    • Specific nft hash no longer exists

    • NFT owner no longer has nft in record

    • Verify fee amount properly paid from user

    • Verify fee amount distribution between bp pools and tpids

  • remove all nfts

    • None of the NFTs are present by their hash

    • Owner does not have NFTs

    • Verify fee amount properly paid from user

    • Verify fee amount distribution between bp pools and tpids

Results

TBD

Performance Testing

Design

  • Registration of 10000 NFTs, 20 simultaneous users 500 total

    • Measure TPS

    • Measure state utilization

    • Any bloating of the block log ?

    • Big vs small NFT metadata, urls, and other variably sized strings stored in state

  • Remove large amounts of NFTs from multiple users

    • Measure performance impact on node

    • Do actions begin to fail ?

Results

  • TBD

Fork Testing plan

  • N/A no forking changes

Rollout/Release plan

  • addactions MSIGs

    • '{"action":"addnft","contract":"fio.address","actor":"eosio"}'

    • '{"action":"remnft","contract":"fio.address","actor":"eosio"}'

    • '{"action":"remallnfts","contract":"fio.address","actor":"eosio"}'

  • Set fees MSIG

    • '{"end_point":"addnfts","type":"0","suf_amount":"300000000"}'

  • MSIG for contract update

    • fio.address contract

Rollout/Release verification plan

  • Add new nfts to FIO Address

  • Remove 1 NFT

  • Remove all NFTs

Unkowns

  • Fee amount to use

  • Ram increase

  • Producer rewards distribution