Skip to main content

FundsHandlerFacet

View Source: contracts/protocol/facets/FundsHandlerFacet.sol

↗ Extends: IBosonFundsHandler, ProtocolBase

FundsHandlerFacet

Handles custody and withdrawal of buyer and seller funds.

Functions

initialize

Facet Initializer
This function is callable only once.

function initialize() 
public
onlyUnInitialized

depositFunds

Receives funds from the caller, maps funds to the seller id and stores them so they can be used during the commitToOffer.
Emits FundsDeposited event if successful.
Reverts if:
- The funds region of protocol is paused
- Seller id does not exist
- It receives some native currency (e.g. ETH), but token address is not zero
- It receives some native currency (e.g. ETH), and the amount does not match msg.value
- Contract at token address does not support ERC20 function transferFrom
- Calling transferFrom on token fails for some reason (e.g. protocol is not approved to transfer)
- Received ERC20 token amount differs from the expected value

function depositFunds(uint256 _sellerId,
address _tokenAddress,
uint256 _amount)
external
payablefundsNotPaused nonReentrant

Arguments

NameTypeDescription
_sellerIduint256id of the seller that will be credited
_tokenAddressaddresscontract address of token that is being deposited (0 for native currency)
_amountuint256amount to be credited

withdrawFunds

Withdraws the specified funds. Can be called for seller, buyer or agent.
Emits FundsWithdrawn event if successful.
Reverts if:
- The funds region of protocol is paused
- Caller is not associated with the entity id
- Token list length does not match amount list length
- Token list length exceeds the maximum allowed number of tokens
- Caller tries to withdraw more that they have in available funds
- There is nothing to withdraw
- Transfer of funds is not successful

function withdrawFunds(uint256 _entityId,
address[] _tokenList,
uint256[] _tokenAmounts)
external
fundsNotPaused nonReentrant

Arguments

NameTypeDescription
_entityIduint256id of entity for which funds should be withdrawn
_tokenListaddress[]list of contract addresses of tokens that are being withdrawn
_tokenAmountsuint256[]list of amounts to be withdrawn, corresponding to tokens in tokenList

withdrawProtocolFees

Withdraws the protocol fees.Can only be called by the FEE_COLLECTOR role.
Emits FundsWithdrawn event if successful.
Reverts if:
- The funds region of protocol is paused
- Caller does not have the FEE_COLLECTOR role
- Token list length does not match amount list length
- Token list length exceeds the maximum allowed number of tokens
- Caller tries to withdraw more that they have in available funds
- There is nothing to withdraw
- Transfer of funds is not successful

function withdrawProtocolFees(address[] _tokenList,
uint256[] _tokenAmounts)
external
fundsNotPaused onlyRole nonReentrant

Arguments

NameTypeDescription
_tokenListaddress[]list of contract addresses of tokens that are being withdrawn
_tokenAmountsuint256[]list of amounts to be withdrawn, corresponding to tokens in tokenList

getAvailableFunds

Returns the information about the funds that an entity can use as a sellerDeposit and/or withdraw from the protocol.

function getAvailableFunds(uint256 _entityId) 
external
view
returns(BosonTypes.Funds[] memory availableFunds)

Arguments

NameTypeDescription
_entityIduint256id of entity for which availability of funds should be checked

Returns

NameTypeDescription
availableFundsBosonTypes.Funds[]list of token addresses, token names and amount that can be used as a seller deposit or be withdrawn

withdrawFundsInternal

Withdraws the specified funds.
Emits FundsWithdrawn event if successful.
Reverts if:
- Caller is not associated with the entity id
- Token list length does not match amount list length
- Token list length exceeds the maximum allowed number of tokens
- Caller tries to withdraw more that they have in available funds
- There is nothing to withdraw
- Transfer of funds is not successful

function withdrawFundsInternal(address payable _destinationAddress,
uint256 _entityId,
address[] _tokenList,
uint256[] _tokenAmounts)
internal

Arguments

NameTypeDescription
_destinationAddressaddress payablewallet that will receive funds
_entityIduint256entity id
_tokenListaddress[]list of contract addresses of tokens that are being withdrawn
_tokenAmountsuint256[]list of amounts to be withdrawn, corresponding to tokens in tokenList