Table of contents
- Sending crypto using FIO Addresses
- FIO Private/Public Key
- FIO Address registration outside of wallet
- Assigning public addresses to FIO Address
- FIO Request and FIO Data
- FIO token
- FIO Address and FIO Domain registration inside wallet
It is up to the integrating wallet to decide which features of the FIO Protocol they want to implement and how. The following document defines available features and options.
1. Sending crypto using FIO Addresses
The most basic level of integration with FIO Protocol is to enable sending of crypto currency using human-readable FIO Address instead of long cryptic native blockchain public addresses (NBPAs).
This level typically requires updates to the Send crypto currency screen to allow for a FIO Address to be entered in addition to NBPA. FIO Address can be easily identified by looking for a @ (at sign) in the string.
Once FIO Address is entered, it can be resolved to NBPA on a specific blockchain using /get_pub_address API method.
Once NBPA is obtained, the Send transaction executes as if the user entered or scanned the NBPA.
2. FIO Private/Public Key
All further integration options will require a FIO Private/Public key pair to be generated and stored inside the wallet.
FIO Chain’s is registered at index 235/0x800000eb on the SLIP-44, Level 2 of the hierarchy for deterministic wallets, which should make it easier to implement for wallets which already support SLIP-44.
FIO Private Keys follow standard Wallet Import Format (WIF) standard and public keys follow well-known base58 encoding with FIO prefix, e.g.
For those who have integrated EOSIO, FIO public keys follows the same format, except the prefix is FIO instead of EOS.
3. FIO Address registration outside of wallet
Most FIO Protocol functionality requires a user to have a FIO Address. A FIO Address is an NFT owned by owner FIO Public Key and consists of a username and a domain delimited by an @
The easiest way to facilitate a FIO Address registration is to redirect the users to a Foundation for Interwallet Operability co-branded website (available after Mainnet launch) which enables registration and payment with common crypto currencies, such as Bitcoin. FIO Public Key needs to be passed to the website, so that the FIO Address can be properly assigned to the owner.
FIO Address has annual fee associated with them. Fees in the FIO Chain are set by block producers. It’s estimated that at Mainnet launch registration fee for FIO Address will be 5 USD equivalent in FIO tokens.
Every FIO Address comes with a set number of bundled transactions annually. The specific number is set by the block producers and is estimated to be 500 annually at Mainnet launch. This bundle is expected to cover most transactions executed by user except token transfer fees and certain governance or domain management fees.
In order to ensure a particular action is covered by the bundle, the wallet should execute /get_fee API method before submitting any signed transaction.
Fetching user’s FIO Addresses
FIO Addresses currently owned by the user (even if registered outside of the wallet) may be fetched using /get_fio_names API method.
4. Assigning public addresses to FIO Address
In order allow others to send crypto currency using the user’s FIO Address, it has to be mapped to native blockchain public addresses (NBPAs). This has to be done from within the wallet using /add_pub_address API method as it needs to be signed with user’s private key. For now, this mapping is stored unencrypted, but a privacy mode will be added post Mainnet.
It is up to the wallet to decide if this happens automatically, behind the scenes or driven by the user via UI. If the wallet supports multiple NBPAs for the same blockchain at the same time, e.g. multiple bitcoin wallets, the decision will likely need to be made by the user via UI.
For deterministic wallets, mappings can be updated automatically, behind the scenes without requiring the user to take any action.
5. FIO Request and FIO Data
One of the key features of FIO Protocol is the ability to request crypto using FIO Request. The user requesting funds (Payee) can send a FIO Request to a user who is asked to pay (Payer), by only using the Payer’s FIO Address.
FIO Request data, such as amount, currency, and memo field are encrypted and only readable by Payee and Payer.
Submitting new FIO Request
To request funds, Payee’s wallet should submit a new FIO Request using /new_funds_request API method.
Fetching pending FIO Requests
The Payer’s wallet can fetch all new and pending FIO Requests using /get_pending_fio_requests API method.
Rejecting a FIO Request
The Payer’s wallet can reject a FIO Request, which will remove it from the pending list, using /reject_funds_request API Method.
Fetching sent FIO Requests
The Payee’s wallet can fetch all sent FIO Requests and its current status using /get_sent_fio_requests API method.
Recording FIO Data
Anytime crypto is sent using FIO Address, optional metadata such as amount, currency, and memo, may be recorded on the FIO Chain. FIO Data is encrypted and only readable by Payee and Payer.
FIO Data, can be recorded using /record_obt_data API method.
Although /record_obt_data has to be sent any time user is sending crypto currency in response to a FIO Request, it is optional when user sends crypto using FIO Address. It allows for transaction Memo to be reliably send across different wallets. It’s up to the wallet to decide if sending of metadata in such scenario should be enabled/disabled or left for user to decide in a setting.
Retrieving FIO Data
OBT data can be retrieved using /get_obt_data
This call will return all metadata relevant to the provided FIO Public key, including:
- Outbound data. Payer’s FIO Address is owned by provided FIO Public key
- Inbound data. Payee’s FIO Address is owned by provided FIO Public key
6. FIO token
FIO Chain’s native token is FIO. Any wallet can integrate FIO token in a similar fashion as other blockchain’s tokens. Even though FIO is a fork of EOS, it does not require a creation of accounts, or even a FIO Address. In fact, accounts are totally transparent to the user of the blockchain.
There are 1,000,000,000 Smallest Units of FIO (SUFs) inside 1 FIO. All transactions in FIO Protocol are expressed in SUFs.
- Ticker: FIO
- Symbol: ᵮ
Token transactions only require a FIO Private/Public Key and can be executed using /transfer_tokens_pub_key API method.
Checking token balance
Token balance can be obtained by passing FIO Public Key to /get_fio_balance API method.
7. FIO Address and FIO Domain registration inside wallet
For wallets desiring full control over the registration user experience, a full suite of FIO Address and FIO Domain registration and renewal API methods are available.
Registering/renewing FIO Domain
Registering/renewing FIO Address
Fetching user’s FIO Addresses and Domains
FIO Addresses and Domains currently owned by the user may be fetched using /get_fio_names API method.
Checking FIO Address or Domain availability
To enable the registering wallet to easily check if a FIO Address or Domain is available for registration, /avail_check API method may be called.
Paying for FIO Addresses on behalf of users
Wallets may also decide to cover the cost of FIO Address for their users. For that purpose Foundation for Interwallet Operability will develop server code (available after Mainnet launch) which enables the wallet to run their own registration server.