Table of Contents

Purchase Entities

Not intended to be interpreted as Database Model


Depicts a shopping Cart and contains:

  • Timestamp

  • Items

    • item

    • description - e.g. domain name

    • type

      • FIO Domain

      • FIO Address

      • FIO Domain Renewal

      • Bundles

    • Amount in FIO

    • Amount in USDC

    • Executed to blockchain

      • True

      • False

    • Status

      • None

      • Success

      • Failed

  • Target FIO Public Key

  • Status

    • New

    • Pending

    • Success

    • Canceled

    • Partial Success

    • Failed

  • Payment type

    • FIO Tokens

    • Stripe

    • Bitpay

  • Link to User

  • Links to Payments


Record events associated to Orders and Payments


  • Order Created

  • Funds credited to Order, e.g. “Stripepayment notification received (TX: 3213123131231, Status: Completed)”

  • Funds debited from Order, e.g. “Charge for pawel@hodl”

  • FIO Domain/Address registered on chain, e.g. “Registred pawel@hodl (FIO TX: kjdhakjdhkadhkajsdhkasjdhkasjhdkas)”

  • FIO Domain/Address registration error, e.g. “Failed to register pawel2@hodl (FIO error: "Insufficient funds")”

  • Funds credited to user, e.g. “Crediting FIO to user”


  • Payment notification received, e.g. “Stripe payment notification received (TX: 3213123131231, Status: Pending)”


Depicts payment transactions executed against specific Order. This is akin to Registration site transaction.

  • Timestamp

  • Type

    • FIO Tokens

    • Stripe

    • Bitpay

  • Currency

  • Amount

  • Amount in USDC

  • External transaction ID

  • Description

Cart Purchase Logic




See https://stripe.com/docs/payments/accept-a-payment?ui=elements

Registering FCHs on private domain when not paid with FIO

  • If cart contains a FCH on a domain owned by the user check domain status (private/public)

  • If owner wallet is a Ledger Wallet registration of FCH on private domain is not allowed

    • Display error: “At this moment registration of FIO Cryptyo Handles on private domains is not supported. We are working hard to add this capability to the Ledger’s FIO App.”

  • If the FCH being registered is on a private domain (domain registered in the same transaction will be private):

    • Have the user sign a transaction registering that FCH using pay with FIO functionality (PIN code will be required immediately after they click Purchase)

      • Set the max_fee parameter to 125% of fee obtained from get_fee for register_fio_address

    • Once payment is received (e.g. webhook notification from Stripe received):

      • If domain is being registered in the same purchase, register it first

        • If registration fails, automatically fail FCH registrations on that domain

      • Re-check current register_fio_address fee

        • If just obtained register_fio_address is more than the fee signed by user in the step above fail FCH registration

      • Send FIO Tokens to user in the amount of just obtained register_fio_address

        • If transaction fails with Insufficient funds to cover fee:

          • re-check current register_fio_address fee

          • Send users the difference between new fee and number of tokens they received

          • Resubmit the transaction with higher fee

Registering or renewing domains for multiple years

On-chain execution of cart items


On-chain call


On-chain call

Register FIO Address


Register FIO Domain


Renew FIO Domain


Add bundles to FIO Address