stBTC
This contract implements the ERC-4626 tokenized vault standard. Bitcoin deposits are tracked with a receipt token called stBTC, commonly referred to as "shares". Users have the flexibility to redeem stBTC, enabling them to withdraw their deposited tBTC along with any accrued rewards.
ERC-4626 is a standard to optimize and unify the technical parameters of vaults. This contract facilitates the minting and burning of shares (stBTC), which are represented as standard ERC20 tokens, providing a seamless exchange with tBTC or bitcoin tokens.
dispatcher
Dispatcher contract that routes tBTC from stBTC to a given allocation contract and back.
treasury
Address of the treasury wallet, where fees should be transferred to.
minimumDepositAmount
Minimum amount for a single deposit operation. The value should be set low enough so the deposits routed through Bitcoin Depositor contract won't be rejected. It means that minimumDepositAmount should be lower than tBTC protocol's depositDustThreshold reduced by all the minting fees taken before depositing in the Acre contract.
entryFeeBasisPoints
Entry fee basis points applied to entry fee calculation.
exitFeeBasisPoints
Exit fee basis points applied to exit fee calculation.
allowedDebt
Returns the maximum amount of the underlying asset for which the shares can be minted without the coverage in deposited assets.
currentDebt
Returns the current debt of the debtor.
totalDebt
Total amount of debt across all debtors.
This is the total amount of assets for which shares have been minted without the coverage in deposited assets. The value is used to adjust the total assets held by the vault.
TreasuryUpdated
Emitted when the treasury wallet address is updated.
Parameters
Name | Type | Description |
---|---|---|
oldTreasury | address | Address of the old treasury wallet. |
newTreasury | address | Address of the new treasury wallet. |
MinimumDepositAmountUpdated
Emitted when deposit parameters are updated.
Parameters
Name | Type | Description |
---|---|---|
minimumDepositAmount | uint256 | New value of the minimum deposit amount. |
DispatcherUpdated
Emitted when the dispatcher contract is updated.
Parameters
Name | Type | Description |
---|---|---|
oldDispatcher | address | Address of the old dispatcher contract. |
newDispatcher | address | Address of the new dispatcher contract. |
EntryFeeBasisPointsUpdated
Emitted when the entry fee basis points are updated.
Parameters
Name | Type | Description |
---|---|---|
entryFeeBasisPoints | uint256 | New value of the fee basis points. |
ExitFeeBasisPointsUpdated
Emitted when the exit fee basis points are updated.
Parameters
Name | Type | Description |
---|---|---|
exitFeeBasisPoints | uint256 | New value of the fee basis points. |
DebtAllowanceUpdated
Emitted when the maximum debt allowance of the debtor is updated.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
newAllowance | uint256 | Maximum debt allowance of the debtor. |
DebtMinted
Emitted when debt is minted.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
currentDebt | uint256 | Current debt of the debtor. |
assets | uint256 | Amount of assets for which debt will be taken. |
shares | uint256 | Amount of shares minted. |
DebtRepaid
Emitted when debt is repaid.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
currentDebt | uint256 | Current debt of the debtor. |
assets | uint256 | Amount of assets repaying the debt. |
shares | uint256 | Amount of shares burned. |
LessThanMinDeposit
Reverts if the amount is less than the minimum deposit amount.
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 | Amount to check. |
min | uint256 | Minimum amount to check 'amount' against. |
DisallowedAddress
Reverts if the address is disallowed.
ExceedsMaxFeeBasisPoints
Reverts if the fee basis points exceed the maximum value.
SameTreasury
Reverts if the treasury address is the same.
SameDispatcher
Reverts if the dispatcher address is the same.
InsufficientDebtAllowance
Emitted when the debt allowance of a debtor is insufficient.
Used in the debt minting function.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
allowance | uint256 | Maximum debt allowance of the debtor. |
needed | uint256 | Requested amount of debt of the debtor. |
ExcessiveDebtRepayment
Emitted when the debt of the debtor is insufficient - the debtor tries to repay more than they borrowed.
Used in the debt repayment function.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
debt | uint256 | Current debt of the debtor. |
needed | uint256 | Requested amount of assets repaying the debt. |
constructor
initialize
updateTreasury
Updates treasury wallet address.
Parameters
Name | Type | Description |
---|---|---|
newTreasury | address | New treasury wallet address. |
updateMinimumDepositAmount
Updates minimum deposit amount.
Parameters
Name | Type | Description |
---|---|---|
newMinimumDepositAmount | uint256 | New value of the minimum deposit amount. It is the minimum amount for a single deposit operation. |
updateDispatcher
Updates the dispatcher contract and gives it an unlimited allowance to transfer deposited tBTC.
Parameters
Name | Type | Description |
---|---|---|
newDispatcher | contract IDispatcher | Address of the new dispatcher contract. |
updateEntryFeeBasisPoints
Update the entry fee basis points.
Parameters
Name | Type | Description |
---|---|---|
newEntryFeeBasisPoints | uint256 | New value of the fee basis points. |
updateExitFeeBasisPoints
Update the exit fee basis points.
Parameters
Name | Type | Description |
---|---|---|
newExitFeeBasisPoints | uint256 | New value of the fee basis points. |
approveAndCall
Calls receiveApproval
function on spender previously approving the spender to withdraw from the caller multiple times, up to the value
amount. If this function is called again, it overwrites the current allowance with value
. Reverts if the approval reverted or if receiveApproval
call on the spender reverted.
If the value
is set to type(uint256).max
then transferFrom
and burnFrom
will not reduce an allowance.
Parameters
Name | Type | Description |
---|---|---|
spender | address | The address which will spend the funds. |
value | uint256 | The amount of tokens to be spent. |
extraData | bytes | Additional data. |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | True if both approval and |
disableNonFungibleWithdrawals
Disables non-fungible withdrawals.
updateDebtAllowance
Sets the maximum debt allowance of the debtor.
The current debt value is intentionally not checked to allow the governance reduce the debt allowance in case the depositor becomes risky or malicious.
Parameters
Name | Type | Description |
---|---|---|
debtor | address | Address of the debtor. |
newAllowance | uint256 | Maximum debt allowance of the debtor. |
mintDebt
Mints the requested amount of shares and registers a debt in asset corresponding to the minted amount of shares.
The debt is calculated based on the current conversion rate from the shares to assets.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | The amount of shares to mint. |
receiver | address | The receiver of the shares. |
Return Values
Name | Type | Description |
---|---|---|
assets | uint256 | The debt amount in asset taken for the shares minted. |
mintReceipt
This function proxies mintDebt
call and provides compatibility with Mezo IReceiptToken interface.
repayDebt
Repay the asset debt, fully of partially with the provided shares.
The debt to be repaid is calculated based on the current conversion rate from the shares to assets. The debtor has to approve the transfer of the shares. To determine the asset debt that is going to be repaid, the caller can use the previewRepayDebt
function.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | The amount of shares to return. |
Return Values
Name | Type | Description |
---|---|---|
assets | uint256 | The amount of debt in asset paid off. |
burnReceipt
This function proxies repayDebt
call and provides compatibility with Mezo IReceiptToken interface.
deposit
Mints shares to receiver by depositing exactly amount of tBTC tokens.
Takes into account a deposit parameter, minimum deposit amount, which determines the minimum amount for a single deposit operation. The amount of the assets has to be pre-approved in the tBTC contract.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | Approved amount of tBTC tokens to deposit. This includes treasury fees for deposited tBTC. |
receiver | address | The address to which the shares will be minted. |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | Minted shares adjusted for the fees taken by the treasury. |
mint
Mints shares to receiver by depositing tBTC tokens.
Takes into account a deposit parameter, minimum deposit amount, which determines the minimum amount for a single deposit operation. The amount of the assets has to be pre-approved in the tBTC contract. The msg.sender is required to grant approval for the transfer of a certain amount of tBTC, and in addition, approval for the associated fee. Specifically, the total amount to be approved (amountToApprove) should be equal to the sum of the deposited amount and the fee. To determine the total assets amount necessary for approval corresponding to a given share amount, use the previewMint
function.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | Amount of shares to mint. |
receiver | address | The address to which the shares will be minted. |
Return Values
Name | Type | Description |
---|---|---|
assets | uint256 | Used assets to mint shares. |
withdraw
Withdraws assets from the vault and transfers them to the receiver.
Withdraw unallocated assets first and and if not enough, then pull the assets from the dispatcher.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | Amount of assets to withdraw. |
receiver | address | The address to which the assets will be transferred. |
owner | address | The address of the owner of the shares. |
redeem
Redeems shares for assets and transfers them to the receiver.
Redeem unallocated assets first and and if not enough, then pull the assets from the dispatcher.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | Amount of shares to redeem. |
receiver | address | The address to which the assets will be transferred. |
owner | address | The address of the owner of the shares. |
totalAssets
Returns the total amount of assets held by the vault across all allocations and this contract.
The value contains virtual assets reflecting the debt minted by the debtors. The debt is not backed by the deposited assets, and it is used to adjust the total assets held by the vault, to allow shares and assets conversion calculations.
maxDeposit
Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. If the Vault is paused, returns 0.
maxMint
Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. If the Vault is paused, returns 0.
maxWithdraw
Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. If the Vault is paused, returns 0.
maxRedeem
Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. If the Vault is paused, returns 0.
assetsBalanceOf
Returns the number of assets that corresponds to the amount of shares held by the specified account.
This function is used to convert shares to assets position for the given account. It does not take fees into account.
Parameters
Name | Type | Description |
---|---|---|
account | address | The owner of the shares. |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | The amount of assets. |
previewRepayDebt
Previews the amount of assets that will be burned for the given amount of repaid shares.
_entryFeeBasisPoints
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | Returns entry fee basis point used in deposits. |
_exitFeeBasisPoints
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | Returns exit fee basis point used in withdrawals. |
_feeRecipient
Returns the address of the treasury wallet, where fees should be transferred to.
Last updated