Overview
Dynamic Oracle Approach
FIO is automatically converted to ETH to cover gas costs
NFT Redemption Approach
The NFT is not actually minted until there is an action on the Ethereum chain where Bob can pay the gas fee
Notes on FIO Domain Expiration as an ETH NFT
Expiration is not stored on the minted eth NFT
The oracle will enact actions on the NFT after checking the FIO chain for validity
if unwrapped and expired
Cannot be placed in escrow
Cannot be wrapped
If held in escrow and expired
Can be released back to the FIO owner
Can be renewed on FIO chain
Once valid, can be transferred
Can not be approved by new owner (when ETH gas is paid)
wrapping process is not completed, NFT does not yet exist on ETH chain
if wrapped and not expired
Can be released from escrow to new owner
The FIO Domain can be wrapped assuming it has not expired or about to expire.
Do not wrap tokens that will expire in about 2 weeks?
An FIO domain NFT that has been wrapped on Ethereum chain does not need to be used on the Ethereum chain, so the resolvers used in ENS are not necessary.
NFTs as tradable assets have images associated with them via a uri string
The image of the NFT is not pertinent to FIO domains.
NFTs minted for trade on OpenSea use their own servers to store the image uri
More universal approach will require an IPFS node
Can make FIO endpoint available to retrieve string from FIO state.
Can be configured by block producers
v1/chain/get_nft_image example
POST:
'{“url”:”https://fio.eosrio.io/v1/chain/get_nft_image”}'
RESPONSE:
'{“image”:”https://imgur.com/exampleimage.png”}'
IPFS Url formatting:
'{“image”:”https://{gatewayURL}/ipfs/{content ID}/{optional path to resource}”}'
Oracles
regoracle
Register Oracle.
Registering oracles
Each Oracle is registered using regoracle action.
Implementation
New action: regoracle
Request body
Parameter | Required | Format | Definition |
---|---|---|---|
oracle | Yes | Ethereum public address | Same as FIO account |
Processing
Request is validated per Exception handling.
Oracle is added after 7 custodians have registered the same Ethereum public address
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid oracle | Oracle is not valid or does not exist | 400 | "oracle_actor" | Value sent in, e.g. "alice" | "Invalid oracle" |
No authority | The signer does not have authority to register oracles | 403 | Type: invalid_signature |
Response body
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
unregoracle
Unregister Oracle.
Implementation
New action: unregoracle
Request body
Parameter | Required | Format | Definition |
---|---|---|---|
oracle | Yes | Ethereum public address |
Processing
Oracle is removed after 7 custodians have unregistered the same public address
oracle_actor is removed
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid oracle | Oracle is not registered | 400 | "oracle_actor" | Value sent in, e.g. "alice" | "Invalid oracle" |
No authority | The signer does not have authority to register oracles | 403 | Type: invalid_signature |
Response body
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
Example
{ "status": "OK" }
Custodians
regcustodian
Register Custodian
Registering oracles
Each Custodian is registered using regcustodian action.
Implementation
New action: regcustodian
Request body
Parameter | Required | Format | Definition |
---|---|---|---|
oracle_actor | Yes | 12 character string | Same as FIO account |
Processing
Request is validated per Exception handling.
Custodian is added after 7 custodians have registered the same public address
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid oracle | Oracle is not valid or does not exist | 400 | "oracle_actor" | Value sent in, e.g. "alice" | "Invalid oracle" |
No authority | The signer does not have authority to register oracles | 403 | Type: invalid_signature |
Response body
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
unregcustodian
Unregister Custodian.
Implementation
New action: unregcustodian
Request body
Parameter | Required | Format | Definition |
---|---|---|---|
oracle_actor | Yes | 12 character string | Valid actor (account) of oracle. |
Processing
Custodian is removed after 7 custodians have unregistered the same public address
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
Invalid oracle | Oracle is not registered | 400 | "oracle_actor" | Value sent in, e.g. "alice" | "Invalid oracle" |
No authority | The signer does not have authority to register oracles | 403 | Type: invalid_signature |
Response body
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
Example
{ "status": "OK" }
Add Comment