Links
...
There are two main use cases that concern the Oracle, Wrap and Unwrap. These are detailed below.TBD: What are the
Watchdog routines
In addition to wrap/unwrap, the Oracle should also have certain watchdog/monitoring routines we expect from the Oracles?Ensure each routine was healthy. routines that ensure the processes and routines executed by the Oracle healthy. For example:
Make sure a loop didn’t get stuck.
...
Ensure there are no blocked channels.
...
Ensure the health of the daemon itself.
Wrap
Wrap creates wFIO on the Ethereum chain.
See the following page for an overview of the Wrap use case: Wrap
Functionality | |
---|
Alice (via dApp) called wraptokens inside the fio.oracle contract on FIO chain | fio.oracle contract actions:
Parameter Validation ( ensuring amount, token codes, pubkey and fees are all properly set ) Search oracle registration table (contains all registered oracles) and tally up the total number of registered oracles Collect Oracle fees, sort, and find the median. Send fee to all oracles. Emplace wrapping details inside the oracleldgrs table. Send the wrapped amount from Alice to fio.oracle contract. Collect BP fees Increase Alices RAM by 512. Send successful response to Alice
|
Oracle monitors wraptokens for transfers | Todd G What was the Go code doing to monitor the chain? FIO - tried web socket subscription (requires extra setup to do streaming) etc second was just using V1 history to poll . This requires TBD: Both methods require a history node so we should reach out to BPs with the requirements . and ask which method they prefer |
Oracle validates wraptokens transactionTodd G Need bullet list of validations | and watch for exploits Common things , then no longer in a mempool. it |
If exceptions are found, Oracle takes action to unwind transaction | See Exception handling below Todd G Need to flesh this out |
Oracle executes wrap on Ethereum chain
| wrap(ethaddress, FIO (SUF) amount, obtid); ex. wrap(“0x00000000000”, 10000000, “0x123456789”); fio.erc20 contract actions:
ethereum wallet provider (usually truffle/hd-wallet-provider) set to use oracles ethereum private key wFIO recipient eth address, wFIO amount to mint (must match what was wrapped on FIO chain exactly), and the obtid of the FIO transaction are provided as parameters to wrap action Transaction is executed address provided receives wrapped FIO assets event emitted: wrapped(address ethaddress, uint256 amount, uint256 obtid);
|
Listen for unwrapped events | |
Oracle validates wrap transaction Todd G What type of validation is done on the Ethereum chain during a wrap? | Oracles monitor all wrap transactions in process to ensure consensus has been reached. If a transaction is stuck in a pre-consensus state for some reason, a rollback should be triggered or a warning event should be thrown.
|
Once all Oracles have submitted wrap , the wFIO Tokens will be minted and transferred to designated Ethereum public address | Todd GTBD: Does the oracle do any kind of monitoring or validation of the overall transaction (post consensus?) |
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message | Oracle Action |
---|
Invalid chain | Chain passed to wraptokens action is not Ethereum (Note: this restriction is not enforced in the FIO Contract to allow for wrapping chain expansion without deployment of code) | | | | | Oracle triggers unwraptokens action to send FIO back to originating address |
Invalid Ethereum address | Public address passed to wraptokens action is not a valid Ethereum address (Note: this restriction is not enforced in the FIO Contract to allow for wrapping chain expansion without deployment of code) | | | | | Oracle triggers unwraptokens action to send FIO back to originating address |
| | | | | | |
...
Functionality | |
---|
Alice (dApp) executes unwrap on Ethereum chain
| unwrap(fio address, amount); ex. unwrap(hard@edge, 100000000); fio.erc20 contract actions:
|
Oracle monitors unwrap event for transfers | |
Oracle validates unwrap transaction | Validation includes: |
If exceptions are found, Oracle takes action to unwind transaction | See Exception handling below |
Registered Oracles call upwraptokens inside the fio.oracle contract on FIO chain | fio.oracle contract Actions: Parameter Validation ( min/max amount, fio address check ) Verify the actor is a registered oracle Find the fio.address inside the fionames table Search for previous votes of the same obt_id If found Search and verify actor has not voted prior copy vector and push account name to list of voted oracles to the vector of votes modify voters table with new vector
If not found
Compare number of votes with number of registered oracles Send successful response to the oracle
|
Oracle validates unwraptokens transaction | Oracles monitor all unwraptokens transactions in process to ensure consensus has been reached. If a transaction is stuck in a pre-consensus state for some reason, a rollback should be triggered or a warning event should be thrown.
|
Once all Oracles have submitted unwraptokens , the FIO Tokens will be transferred to designated Ethereum public address | TBD: Does the oracle do any kind of monitoring or validation of the overall transaction (post consensus?) |
Exception handling
Error condition | Trigger | Type | fields:name | fields:value | Error message | Oracle Action |
---|
Invalid FIO Address | FIO Address passed in with ERC-20 is not valid or does not exist | | | | | Oracle triggers a ERC20 wrap action to send wFIO back to originating address |
Oracle Components
...