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
oldTreasury
address
Address of the old treasury wallet.
newTreasury
address
Address of the new treasury wallet.
MinimumDepositAmountUpdated
Emitted when deposit parameters are updated.
Parameters
minimumDepositAmount
uint256
New value of the minimum deposit amount.
DispatcherUpdated
Emitted when the dispatcher contract is updated.
Parameters
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
entryFeeBasisPoints
uint256
New value of the fee basis points.
ExitFeeBasisPointsUpdated
Emitted when the exit fee basis points are updated.
Parameters
exitFeeBasisPoints
uint256
New value of the fee basis points.
DebtAllowanceUpdated
Emitted when the maximum debt allowance of the debtor is updated.
Parameters
debtor
address
Address of the debtor.
newAllowance
uint256
Maximum debt allowance of the debtor.
DebtMinted
Emitted when debt is minted.
Parameters
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
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
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
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
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
newTreasury
address
New treasury wallet address.
updateMinimumDepositAmount
Updates minimum deposit amount.
Parameters
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
newDispatcher
contract IDispatcher
Address of the new dispatcher contract.
updateEntryFeeBasisPoints
Update the entry fee basis points.
Parameters
newEntryFeeBasisPoints
uint256
New value of the fee basis points.
updateExitFeeBasisPoints
Update the exit fee basis points.
Parameters
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
spender
address
The address which will spend the funds.
value
uint256
The amount of tokens to be spent.
extraData
bytes
Additional data.
Return Values
[0]
bool
True if both approval and receiveApproval
calls succeeded.
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
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
shares
uint256
The amount of shares to mint.
receiver
address
The receiver of the shares.
Return Values
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
shares
uint256
The amount of shares to return.
Return Values
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
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
[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
shares
uint256
Amount of shares to mint.
receiver
address
The address to which the shares will be minted.
Return Values
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
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
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
account
address
The owner of the shares.
Return Values
[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
[0]
uint256
Returns entry fee basis point used in deposits.
_exitFeeBasisPoints
Return Values
[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