Beanstalk
  • Agronomics Handbook
  • Farmers' Almanac
  • Whitepaper
  • Contract Addresses
  • 🌱Overview
    • Introduction
    • Development Ethos
    • EIP-2535 Diamond
    • App Storage
    • Internal Balances
  • 🌾Protocol
    • Overview
    • Louper
    • Sun
      • Season Facet
    • Silo
      • Silo Facet
      • BDV Facet
      • Whitelist Facet
      • Convert Facet
      • Convert Getters Facet
      • Enroot Facet
      • Approval Facet
      • Metadata Facet
      • Migration Facet
      • Legacy Claim Withdrawal Facet
    • Field
      • Field Facet
      • Fundraiser Facet
    • Barn
      • Fertilizer Facet
      • Unripe Facet
    • Market
      • Marketplace Facet
    • Farm
      • Farm Facet
      • Depot Facet
      • Token Facet
      • Token Support Facet
      • Curve Facet
    • Diamond
      • Diamond Cut Facet
      • Diamond Loupe Facet
      • Ownership Facet
      • Pause Facet
  • 📜Misc.
    • Technical Recordings
    • Upgrade History
    • FAQ
    • Terminology Discrepancies
Powered by GitBook
On this page
  • Call Functions
  • Deposit
  • Withdraw Deposit
  • Withdraw Deposits
  • Transfer Deposit
  • Transfer Deposits
  • Safe Transfer From
  • Safe Batch Transfer From
  • Yield Distribution
  • Mow
  • Mow Multiple
  • Plant
  • Claim Plenty
  • View Functions
  • Utilities
  • Last Update
  • Silo Totals
  • Total Stalk
  • Total Roots
  • Total Earned Beans
  • Silo Account Balances
  • Balance Of Stalk
  • Balance Of Roots
  • Balance Of Grown Stalk
  • Grown Stalk for Deposit
  • Balance Of Earned Beans
  • Balance Of Earned Stalk
  • Balance Of Deposited BDV
  • Get Last Mowed Stem
  • Get Mow Status
  • Season of Plenty (Flood)
  • Last Season Of Plenty
  • Balance Of Plenty
  • Balance Of Rain Roots
  • Balance of SOP
  • Stems
  • Stem Tip for Token
  • Season to Stem
  • Get Seeds per Token
  • Stem Start Season
  • Migration Needed
  • In Vesting Period
  • Getters
  • Get Deposit
  • Get Total Deposited
  • Get Total Deposited BDV
  • Token Settings
  • BDV
  • ERC-1155
  • Balance Of
  • Balance Of Batch
  • Get Deposit ID
  • Events
  • Plant
  • Claim Plenty
  • Stalk Balance Changed
  • Add Deposit
  • Remove Deposit
  • Remove Deposits
  • Transfer Single
  • Transfer Batch
  • Remove Withdrawals
  • Remove Withdrawal
Edit on GitHub
Export as PDF
  1. Protocol
  2. Silo

Silo Facet

Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.

The Silo Facet handles Depositing, Withdrawing, and transferring Deposits (whitelisted assets in the Silo).

Stems keep track of when the Deposit was created. When the Deposit was created determines how much Grown Stalk per BDV the Deposit has.

Call Functions

Deposit

function deposit(
    address token,
    uint256 _amount,
    LibTransfer.From mode
) 
    external 
    payable 
    nonReentrant 
    mowSender(token)
    returns (uint256 amount, uint256 bdv, int96 stem);

Deposits ERC20 token into internal Farmer balances.

Parameter
Type
Description

token

address

Address of the token to Deposit.

_amount

uint256

Amount of the token to be Deposited.

mode

From

Return value
Type
Description

amount

address

Amount of the token Deposited.

bdv

uint256

BDV of the Deposit.

stem

int96

Stem of the Deposit.

Withdraw Deposit

function withdrawDeposit(
    address token,
    int96 stem,
    uint256 amount
    LibTransfer.To mode
) external payable mowSender(token) nonReentrant;

Withdraws a single Deposit.

Parameter
Type
Description

token

address

Address of ERC20 being Withdrawn.

stem

int96

Stem of the Deposit to Withdraw.

amount

uint256

Tokens to be Withdrawn.

mode

To

Withdraw Deposits

function withdrawDeposits(
    address token,
    int96[] calldata stems,
    uint256[] calldata amounts,
    LibTransfer.To mode
) external payable mowSender(token) nonReentrant;

Withdraws multiple Deposits.

Parameter
Type
Description

token

address

Address of ERC20 being Withdrawn.

stems

int96[]

Stems of the Deposits to Withdraw.

amounts

uint256[]

Array of token amounts to Withdraw from corresponding stems.

mode

To

Transfer Deposit

function transferDeposit(
    address sender,
    address recipient,
    address token,
    int96 stem,
    uint256 amount
) public payable nonReentrant returns (uint256 bdv);

Transfers single Farmer's Deposit.

Parameter
Type
Description

sender

address

Source of Deposit.

recipient

address

Destination of Deposit.

token

address

Address of Deposited ERC20 being transferred.

stem

int96

Stem of Deposit to Transfer.

amount

uint256

Amount of tokens to transfer.

Return Value
Type
Description

bdv

uint256

BDV now owned by recipient.

Transfer Deposits

function transferDeposits(
    address sender,
    address recipient,
    address token,
    int96[] calldata stem,
    uint256[] calldata amounts
) public payable nonReentrant returns (uint256[] memory bdvs);

Transfers multiple Farmer Deposits.

Parameter
Type
Description

sender

address

Source of Deposit.

recipient

address

Destination of Deposit.

token

address

Address of ERC20 being transferred.

stem

int96[]

Stems of Deposits to transfer.

amounts

uint256[]

Array of token amounts to transfer based on corresponding stems.

Return Value
Type
Description

bdvs

uint256[]

Array of BDVs of each Deposit transferred.

Safe Transfer From

function safeTransferFrom(
    address sender, 
    address recipient, 
    uint256 depositId, 
    uint256 amount,
    bytes calldata
) external;

Transfer a single Deposit, conforming to the ERC1155 standard.

Parameter
Type
Description

sender

address

Source of Deposit.

recipient

address

Destination of Deposit.

depositId

uint256

ID of Deposit to transfer.

amount

uint256

Amount of ERC1155 to transfer.

Safe Batch Transfer From

function safeBatchTransferFrom(
    address sender, 
    address recipient, 
    uint256[] calldata depositIds, 
    uint256[] calldata amounts, 
    bytes calldata
) external;

Transfer a single Deposit, conforming to the ERC1155 standard.

Parameter
Type
Description

sender

address

Source of Deposit.

recipient

address

Destination of Deposit.

depositIds

uint256[]

Array of IDs of Deposits to transfer.

amounts

uint256[]

Array of amounts of ERC1155 to transfer, corresponding to depositIds.

Yield Distribution

Mow

function mow(address account, address token) external payable;

Claim Grown Stalk for an account for a particular whitelisted asset.

Parameter
Type
Description

account

address

Address to Mow for.

token

address

Address of ERC20 Deposit to Mow for.

Mow Multiple

function mowMultiple(address account, address[] calldata tokens) external payable;

Mow for multiple whitelisted assets for an account.

Parameter
Type
Description

account

address

Address to Mow for.

tokens

address[]

Array of addresses of ERC20 Deposits to Mow for.

Plant

function plant() 
    external payable returns (uint256 beans, int96 stem);

Claim Earned Beans and their associated Stalk and Plantable Seeds for msg.sender.

Return Value
Type
Description

beans

uint256

Amount of Earned Beans given.

stem

int96

Stem of the new Deposit.

Claim Plenty

function claimPlenty() external payable;

Claims rewards from a Flood (Season of Plenty) for msg.sender.

View Functions

Utilities

Last Update

function lastUpdate(address account) public view returns (uint32);

Get the last Season in which account updated their Silo.

Return Type
Description

uint32

Last Season account updated their Silo.

Silo Totals

Total Stalk

function totalStalk() public view returns (uint256);

Returns the total supply of Stalk. Does NOT include Grown Stalk.

Return Type
Description

uint256

Total supply of Stalk.

Total Roots

function totalRoots() public view returns (uint256);

Returns the total supply of Roots.

Return Type
Description

uint256

The total supply of Roots.

Total Earned Beans

function totalEarnedBeans() public view returns (uint256);

Returns the total supply of Earned Beans.

Return Type
Description

uint256

Total supply of Earned Beans.

Silo Account Balances

Balance Of Stalk

function balanceOfStalk(address account) public view returns (uint256);

Returns the balance of Stalk for a particular Farmer. Does NOT include Grown Stalk; does include Earned Stalk.

Parameter
Type
Description

account

address

Farmer to get the Stalk balance for.

Return Type
Description

uint256

Stalk balance of account.

Balance Of Roots

function balanceOfRoots(address account) public view returns (uint256);

Returns the balance of Roots for a particular Farmer.

Parameter
Type
Description

account

address

Farmer to get the Roots balance for.

Return Type
Description

uint256

Roots balance of account.

Balance Of Grown Stalk

function balanceOfGrownStalk(address account, address token)
    public
    view
    returns (uint256);

Returns the balance of Grown Stalk for account. Grown Stalk is earned each Season from BDV and must be Mown to add it to a user's Stalk balance.

Parameter
Type
Description

account

address

Farmer to get the Grown Stalk balance for.

Return Type
Description

uint256

Grown Stalk balance of account.

Grown Stalk for Deposit

function grownStalkForDeposit(
    address account,
    address token,
    int96 stem
)
    public
    view
    returns (uint grownStalk);

Returns the balance of Grown Stalk for a single deposit of token in stem for account.

Parameter
Type
Description

account

address

Farmer that owns the Deposit to get the Grown Stalk balance for.

token

address

ERC20 token address of the Deposit.

stem

int96

Stem of the Deposit.

Return Value
Type
Description

grownStalk

uint

Grown Stalk for Deposit.

Balance Of Earned Beans

function balanceOfEarnedBeans(address account)
    public
    view
    returns (uint256 beans);

Returns the balance of Earned Beans for a Farmer.

Parameter
Type
Description

account

address

Farmer to get the Earned Bean balance for.

Return Value
Type
Description

beans

uint256

Earned Bean balance of account.

Balance Of Earned Stalk

function balanceOfEarnedStalk(address account)
    public
    view
    returns (uint256)

Return the account balance of Earned Stalk, the Stalk associated with Earned Beans.

Parameter
Type
Description

account

address

Farmer to get the Earned Stalk balance for.

Return Type
Description

uint256

Earned Stalk balance of account.

Balance Of Deposited BDV

function balanceOfDepositedBdv(address account, address token)
    external
    view
    returns (uint256 depositedBdv);

Return the balance of Deposited BDV of a whitelisted asset for a given Farmer.

Parameter
Type
Description

account

address

Farmer to get the Deposited BDV balance for.

token

address

Whitelisted asset to get the balance of Deposited BDV for.

Return Value
Type
Description

depositedBdv

uint256

Balance of Deposited BDV given account and token.

Get Last Mowed Stem

function getLastMowedStem(address account, address token)
    external
    view
    returns (int96 lastStem);

Return the Stem at the time that a Farmer last Mowed a particular whitelisted asset.

Parameter
Type
Description

account

address

Farmer to get the last Mowed Stem for.

token

address

Whitelisted asset to get the last Mowed Stem for.

Return Value
Description

lastStem

int96

Last Mowed Stem for token given account.

Get Mow Status

function getMowStatus(address account, address token)
    external
    view
    returns (Account.MowStatus memory mowStatus);

Return the Mow Status struct of token for a given account.

Parameter
Type
Description

account

address

Farmer to get the Mow Status of.

token

address

Token to get the Mow Status of account for.

Type

Account.MowStatus

Season of Plenty (Flood)

Last Season Of Plenty

function lastSeasonOfPlenty() public view returns (uint32);

Returns the last Season that a Season of Plenty started.

Return Value
Description

uint32

The last Season it started Flooding.

Balance Of Plenty

function balanceOfPlenty(address account)
    public
    view
    returns (uint256 plenty);

Returns the Farmer's balance of unclaimed 3CRV earned from the Season of Plenty.

Parameter
Type
Description

account

address

Farmer to get the unclaimed 3CRV balance for.

Return Value
Type
Description

plenty

uint256

Unclaimed 3CRV balance of account.

Balance Of Rain Roots

function balanceOfRainRoots(address account) public view returns (uint256);

Returns the account balance of Roots the last time it was Raining during a Silo update.

Parameter
Type
Description

account

address

Farmer to get "Rain Roots" balance for.

Return Value
Description

uint256

Root balance last time it was Raining for account.

Balance of SOP

function balanceOfSop(address account)
    external
    view
    returns (AccountSeasonOfPlenty memory sop);

Returns the account Season of Plenty related state variables.

Parameter
Type
Description

account

address

Farmer to get SOP related state variables for.

Return Value
Type
Description

sop

AccountSeasonOfPlenty

Struct containing SOP related state variables.

Stems

Stem Tip for Token

function stemTipForToken(address token)
    public
    view
    returns (int96 _stemTip);

Returns the "stemTip", or cumulative Grown Stalk Per BDV of a given Deposited asset since whitelist, for a given whitelisted token.

Parameter
Type
Description

token

address

ERC20 token to get the Stem tip for.

Return Value
Type
Description

_stemTip

int96

Returns the Stem tip for token.

Season to Stem

function seasonToStem(address token, uint32 season)
    public
    view
    returns (int96 stem);

Get the Stem associated with a particular Deposit (via its token and Season). Kept for legacy reasons.

Parameter
Type
Description

token

address

ERC20 token of the Deposit.

season

uint32

Season of the Deposit.

Return Value
Type
Description

stem

int96

Stem of the Deposit.

Get Seeds per Token

function getSeedsPerToken(address token) public view virtual returns (uint256);

Gets the Seeds per token for legacy whitelisted assets. Calling with an non-legacy token will return 0, even after the token is whitelisted. Kept for legacy reasons.

Parameter
Type
Description

token

address

Legacy token to get the Seeds for.

Return Type
Description

uint256

Seeds for the legacy token.

Stem Start Season

function stemStartSeason() public view virtual returns (uint16);

Returns the Season in which Beanstalk initialized Silo V3, i.e., the Season in which Stems were initialized.

Return Type
Description

uint16

Season in which Stems were initialized.

Migration Needed

function migrationNeeded(address account) public view returns (bool);

Returns whether or not a Farmer needs to migrate to Silo V3.

Parameter
Type
Description

account

address

Farmer to check if migration is needed for.

Return Type
Description

bool

Whether or not account needs to migrate to Silo V3.

In Vesting Period

function inVestingPeriod() public view returns (bool);

Returns if Earned Beans from the previous gm call are still vesting. Vesting Earned Beans cannot be received via plant until the Vesting Period is over, and will be forfeited if a Farmer Withdraws during the Vesting Period.

Return Type
Description

bool

Whether or not Earned Beans from the previous gm function call are still vesting.

Getters

Get Deposit

function getDeposit(
    address account,
    address token,
    int96 stem
) external view returns (uint256, uint256)

Find the amount and BDV of token that a Farmer has Deposited in a given Stem.

Parameter
Type
Description

account

address

Farmer to get Deposit data for.

token

address

ERC20 token of the Deposit.

stem

int96

Stem of the Deposit.

Return Value
Description

uint256

Number of tokens in the Deposit.

uint256

BDV of the Deposit.

Get Total Deposited

function getTotalDeposited(address token) external view returns (uint256);

Get the total amount of token currently Deposited in the Silo across all Farmers.

Parameter
Type
Description

token

address

Whitelisted token address.

Return Type
Description

uint256

Total number of token Deposited in the Silo.

Get Total Deposited BDV

function getTotalDepositedBdv(address token) external view returns (uint256);

Get the total BDV of token currently Deposited in the Silo across all Farmers.

Parameter
Type
Description

token

address

Whitelisted token address.

Return Type
Description

uint256

Total BDV of token Deposited in the Silo.

Token Settings

function tokenSettings(address token)
    external
    view
    returns (Storage.SiloSettings memory);

Get the Storage.SiloSettings for a whitelisted token.

Parameter
Type
Description

token

address

Whitelisted token address.

Return Type
Description

Storage.SiloSettings

Struct with Silo variables for token.

BDV

function bdv(address token, uint256 amount)
    external
    view
    returns (uint256 _bdv);

Returns the total BDV of a number of tokens on the Deposit Whitelist.

Parameter
Type
Description

token

address

The whitelisted token address.

amount

uint256

The number of tokens.

Type

uint256

ERC-1155

Balance Of

function balanceOf(
    address account, 
    uint256 depositId
) external view returns (uint256 amount);

Gets the amount of tokens in a Deposit type for a given Farmer.

Parameter
Type
Description

account

address

Farmer to get Deposit amount for.

depositId

uint256

Deposit ID corresponding to account.

Return Type
Description

amount

Amount of tokens in a Deposit type for account.

Balance Of Batch

function balanceOfBatch(
    address[] calldata accounts, 
    uint256[] calldata depositIds
) external view returns (uint256[] memory);

Gets an array of amounts corresponding to Deposits.

Parameter
Type
Description

accounts

address[]

List of Farmers.

depositIds

uint256[]

List of Deposit IDs corresponding to accounts.

Return Type
Description

uint256[]

Array of amounts corresponding to the list of Deposits.

Get Deposit ID

function getDepositId(
    address token, 
    int96 stem
) external pure returns (uint256);

Gets the Deposit ID given an whitelisted token address and Stem.

Parameter
Type
Description

token

address

Whitelisted token address.

stem

int96

Stem of the Deposit.

Return Type
Description

uint256

Deposit ID of token with stem.

Events

Plant

event Plant(
    address indexed account,
    uint256 beans
);

Emitted when the deposit associated with the Earned Beans of account are Planted.

Parameter
Type
Description

account

address

Farmer that Planted their Earned Beans.

beans

uint256

The amount of Earned Beans claimed.

Claim Plenty

event ClaimPlenty(
    address indexed account,
    uint256 plenty
);

Emitted when 3CRV paid to account during a Flood is claimed.

Parameter
Type
Description

account

address

Farmer that claimed the assets.

plenty

uint256

The amount of 3CRV claimed by account.

Stalk Balance Changed

event StalkBalanceChanged(
    address indexed account,
    int256 delta,
    int256 deltaRoots
);

Emitted when account gains or loses Stalk.

Parameter
Type
Description

account

address

The Farmer whose Stalk balance changed.

delta

int256

The change in Stalk.

deltaRoots

int256

The change in Roots.

Add Deposit

event AddDeposit(
    address indexed account,
    address indexed token,
    int96 stem,
    uint256 amount,
    uint256 bdv
);

Emitted when account adds a single Deposit to the Silo. There is no AddDeposits event because there is currently no operation in which Beanstalk creates multiple Deposits in different Stems.

Parameter
Type
Description

account

address

The Farmer that added a Deposit to Beanstalk.

token

address

Whitelisted token address.

stem

int96

The Stem of the Deposit.

amount

uint256

Token amount of the Deposit.

bdv

uint256

The BDV associated with amount of token at the time of Deposit.

Remove Deposit

event RemoveDeposit(
    address indexed account,
    address indexed token,
    int96 stem,
    uint256 amount,
    uint256 bdv
);

Emitted when account removes a single Deposit from the Silo. Occurs during Withdraw and Convert.

Parameter
Type
Description

account

address

The Farmer whose Deposit was removed.

token

address

Whitelisted token address.

stem

int96

The Stem of the Deposit.

amount

uint256

The token amount of the Deposit.

bdv

uint256

The BDV associated with the Deposit.

Remove Deposits

event RemoveDeposits(
    address indexed account,
    address indexed token,
    int96[] stems,
    uint256[] amounts,
    uint256 amount,
    uint256[] bdvs
);

Emitted when account removes multiple Deposits from the Silo. Occurs during Withdraw and Convert.

Parameter
Type
Description

account

address

The Farmer whose Deposit was removed.

token

address

Whitelisted token address.

stems

uint32[]

Stems of the Deposits.

amounts

uint256[]

The token amounts of the Deposits, corresponding to stems.

amount

uint256

Sum of amounts.

bdvs

uint256[]

The BDVs associated with the Deposits, corresponding to stems and amounts.

Transfer Single

event TransferSingle(
    address indexed operator,
    address indexed from,
    address indexed to,
    uint256 id,
    uint256 value
);

ERC-1155 event. Emitted when a Deposit is created, removed, or transferred.

Parameter
Type
Description

operator

address

The address that performed the operation.

from

address

The address the Deposit is being transferred from.

to

address

The address the Deposit is being transferred to.

id

uint256

The Deposit ID of the Deposit.

value

uint256

The amount of the Deposit.

Transfer Batch

event TransferBatch(
    address indexed operator,
    address indexed from,
    address indexed to,
    uint256[] ids,
    uint256[] values
);

ERC-1155 event. Emitted when multiple deposits are withdrawn or transferred.

Parameter
Type
Description

operator

address

The address that performed the operation.

from

address

The address the Deposit is being transferred from.

to

address

The address the Deposit is being transferred to.

ids

uint256[]

The Deposit IDs of the Deposits.

values

uint256[]

The amounts of the Deposits.

Remove Withdrawals

event RemoveWithdrawals(
    address indexed account,
    address indexed token,
    uint32[] seasons,
    uint256 amount
);

Legacy event. This event is kept for backwards compatibility in order for the ABI to generate properly.

Parameter
Type
Description

account

address

Farmer that claimed the Withdrawals.

token

address

Whitelisted token address.

seasons

uint32[]

Seasons of claimed Withdrawn assets.

amount

uint256

Amount of claimed asset.

Remove Withdrawal

event RemoveWithdrawal(
    address indexed account,
    address indexed token,
    uint32 season,
    uint256 amount
);

Legacy event. This event is kept for backwards compatibility in order for the ABI to generate properly.

Parameter
Type
Description

account

address

Farmer that claimed the Withdrawal.

token

address

Whitelisted token address.

season

uint32

Seasons of claimed Withdrawn asset.

amount

uint256

Amount of claimed asset.

PreviousSiloNextBDV Facet

Last updated 8 months ago

The balance to transfer the token from; see .

The balance to transfer the token to; see .

The balance to transfer the token to; see .

🌾
LibTransfer.From
LibTransfer.To
LibTransfer.To