User Flow
This chapter describes the actions users can perform in BitSave protocol and explains how each operation affects a user’s savings and the protocol’s execution flow.
Registration with the Protocol
Before creating any savings, a user must register with BitSave.
Steps
Call the BitSave parent contract
The user initiates interaction with the Bitsave contract.
Child Contract Deployment Upon successful registration, the protocol deploys a unique ChildBitsave contract for the user and permanently maps it to their address.
Outputs
A dedicated ChildBitsave contract is created for the user
The user is now able to create and manage savings
A one-time registration fee of $1 is deducted in native ETH
Creating a Savings Plan
Creating a savings plan initialises a time-locked savings position inside the user’s child contract.
Steps
Approve ERC-20 Token For ERC-20 savings, the user approves the BitSave parent contract to transfer the specified token amount.
Create Savings via Parent Contract The user initiates savings creation through the Bitsave contract, specifying:
Savings amount
Maturity time
Early withdrawal penalty parameters
Savings Creation Fee
As part of the savings creation transaction, a protocol-defined savings fee of $1 is deducted in native ETH by the parent contract.
Fund Routing Funds are transferred to the parent contract and immediately forwarded to the user’s ChildBitsave contract within the same operation.
Savings Record Creation The child contract records the savings metadata, including principal, maturity time, penalty rules, and tracking points.
Outputs
A new savings plan is created
A savings creation fee is collected
Funds are held in the user’s child contract
Savings become time-locked until maturity (unless withdrawn early)
Incrementing an Existing Savings
Users can add more funds to an existing savings plan.
Steps
Approve Additional Tokens The user approves the parent contract to transfer additional ERC-20 tokens.
Call Savings Increment Function The increment request is routed through the parent contract.
Funds Are Forwarded to Child Contract The parent contract immediately forwards funds to the user’s child contract.
Savings Metadata Is Updated The child contract updates the principal and associated tracking data.
Outputs
Savings principal increases
Existing maturity and penalty rules remain in effect
Funds remain isolated within the user’s child contract
Withdrawing Funds
Users can withdraw funds from a savings plan either at maturity or before maturity.
To withdraw a savings plan, the user specifies the name of the savings, which uniquely identifies the savings position within the user’s child contract.
Withdrawal Rules
At or after maturity: The full principal amount is returned to the user.
Before maturity: A penalty is applied to the principal, according to the savings configuration.
Steps
Initiate Withdrawal The user requests withdrawal through the BitSave frontend or via contract interaction.
Savings State Check The child contract checks the savings maturity time and penalty conditions.
Penalty Application (if applicable) If withdrawn early, the configured penalty is applied.
Fund Transfer to User The child contract transfers the resulting amount back to the user.
Outputs
Savings plan is reduced or closed
Funds are returned directly from the child contract
No pooled funds or shared balances are involved
Withdrawing Funds Without the Frontend (Manual / Emergency)
This method allows users to withdraw their savings directly through a block explorer, for example, if the BitSave frontend is unavailable.
⚠️ This flow is intended for advanced users.
Steps
Connect your wallet Open the BitSave parent contract on a block explorer ( and connect your wallet.
Navigate to “Write Contract”
Call withdrawSavings
Enter Savings Name Type the name of your savings and add a trailing space ( ).
Approve the Transaction
Once confirmed, the savings is withdrawn according to protocol rules.
Outputs
Funds are withdrawn directly from the user’s child contract
Early withdrawal penalties apply if the savings has not matured
No frontend interaction is required
Last updated
Was this helpful?
