Running nodes

See Building a node and History node.

FIO token transfer transactions

FIO token

FIO Chain’s native token is FIO. FIO is the only token present on the FIO Chain.

There are 1,000,000,000 Smallest Units of FIO (SUFs) inside 1 FIO. All transactions in FIO Protocol are expressed in SUFs.

Transferring FIO token

Tokens on the FIO Chain are transferred using /transfer_tokens_pub_key method.

The method requires payee FIO Public Key. The key is hashed down to an account name and funds are transferred to that account. If that account does not exist, it gets created automatically.

The native EOSIO transfer action is not supported.

Transaction memo

/transfer_tokens_pub_key does not accept a memo field. To attach a memo to a FIO token transfer, a /record_obt_data transaction should be sent after the tokens are transferred and include the token transfer transaction id. /record_obt_data requires that both payer and payee have a FIO Address. If either party does not have a FIO Address transfer of memo is not supported.

Checking token balance

Token balance can be obtained by passing FIO Public Key to /get_fio_balance API method.

Transaction history

See History node

Handling FIO token deposits

This section describes different options an exchange can implement to allow users to deposit FIO tokens into their exchange accounts. It’s up to the exchange to decide which option(s) work best for their users.

1. Using unique FIO Public Key

Similar to UTXO-based chains, to accept FIO token deposit, an exchange may generate a unique FIO Public Key for every user or deposit. Unlike EOSIO, FIO Chain does not require that key to be assigned to an existing account before funds are sent to it. Once a token transfer is initiated to that Public Key, the account will be created automatically.

FIO Chain’s is registered at index 235/0x800000eb on the 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.

FIO7tkpmicyK2YWShSKef6B9XXqBN6LpDJo69oRDfhn67CEnj3L2G

For those who have integrated EOSIO, FIO public keys follows the same format, except the prefix is FIO instead of EOS.

FIO Key Derivation Path:

"44'/235'/0'/0/0"

See Private/Public Keys for more information including testing examples.

2. Using unique FIO Address for each user

An exchange may set-up a unique FIO Address for each user of the exchange, and display it in their deposit area, e.g. alice@myexchange.

To deposit FIO to their account the user would simply send FIO tokens from FIO-enabled wallet to their FIO Address, e.g. alice@myexchange, and would not have to deal with Public Keys or memo fields.

Each FIO Address may be mapped using /add_pub_address to either the same FIO Public Key for all users or unique FIO Public Key for each user.

Same FIO Public Key for all users

If same FIO Public Key is used, the inbound transaction can be identified by reading the OBT Data using /get_obt_data. The data is encrypted. Once decrypted FIO Address of Payee will uniquely identify the user and obt_id will contain FIO Chain transaction ID of the corresponding deposit.

Unique FIO Public Key for each user

If unique FIO Public Key is used, the inbound transaction can be identified by the FIO Public Key instead and reading of OBT Data is not required.

3. Using same FIO Address for all users

An exchange may set-up a single Deposit FIO Address for all users of the exchange, and display it their deposit area, e.g. deposits@myexchange.

To deposit FIO to their account the user would simply send FIO tokens from FIO-enabled wallet to the Deposit FIO Address, e.g. deposits@myexchange. To properly identify the inbound transaction, the user would have to either include a memo which includes their exchange account, or provide the exchange, ahead of time, with a list of FIO Addresses which the user owns.

The Deposit FIO Address would be mapped using /add_pub_address to a single FIO Public Key.

The inbound transaction can be identified by reading the OBT Data using /get_obt_data. The data is encrypted. Once decrypted, memo or FIO Address of Payee will uniquely identify the user and obt_id will contain FIO Chain transaction ID of the corresponding deposit.

4. Using FIO Request

With this option, the user’s deposit area on the exchange would ask for a FIO Address and the amount of deposit. Once provided a FIO Request would be send by the exchange using /new_funds_request. The request would be received by the user inside their FIO-enabled wallet and all required information (FIO Public Key where to send data, memo field) would be attached to the outgoing transaction. The user can simply tap to approve send.

The inbound transaction can be identified by reading the OBT Data using /get_obt_data. The data is encrypted. Once decrypted it will contain FIO Address on exchange, FIO Public Key, memo, any of which can uniquely identify the user. obt_id will contain FIO Chain transaction ID of the corresponding deposit.

Handling FIO token withdrawals

This section describes different options an exchange can implement to allow users to withdraw their FIO tokens from their exchange accounts. It’s up to the exchange to decide which option(s) work best for their users.

1. Using FIO Public Key

With this option, the user’s withdrawal area on the exchange would ask for a FIO Public Key and the amount of withdrawals. The transfer would be executed using /transfer_tokens_pub_key and metadata recorded using /record_obt_data.

2. Using FIO Address

With this option, the user’s withdrawal area on the exchange would ask for a FIO Address and the amount of withdrawals. Once FIO Address is entered, the corresponding FIO Public Key is looked-up using /get_pub_address. The transfer would be executed using /transfer_tokens_pub_key and metadata recorded using /record_obt_data.

3. Using FIO Request

If users of exchange were assigned unique FIO Addresses or if users provided the exchange, ahead of time, with a list of FIO Addresses which the user owns, they could send a FIO Request from their wallet to the exchange’s FIO Address (either generic, e.g. deposits@myexchange, or unique, e.g. alice@myexchange).

The user would then login to the exchange and approve the FIO Request. Once approved, the exchange would execute the transfer using /transfer_tokens_pub_key and FIO Public Key provided in the FIO Request. It would also record metadata using /record_obt_data.