User A wants to wrap FIO Domain to P public address on C chain.
User A fetches amount of Oracle fee using /get_oracle_fees.
User A executes wrapdomain action and passes in:
fio_domain (D) to wrap
public_address (P) on chain C where domain should be delivered
chain_code C
max_oracle_fee - maximum amount of FIO user A is willing to pay the Oracles
FIO Domain is transferred to wrapping smart contract account
Oracle fee is transferred from user A and distributed evenly to all registered Oracles.
Oracles monitor every block looking for wrapdomain action.
Once detected Oracles trigger minting of FIO Domain NFT on another chain.
User A wants to unwrap X FIO Tokens to P public address on FIO Chain.
User A executes action on another chain (not covered by this FIP):
Oracles monitor every block on another chain (not covered by this FIP).
Once detected each Oracle executes unwraptoken action and passes in:
fio_public_key where to transfer tokens
amount (X) of FIO tokens to transfer
Once the last Oracle executes unwraptoken action, the tokens are transferred to P.
Preferred approach = Burn
Oracle monitors wrapped domains on the FIO chain.
When the FIO Domain burn date hits, the Oracle calls the Ethereum contract burn function
Alternative proposals:
URI that points to the expire date so that it can be checked.
If someone re-wraps a domain that previously was wrapped