[FIP-27] Development Spec
Links
FIP-27 https://github.com/fioprotocol/fips/blob/master/fip-0027.md
Signature Design Story https://fioprotocol.atlassian.net/secure/RapidBoard.jspa?rapidView=2&projectKey=BD&modal=detail&selectedIssue=BD-2570
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