Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
Beanstalk can be broken down into 7 different Modules consisting of 25 Facets:
Sun (1 Facet)
Silo (10 Facets)
Field (2 Facets)
Barn (2 Facets)
Market (1 Facet)
Farm (5 Facets)
Diamond (4 Facets)
The Sun handles moving time forward in Beanstalk. It advances Beanstalk to the next Season.
The Sun consists of 1 Facet:
SeasonFacet
-> Contains the gm
function.
The Silo offers a passive yield opportunity in the form of Bean seigniorage to Farmers who Deposit Beans and other whitelisted assets. Upon Deposit in the Silo, Farmers receive Stalk and Seeds based on the Bean Denominated Value (BDV) Deposited and the asset Deposited.
The Silo consists of 10 Facets:
SiloFacet
-> Where Farmers Deposit, Withdraw, Claim and Transfer assets in/from the Silo.
BDVFacet
-> Handles logic for retrieving the BDV of some amount of a whitelisted asset.
WhitelistFacet
-> Handles the addition and removal of tokens from the Deposit Whitelist.
ConvertFacet
-> Where Farmers Convert a Deposit of a whitelisted asset to a Deposit of another whitelisted asset.
ConvertGettersFacet
-> Contains view functions for Convert data.
EnrootFacet
-> Where Farmers Enroot their Unripe Deposits.
ApprovalFacet
-> Contains logic for Deposit approvals and permits.
MetadataFacet
-> Contains on-chain metadata for the Deposit ERC-1155 tokens.
MigrationFacet
-> Where Farmers migrate to the latest Silo accounting system.
LegacyClaimWithdrawalFacet
-> Facilitates backwards compatibility for Farmers with unclaimed Withdrawals before the Silo V3 upgrade.
The Field is Beanstalk's native credit facility. Anytime Beanstalk is willing to borrow Beans from the market, it issues Soil in the Field. Beans are Sown in exchange for Pods, the Beanstalk-native debt asset. Loans to Beanstalk are issued with a fixed interest rate, known as the Temperature, and an unknown maturity date.
Pods become Harvestable Pods that can be Harvested (redeemed) for 1 Bean each on a First In, First Out (FIFO) basis. There is no penalty for waiting to Harvest Pods.
The Field consists of 2 Facets:
FieldFacet
-> Where Farmers Sow Beans into Pods and Harvest Pods into Beans.
FundraiserFacet
-> Where Farmers create and fund Fundraisers through Sowing non-Bean assets into Pods.
The Barn was built after Beanstalk was exploited on April 17, 2022. The Barn distributes Bean rewards to those who hold Fertilizer tokens from participation in the Barn Raise. It also handles the Chopping of Unripe Beans and Unripe LP into their underlying assets at a potential penalty.
In the Beanstalk ecosystem,
Unfertilized Beans are referred to as Sprouts;
Fertilized Beans are referred to as Rinsable Sprouts that can be Rinsed; and
Underlying assets are referred to as Ripe assets.
Unfertilized Beans become Fertilized Beans that can be claimed (redeemed) for 1 Bean each on a pari passu basis. There is no penalty for waiting to claim Fertilized Beans.
The Barn consists of 2 Facets:
FertilizerFacet
-> Where Farmers buy Fertilizer with USDC and claim Beans earned from Fertilizer.
UnripeFacet
-> Allows Farmers to Chop Unripe assets into their underlying assets at a potential penalty.
The Market houses various DEXs for zero fee trading. Currently only Pods can be traded on the Market.
Pods can be bought and sold in a decentralized, trustless fashion on the Pod Market. The Pod Market creates liquidity for Pods through an on-chain order book.
Sellers can List Pods or Fill open Pod Orders placed by buyers. Buyers can Order Pods or Fill open Pod Listings placed by sellers.
The Market consists of 1 Facet:
MarketplaceFacet
-> Contains the Pod Market where Farmers create, Fill and Cancel Pod Listings and Orders, as well as transfer Pods.
The Farm allows Farmers to call multiple functions in a single transaction and use assets between different function in a composable manner, without those assets every leaving Beanstalk (thanks to Internal Balances).
The Farm consists of 5 Facets:
FarmFacet
-> Contains the farm
function, which allows Farmers to call a series of functions together within Beanstalk.
DepotFacet
-> Wraps the standalone Pipeline contract, providing access to Pipeline from Beanstalk through the use of the farm
function.
TokenFacet
-> Supports transferring assets between Internal and External Balances and between different accounts. Also supports Wrap/Unwrap logic for ETH.
TokenSupportFacet
-> Handles token permits.
CurveFacet
-> Provides an interface to exchange and add/remove liquidity on Curve directly through Beanstalk.
The Diamond Module controls and manages the Beanstalk contract by providing functionality to upgrade and view supported functions in Beanstalk. It also controls which address owns the Beanstalk contract.
The Diamond Module consists of 4 Facets:
DiamondCutFacet
-> Provides functionality for the owner to add/remove/replace functions within the Beanstalk contract.
DiamondLoupeFacet
-> Allows anyone to see the available functions within Beanstalk.
OwnershipFacet
-> Manages which address owns Beanstalk.
PauseFacet
-> Allows the owner of Beanstalk to Pause/Unpause Beanstalk.
Beanstalk uses an Internal Balances system largely inspired by Balancer's Vault. With Internal Balances, Beanstalk is able to store an any ERC-20 token on behalf of a user. Beanstalk stores that the user has that ERC-20 token in AppStorage
. All functions within Beanstalk that either use a user's ERC-20 tokens or send ERC-20 tokens to a user can send/receive the ERC-20 tokens from the user's Internal Balance and/or External Balance (the user's wallet).
Internal Balances can significantly reduce transaction costs for using tokens that remain in Beanstalk. As more protocols utilize Internal Balances, the gas savings can compound.
In the Beanstalk ecosystem, Internal Balances are referred to as Farm Balances. Similarly, External Balances (balances in the user's wallet) are referred to as Circulating Balances. See Terminology Discrepancies.
LibTransfer
uses the following structs in order to denote the location(s) from which tokens will be used in a function.
EXTERNAL
: Beanstalk will receive tokens from the user's External Balance;
INTERNAL
: Beanstalk will receive tokens from the user's Internal Balance;
EXTERNAL_INTERNAL
: Beanstalk will receive tokens from the user's Internal Balance and will receive from their External Balance if there is not enough in the Internal Balance; and
INTERNAL_TOLERANT
: Beanstalk will receive tokens from the user's Internal Balance and will not fail if there is not enough in their Internal Balance.
EXTERNAL
Beanstalk will send tokens to the user's External Balance; and
INTERNAL
Beanstalk will send tokens to the user's Internal Balance.
At any time, a user can transfer, add or remove ERC-20 tokens from their Internal Balance through the transferToken
function in the TokenFacet
. transferToken
is a general transfer method that allows full control of the tokens start/end location (i.e internal to internal, internal to external, external to internal, external to external).
A function that sends ERC-20 tokens to users can implement Internal Balances by adding the To
enum in LibTransfer
to a function's signature.
Then call sendToken
in LibTransfer
instead of directly calling the ERC-20 function transferFrom
.
A function that receives ERC-20 tokens from users can implement Internal Balances by adding the From
enum in LibTransfer
to a function's signature.
Then call receiveToken
in LibTransfer
instead of directly calling the ERC-20 function transfer
.
For protocols that are building on top of Beanstalk and want to interact with Internal Balances, they can utilize the functions given in TokenFacet
, rather than the library itself.
The Beanstalk contract is a Diamond – a multi-facet proxy defined in EIP-2535 that can implement functionality from numerous different Facet contracts.
All the Facets share a common storage through the AppStorage
pattern. Functionality is shared between Facets through internal Libraries.
Understanding EIP-2535 really helps to understand Beanstalk. This page serves as a resource hub for EIP-2535.
Beanstalk is a permissionless fiat stablecoin protocol built on Arbitrum.
Beanstalk forms the monetary basis of an Arbitrum-native, rent-free economy facilitated by the seigniorage of its native fiat currency, a stablecoin called Bean.
Beanstalk's primary objective is to incentivize independent market participants to regularly cross the price of 1 Bean across its value peg of $1 in a sustainable fashion. The stability of the Bean price relative to its value peg is a function of the creditworthiness of Beanstalk—Beanstalk attracts lenders when the price of a Bean is below its value peg to remove Beans from the supply and increase their price.
When the Bean price is too high, Beanstalk mints new Beans and distributes them to various ecosystem participants in a deterministic fashion. This inflation is the positive carry that the Beanstalk economy is based on.
Beanstalk implements several novel mechanisms including a first-in-first-out (FIFO) debt model supplemented by an on-chain order book, a time-weighted staking structure that increases the opportunity cost of withdrawing the longer an asset stays deposited in the DAO and a convert mechanism that allows participants to perform peg maintenance while those assets are staked.
Beanstalk strives to create product market fit on both a technical and economic level. In order to service an entire ecosystem, Beanstalk needs to provide a cheap, composable and interoperable interface. However, as protocols become more sophisticated and blockspace more crowded, smart contract architecture complexity can quickly become overwhelming.
Beanstalk pioneers a path forward for devising more efficient and complex systems. Beanstalk is implemented in Solidity v0.8.20 for intended use in the EVM. Beanstalk leverages EIP-2535 to minimize gas costs and complexity.
Beanstalk consists of 2 main contracts:
Beanstalk - The protocol responsible for peg maintenance implemented as an EIP-2535 multi-facet proxy.
Bean – The stablecoin implemented as an ERC-20 token.
Beanstalk is deployed at 0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70
.
Bean is deployed at 0xBEA0005B8599265D41256905A9B3073D397812E4
.
All relevant contract addresses can be found on the Contracts page of the Farmers' Almanac.
Because Beanstalk is a single contract, all of the Facets can share a common state through the AppStorage
pattern.
Each Facet should define the AppStorage
storage variable in the base contract and define no other internal
or public
state variables.
The AppStorage
struct can be found in the AppStorage.sol
file.
When adding new state variables, always add them to the end of the AppStorage
struct to ensure consistent mapping of state variables to storage slots. When deprecating an unnecessary state variables, either replace it with a different variable denoting that the state variable is deprecated or leave it as is.
In the EVM, data is accessed 32 bytes at a time (known as a slot). Because of this, in Beanstalk, many state variables are packed within the AppStorage
struct to reduce gas costs. For example, say that in function foo
, the state of 2 uint256
values is changed. Changing a non-zero value to another non-zero value costs 10000 gas (2 * 5000
). If the 2 values could be stored in uint128
s instead (meaning the data is in one slot), 2100 gas is shaved off, as the state slot is now warm. (If a slot is touched for the first time in a transaction, it is turned from cold to warm for the rest of that transaction. Warm touches are cheaper than cold touches.)
Decentralized blockchains like Ethereum impose extreme computational and storage limitations. While centralized computation solutions allow the execution of advanced statistical models on gigabytes of data, decentralized systems force users to pay for every byte stored and basic arithmetic operation performed on-chain.
Decentralized systems will scale infinitely over time, eventually allowing users to perform large scale machine learning operations on decentralized architectures. However, it's imperative to start building, experimenting with and iterating on the financial primitives that will define the foundations of permissionless ecosystems. Otherwise, it is likely that they will merely mimic those of the centralized world. Beanstalk is an attempt at implementing a permissionless fiat currency designed to become the basis of the rent-free economy that decentralized primitives are ushering in.
“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” – Antoine de Saint-Exupéry
No one wants to be limited, but resource scarcity forces innovation. For example, because Ethereum does not lend itself to trading on order books, Automated Market Makers (AMMs) like Uniswap and Bancor created liquidity pools based on a predefined pricing curve to create an efficient exchange format (instead of a high frequency order book).
AMMs are still being iterated and innovated on. Uniswap created an order book/AMM hybrid with Uniswap V3. Curve implemented capital efficient pricing curves. Bancor built an omnipool, providing impermanent loss protection. Basin supports a 0% (customizable) fee AMM.
Open source protocols are a public good. More than 250 protocols have forked Uniswap V2 to try to improve on its model. Some may call it competitive, but it is also collaborative. Each implementation is more advanced than its previous iteration and is made possible through increasingly efficient allocation of EVM resources.
Question everything, be critical, and collaborate.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
Farmers can Deposit assets on the Deposit Whitelist into the Silo in exchange for Stalk and Seeds. The number of Stalk and Seeds received is dependent on the BDV at the time of Deposit, the Stalk per BDV and the Seeds per BDV. Stalk entitles Farmers to a pro-rata portion of Bean seignorage distributed to the Silo and Seeds grown into 0.0001 Stalk each Season.
A Farmer can Withdraw at any time, but must forfeit all Stalk and Seeds associated with the Deposit. All Withdrawals are subject to an unlock period (currently set to the remainder of the current Season). Once a Withdraw is complete, it can be Claimed at any time.
Farmers can also convert a Deposited asset into a different one via the Convert function if the ability to convert between those two assets is on the Convert Whitelist. Each Convert type must be approved via governance and the Convert functionality must be added to LibConvert
.
Assets can only be Deposited into the Silo if the assets are on the Deposit Whitelist. A token is considered on the Deposit Whitelist if it has a non-zero Silo Settings in Beanstalk’s storage. Silo Settings for each asset on the Deposit Whitelist are stored in the s.ss
mapping in AppStorage
defined as:
The key used in the mapping is the ERC-20 token address.
selector
is a function selector that calculates the BDV of a given amount
of the token. selector
should be an encoded external view
function added to the Beanstalk diamond. BDV is represented with 6 decimal places.
seeds
is the number of Seeds per BDV that a Farmer receives for Depositing this asset. For example, seeds
is 2 for Bean and 4 for BEAN:3CRV LP tokens.
stalk
is the number of Stalk per BDV that a Farmer receives for Depositing this asset. Because Stalk has 10 decimals compared to the 6 that BDV has, 10,000 equals 1. stalk
is 10,000 for both Bean and BEAN:3CRV LP tokens.
Tokens can be added to the Deposit Whitelist via BIP. In order to Whitelist a token, an address, BDV function selector, Stalk per BDV and Seeds per BDV must be included in the proposal. The BDV function selector must either already be added to Beanstalk or be added as a part of the BIP.
Similarly, tokens can be Dewhitelisted (removed from the Deposit Whitelist) via BIP.
All Deposited assets are valued based on the Bean Denominated Value (BDV) at the time Deposit. Each asset on the Deposit Whitelist has a unique BDV function in the BDVFacet
to calculate the BDV of a given amount of the asset.
Stalk entitles the Farmer to a pro rata portion of at least 1/3 of Bean mints and 1 Stalk is 1 vote in Governance. Beans mints allocated to the Silo are called Earned Beans. Farmers also receive 1 Earned Stalk and 2 Earned Seeds for each Earned Bean.
Each Seed grows 0.0001 Stalk every Season. Stalk grown from Seeds is called Grown Stalk.
There are 3 types of Stalk:
Stalk -> Stalk stored in a Farmer’s account storage. Stalk is acquired by Depositing, Converting, Updating or Planting.
Earned Stalk -> A Farmer receives 1 Earned Stalk for each Earned Bean. Earned Stalk automatically compounds and receives a portion of Bean mints. Earned Stalk is claimed as part of the plant
function, which turns it into Stalk. Because it is considered active, Earned Stalk has already been minted and it is included in the totalStalk
and balanceOfStalk
counts. To the Farmer, Earned Stalk is no different from Stalk and just serves as an indicator of how much Stalk has been earned through Bean seignorage since the last plant
call.
Grown Stalk -> 0.0001 Grown Stalk is grown from every Seed each Season. Grown Stalk is not considered active and thus does not receive a pro rata portion of Bean mints. It is claimed via the update
function in Beanstalk, which turns it into Stalk. Because Grown Stalk is not active, Stalk isn’t minted until Grown Stalk is updated and thus Grown Stalk is not included in the totalStalk
and balanceOfStalk
counts.
In the Beanstalk ecosystem, Update (i.e., updating Grown Stalk) is referred to as Mow (i.e., Mowing Grown Stalk). See Terminology Discrepancies.
There are 2 types of Seeds:
Seeds → Seeds stored in a Farmer’s account storage. Seeds are acquired by Depositing, Planting and in certain cases, Converting.
Earned Seeds → A Farmer receives 2 Earned Seeds for each Earned Bean. Earned Seeds are not active. Earned Seeds can be claimed via the plant
function, which turns them into Seeds. Because Earned Seeds are not active, they are not included in the totalSeeds
or balanceOfSeeds
function.
In the Beanstalk ecosystem, Earned Seeds are referred to as Plantable Seeds. See Terminology Discrepancies.
Farmers can deposit Whitelisted ERC-20 tokens in the Silo in exchange for Stalk and Seeds via the deposit
function. deposit
first calls the BDV function selector stored in Storage to calculate the BDV of the Deposit. It then distributes Stalk and Seeds to the Farmer based on the Stalk per BDV and Seeds per BDV.
A Deposit is stored in the current Season to record at what Season the Seeds associated with the Deposit started accruing Grown Stalk. The total Seeds and Stalk associated with a Deposit can be calculated as:
Deposits are stored in the Account storage as:
The mapping is from token address to Season to Deposit.
amount
is the amount of tokens in the Deposit. A Farmer can Withdraw up to amount
.
bdv
is the BDV of the amount of tokens at the time of Deposit.
Farmers can Withdraw any Deposit via the withdrawDeposit
or withdrawDeposits
functions. When a Farmer Withdraws, they specific the token, the Season(s) of the Deposit(s) and the corresponding amount(s) to Withdraw.
In order to Withdraw a Deposit, a Farmer must burn all of the Stalk and Seeds associated with the Deposit.
A Withdraw is locked for a certain number of Seasons. This number is stored in s.season.withdrawSeasons
. This number is equal to the # of full Seasons required for Withdraw plus 1. The plus 1 accounts for the partial Season that Farmer Withdraws in.
The Season of a Withdrawal is equal to the Season at which the Withdrawal can be Claimed (Not the Season that the Withdrawal is initiated).
A Withdraw is in the following mapping:
The mapping is from token address to Season to amount.
Farmers can Claim Withdrawals that have been unlocked via the claimWithdrawal
and claimWithdrawals
functions. A Withdrawal is Claimable if the current Season is greater than or equal to the Season of the Withdrawal. A Withdrawal is Claimed by specifying the token and Season(s) of the Withdrawals to Claim. When a Withdrawals is Claimed, the Withdrawal is deleted and the Farmer receives the corresponding amount of the underlying token.
Farmers can Convert one asset on the Deposit Whitelist (Token A) to another asset on the Deposit Whitelist (Token B) if Converting from Token A to Token B is on the Convert Whitelist. convert
takes in a convertData
payload that stores the encoded Convert data payload. Convert data is encoded so that different Convert types can have different parameters as necessary. However, each Convert type must specify at least the Convert type and the amount to Convert. Farmers must also specify the Season(s) of Deposits and corresponding amounts to Convert.
Convert does 3 main actions:
Converts some amount of Token A to Token B via LibConvert
;
Removes Deposits of Token A equal to the amount of Token A that was Converted; and
Adds a Deposit of Token B equal to the amount received in Convert.
Convert uses the maximum of the BDV of Token A and Token B so that BDV is never lost. Thus, the Farmer won’t lose any Stalk during Convert, but may still gain Stalk depending the BDV of Token B. Seeds can be gained or lost depending on the Seeds per BDV of Token B versus Token A.
Grown Stalk is preserved during Convert and the Season that Converted assets are Deposited into is depending on the number of Grown Stalk:
Converts may have a maximize amount that can be converted from Token A to Token B. For instance, Deposited Beans can only be converted into Deposited BEAN:3CRV LP tokens if the price in the BEAN:3CRV pool is greater than $1 after the Convert. This can be retrieved via the getMaxAmountIn
function.
The getAmountOut
function returns the expected output amount of a given Convert.
New Converts can be approved via adding new Convert types to LibConvertData
and adding the Convert case to LibConvert
.
The Agronomics Handbook is a collection of technical documentation about Beanstalk.
Beanstalk forms the monetary basis of an Arbitrum-native, rent-free economy facilitated by the seigniorage of its native fiat currency, a stablecoin called Bean.
Beanstalk strives to create product market fit on both a technical and economic level.
Beanstalk pioneers a path forward for devising more efficient and complex systems. Beanstalk is implemented in Solidity v0.8.20 for intended use in the EVM. Beanstalk leverages EIP-2535 to minimize gas costs and complexity.
The contract code can be found below. Beanstalk is deployed at 0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70
.
If you are looking for non-technical documentation about Beanstalk, check out the Farmers' Almanac.
If you are looking for comprehensive formulas behind Beanstalk's mechanics, check out the Beanstalk whitepaper.
If you have any other questions while browsing the Agronomics Handbook, join the Beanstalk Discord and ask in the (#🪵・development) channel!
Please share any feedback on the Agronomics Handbook in the (#📜・docs-feedback) channel in Discord and stay tuned for updates in (#📜・docs-updates). You can submit a pull request to the Agronomics Handbook yourself here.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Convert Facet handles Conversions between assets in the Silo and Enrooting Unripe Deposits.
Convert allows a user to Convert from one Deposited asset to another, given that the Conversion is on the Convert Whitelist. For example, a Farmer can Convert LP into Bean only when the Bean price is below peg, and vice versa. Read more about .
None.
Emitted upon each Conversion.
Emitted when account
removes a single Deposit from the Silo. Occurs during Withdraw and Convert.
Emitted when account
removes multiple Deposits from the Silo. Occurs during Withdraw and Convert.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Season Facet contains the gm
function and handles all logic for Season changes.
Advances Beanstalk to the next Season, sending reward Beans to the caller's Circulating balance.
Advances Beanstalk to the next Season, sending reward Beans to a specified address and balance.
Returns the current Season number.
Returns whether Beanstalk is Paused. When Paused, sunrise
cannot be called.
Returns the Season struct.
Returns whether Beanstalk started this Season above or below peg.
Returns the block during which the current Season started.
Returns the expected Season number given the current block timestamp. The sunrise
function can be called when seasonTime() > season()
.
Returns the Weather struct.
Returns the Rain struct.
Returns the Season of Plenty (SOP) rewards per Root for the given Season.
Returns the cumulative deltaB across all pools on the Oracle Whitelist.
Returns the deltaB for a given pool.
Returns the last Well oracle snapshot for a given Well.
Returns the last Curve oracle data snapshot for the BEAN:3CRV pool.
Emitted when the Season changes.
Emitted when Beanstalk pays Beans to the sunrise
caller.
Emitted during Sunrise when Beans are distributed to the Field, the Silo, and Fertilizer.
Emitted during Sunrise when Beanstalk adjusts the amount of available Soil.
Emitted when Beans are minted during the Season of Plenty.
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.
Deposits ERC20 token into internal Farmer balances.
Withdraws a single Deposit.
Withdraws multiple Deposits.
Transfers single Farmer's Deposit.
Transfers multiple Farmer Deposits.
Transfer a single Deposit, conforming to the ERC1155 standard.
Transfer a single Deposit, conforming to the ERC1155 standard.
Claim Grown Stalk for an account for a particular whitelisted asset.
Mow for multiple whitelisted assets for an account.
Claim Earned Beans and their associated Stalk and Plantable Seeds for msg.sender
.
Claims rewards from a Flood (Season of Plenty) for msg.sender
.
Get the last Season in which account
updated their Silo.
Returns the total supply of Stalk. Does NOT include Grown Stalk.
Returns the total supply of Roots.
Returns the total supply of Earned Beans.
Returns the balance of Stalk for a particular Farmer. Does NOT include Grown Stalk; does include Earned Stalk.
Returns the balance of Roots for a particular Farmer.
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.
Returns the balance of Grown Stalk for a single deposit of token
in stem
for account
.
Returns the balance of Earned Beans for a Farmer.
Return the account
balance of Earned Stalk, the Stalk associated with Earned Beans.
Return the balance of Deposited BDV of a whitelisted asset for a given Farmer.
Return the Stem at the time that a Farmer last Mowed a particular whitelisted asset.
Return the Mow Status struct of token
for a given account
.
Returns the last Season that a Season of Plenty started.
Returns the Farmer's balance of unclaimed 3CRV earned from the Season of Plenty.
Returns the account
balance of Roots the last time it was Raining during a Silo update.
Returns the account
Season of Plenty related state variables.
Returns the "stemTip", or cumulative Grown Stalk Per BDV of a given Deposited asset since whitelist, for a given whitelisted token.
Get the Stem associated with a particular Deposit (via its token and Season). Kept for legacy reasons.
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.
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.
Find the amount and BDV of token
that a Farmer has Deposited in a given Stem.
Get the total amount of token
currently Deposited in the Silo across all Farmers.
Get the total BDV of token
currently Deposited in the Silo across all Farmers.
Get the Storage.SiloSettings
for a whitelisted token.
Returns the total BDV of a number of tokens on the Deposit Whitelist.
Gets the amount of tokens in a Deposit type for a given Farmer.
Gets an array of amounts corresponding to Deposits.
Gets the Deposit ID given an whitelisted token address and Stem.
Emitted when the deposit associated with the Earned Beans of account
are Planted.
Emitted when 3CRV paid to account
during a Flood is claimed.
Emitted when account
gains or loses Stalk.
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.
Emitted when account
removes a single Deposit from the Silo. Occurs during Withdraw and Convert.
Emitted when account
removes multiple Deposits from the Silo. Occurs during Withdraw and Convert.
ERC-1155 event. Emitted when a Deposit is created, removed, or transferred.
ERC-1155 event. Emitted when multiple deposits are withdrawn or transferred.
Legacy event. This event is kept for backwards compatibility in order for the ABI to generate properly.
Legacy event. This event is kept for backwards compatibility in order for the ABI to generate properly.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Sun advances Beanstalk to the next Season through the sunrise
function in the Season Facet. Every time an hour passes, sunrise
can be called 1 more time.
The Season Facet has :
-> Calculates the time weighted average number of Beans that Bean is above/below its value peg in all pools on the .
-> Changes the Max Temperature (interest rate) depending on the Bean price, debt level and demand for Soil.
-> Sets the Soil for the next Season and mints new Beans if Oracle
returns deltaB > 0
and distributes them as follows:
Up to 1/3 to Active Fertilizer holders (see );
Up to 1/2 of the remaining amount to Pod holders (see ); and
The rest to Stalkholders in the Silo (see ).
sunrise
does the following steps:
Increments the Season number;
Calls Oracle
to get deltaB
;
Calls Weather
to adjust the Max Temperature and checks for Rain and Season of Plenty;
Calls Sun
to set the Soil and mint Beans if deltaB > 0
; and
Pays msg.sender
Beans for paying the transaction fee associated with calling the function.
In the Beanstalk ecosystem,
Rain is referred to as Oversaturation; and
Season of Plenty is referred to as Flood.
See .
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The BDV Facet holds functions to get the BDV for each whitelisted Silo asset.
None.
Returns the BDV of a number of BEAN:3CRV LP tokens.
Returns the BDV of a number of Beans (1 Bean = 1 BDV).
Returns the total BDV of a number of Unripe BEAN:3CRV LP tokens.
Returns the total BDV of a number of Unripe Beans.
Returns the total BDV of a number of Well LP tokens given a Well LP token.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
Whitelist Facet handles the whitelisting/dewhitelisting of assets on the .
Dewhitelists tokens on the Deposit Whitelist. A token can no longer be Deposited in the Silo after dewhitelisting. Can only be called by the owner of Beanstalk.
Adds a token to the Deposit Whitelist. Can only be called by the owner of Beanstalk.
Adds a token to the Deposit Whitelist with an encodeType
. Can only be called by the owner of Beanstalk.
Changes the Grown Stalk per BDV per Season for a token on the Deposit Whitelist. Can only be called by the owner of Beanstalk.
None.
Emitted when a token is added to the Deposit Whitelist.
Emitted when the Grown Stalk per BDV per Season for a token on the Deposit Whitelist is changed.
Emitted when a token is removed from the Deposit Whitelist.
Emitted when the Weather (now ) changes.
Returns the Season in which Beanstalk initialized , i.e., the Season in which Stems were initialized.
Returns whether or not a Farmer needs to migrate to .
account
address
Address of Farmer that Converted.
fromToken
address
Whitelisted token that was Converted from.
toToken
address
Whitelisted token that was Converted to.
fromAmount
uint256
Amount of fromToken
Converted.
toAmount
uint256
Amount of toAmount
Converted to.
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.
account
address
The Farmer whose Deposits were removed.
token
address
Whitelisted token address.
stems
int96[]
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
.
uint32
The current Season number.
bool
Whether Beanstalk is Paused.
Season
The Season struct in App Storage.
bool
Whether Beanstalk started this Season above or below peg.
uint32
The block during which the current Season started.
uint32
The expected Season number given the current block timestamp.
Weather
Returns the Weather struct in App Storage.
Rain
Returns the Rain struct in App Storage.
season
uint32
The Season to fetch SOP rewards per Root for.
uint256
The SOP rewards for the given Season.
deltaB
int256
The cumulative deltaB.
pool
address
The address of the pool .
int256
The deltaB for the given pool.
well
address
The address of the pool to get the snapshot for.
int256
co
Storage.CurveMetapoolOracle
Last Curve oracle data snapshot.
season
uint256
The new Season number.
account
address
The address to which the reward Beans were sent.
beans
uint256
The amount of Beans paid as a reward.
season
uint32
The Season in which Beans were distributed.
toField
uint256
The number of Beans distributed to the Field.
toSilo
uint256
The number of Beans distributed to the Silo.
toFertilizer
uint256
The number of Beans distributed to Fertilizer holders.
season
uint32
The Season in which Soil was adjusted.
soil
uint256
The new amount of Soil available.
season
uint256
The current Season.
caseId
uint256
The "Weather Case".
change
int8
The change in Temperature from the previous value.
season
uint256
The Season in which Beans were minted for distribution.
amount
uint256
The amount of 3CRV which was received for swapping Beans.
toField
uint256
The amount of Beans which were distributed to remaining Pods in the Field.
amount
address
Amount of the token Deposited.
bdv
uint256
BDV of the Deposit.
stem
int96
Stem of the Deposit.
token
address
Address of ERC20 being Withdrawn.
stem
int96
Stem of the Deposit to Withdraw.
amount
uint256
Tokens to be Withdrawn.
mode
To
The balance to transfer the token to; see LibTransfer.To
.
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
The balance to transfer the token to; see LibTransfer.To
.
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.
bdv
uint256
BDV now owned by recipient
.
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
.
bdvs
uint256[]
Array of BDVs of each Deposit transferred.
sender
address
Source of Deposit.
recipient
address
Destination of Deposit.
depositId
uint256
ID of Deposit to transfer.
amount
uint256
Amount of ERC1155 to transfer.
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
.
account
address
Address to Mow for.
token
address
Address of ERC20 Deposit to Mow for.
account
address
Address to Mow for.
tokens
address[]
Array of addresses of ERC20 Deposits to Mow for.
beans
uint256
Amount of Earned Beans given.
stem
int96
Stem of the new Deposit.
uint32
Last Season account
updated their Silo.
uint256
Total supply of Stalk.
uint256
The total supply of Roots.
uint256
Total supply of Earned Beans.
account
address
Farmer to get the Stalk balance for.
uint256
Stalk balance of account
.
account
address
Farmer to get the Roots balance for.
uint256
Roots balance of account
.
account
address
Farmer to get the Grown Stalk balance for.
uint256
Grown Stalk balance of account
.
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.
grownStalk
uint
Grown Stalk for Deposit.
account
address
Farmer to get the Earned Bean balance for.
beans
uint256
Earned Bean balance of account
.
account
address
Farmer to get the Earned Stalk balance for.
uint256
Earned Stalk balance of account
.
account
address
Farmer to get the Deposited BDV balance for.
token
address
Whitelisted asset to get the balance of Deposited BDV for.
depositedBdv
uint256
Balance of Deposited BDV given account
and token
.
account
address
Farmer to get the last Mowed Stem for.
token
address
Whitelisted asset to get the last Mowed Stem for.
lastStem
int96
Last Mowed Stem for token
given account
.
account
address
Farmer to get the Mow Status of.
token
address
Token to get the Mow Status of account
for.
Account.MowStatus
uint32
The last Season it started Flooding.
account
address
Farmer to get the unclaimed 3CRV balance for.
plenty
uint256
Unclaimed 3CRV balance of account
.
account
address
Farmer to get "Rain Roots" balance for.
uint256
Root balance last time it was Raining for account
.
account
address
Farmer to get SOP related state variables for.
sop
AccountSeasonOfPlenty
Struct containing SOP related state variables.
token
address
ERC20 token to get the Stem tip for.
_stemTip
int96
Returns the Stem tip for token
.
token
address
ERC20 token of the Deposit.
season
uint32
Season of the Deposit.
stem
int96
Stem of the Deposit.
token
address
Legacy token to get the Seeds for.
uint256
Seeds for the legacy token.
uint16
Season in which Stems were initialized.
account
address
Farmer to check if migration is needed for.
bool
Whether or not account
needs to migrate to Silo V3.
bool
Whether or not Earned Beans from the previous gm
function call are still vesting.
account
address
Farmer to get Deposit data for.
token
address
ERC20 token of the Deposit.
stem
int96
Stem of the Deposit.
uint256
Number of tokens in the Deposit.
uint256
BDV of the Deposit.
token
address
Whitelisted token address.
uint256
Total number of token
Deposited in the Silo.
token
address
Whitelisted token address.
uint256
Total BDV of token
Deposited in the Silo.
token
address
Whitelisted token address.
Storage.SiloSettings
Struct with Silo variables for token
.
token
address
The whitelisted token address.
amount
uint256
The number of tokens.
uint256
account
address
Farmer to get Deposit amount for.
depositId
uint256
Deposit ID corresponding to account
.
amount
Amount of tokens in a Deposit type for account
.
accounts
address[]
List of Farmers.
depositIds
uint256[]
List of Deposit IDs corresponding to accounts
.
uint256[]
Array of amounts corresponding to the list of Deposits.
token
address
Whitelisted token address.
stem
int96
Stem of the Deposit.
uint256
Deposit ID of token
with stem
.
account
address
Farmer that Planted their Earned Beans.
beans
uint256
The amount of Earned Beans claimed.
account
address
Farmer that claimed the assets.
plenty
uint256
The amount of 3CRV claimed by account
.
account
address
The Farmer whose Stalk balance changed.
delta
int256
The change in Stalk.
deltaRoots
int256
The change in Roots.
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.
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.
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
.
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.
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.
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.
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.
amount
uint256
Number of tokens to get the BDV for.
uint256
The total BDV of amount
number of Unripe BEAN:3CRV LP tokens.
amount
uint256
Number of tokens to get the BDV for.
uint256
The total BDV of amount
number of Unripe Beans.
token
address
The whitelisted token address.
amount
uint256
The number of tokens.
uint256
The total BDV of amount
number of token
.
token
address
The token address to whitelist.
selector
bytes4
The selector for the BDV function of token
.
stalkIssuedPerBdv
uint32
Stalk per BDV for token
issued upon Deposit.
stalkEarnedPerSeason
uint32
Grown Stalk per BDV per Season for token
.
encodeType
bytes1
The encode type that should be used to encode the BDV function call.
token
address
The token address on the Deposit Whitelist.
stalkEarnedPerSeason
uint32
The new Grown Stalk per BDV per Season.
token
address
The whitelisted token address.
selector
bytes4
The selector for the BDV function of token
.
stalkEarnedPerSeason
uint32
Grown Stalk per BDV per Season for token
.
stalkIssuedPerBdv
uint256
Stalk per BDV for token
issued upon Deposit.
token
address
The token address on the Deposit Whitelist.
stalkEarnedPerSeason
uint32
The new Grown Stalk per BDV per Season.
season
uint32
The current Season at the time of the change.
token
address
The dewhitelisted token address.
convertData
bytes
Input parameters to determine the Conversion type.
stems
int98[]
The Stems of the Deposits to Convert.
amounts
uint256[]
The amounts within each Deposit to Convert.
toStem
int96
The new Stems of the Converted Deposit.
fromAmount
uint256
The amount of tokens Converted from.
toAmount
uint256
The amount of tokens Converted to.
fromBdv
uint256
The BDV of the Deposits Converted from.
toBdv
uint256
The BDV of the Deposits Converted to.
uint256
The number of Beans minted to the caller.
account
address
Indicates to which address reward Beans should be sent.
mode
To
The balance to transfer Beans to; see LibTransfer.To
.
uint256
The number of Beans minted to the caller.
token
address
Address of the token to Deposit.
_amount
uint256
Amount of the token to be Deposited.
mode
From
The balance to transfer the token from; see LibTransfer.From
.
amount
uint256
Number of tokens to get the BDV for.
uint256
The total BDV of amount
number of BEAN:3CRV LP tokens.
amount
uint256
Number of tokens to get the BDV for.
uint256
The total BDV of amount
number of Beans.
token
address
The token address to dewhitelist.
token
address
The token address to whitelist.
selector
bytes4
The selector for the BDV function of token
.
stalkIssuedPerBdv
uint32
Stalk per BDV for token
issued upon Deposit.
stalkEarnedPerSeason
uint32
Grown Stalk per BDV per Season for token
.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Enroot Facet handles logic for Enrooting Unripe Deposits.
Claims outstanding Revitalized Stalk and Seeds and updates BDV of a single Unripe Deposit.
token
address
Address of whitelist Unripe ERC20.
stem
int96
Stem of Deposit to Enroot.
amount
uint256
Amount to Enroot.
Claims outstanding Revitalized Stalk and Seeds and updates BDV of multiple Unripe Deposits.
token
address
Address of whitelist Unripe ERC20.
stems
int96[]
Array of Stems of Deposits to Enroot.
amounts
uint256[]
Array of amounts (corresponding to Stems) to Enroot.
None.
Emitted when account
removes a single Deposit from the Silo. Occurs during Withdraw and Convert.
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.
Emitted when account
removes multiple Deposits from the Silo. Occurs during Withdraw and Convert.
account
address
The Farmer whose Deposits were removed.
token
address
Whitelisted token address.
stems
int96[]
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
.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Metadata Facet provides metadata for the ERC-1155 Silo Deposits. Deposit IDs are a uint256
that is the concatenation of the token address and the Stem.
None.
Returns the URI for a given Deposit ID.
depositId
uint256
Deposit ID to get the URI for.
string
URI of Deposit with depositId
.
Returns the name of the collection for OpenSea compatibility.
string
Name of the OpenSea collection.
Returns the ticker of the collection for OpenSea compatibility.
string
Ticker of the OpenSea collection.
Returns the image URI for a given Deposit ID.
depositId
uint256
Deposit ID to get the image URI for.
string
Image URI of Deposit with depositId
.
Not currently emitted.
_uri
string
URI.
_id
uint256
Deposit ID.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Approval Facet handles all approval and permit related functions for the Silo.
Approves an address to access a Farmer's Deposit.
spender
address
Address to be given approval.
token
address
Address of ERC20.
amount
uint256
Amount to be approved.
Increases transfer allowance of a Deposit.
spender
address
Address to increase approval for.
token
address
Address of ERC20.
addedValue
uint256
Additional approval value to be given.
bool
If the allowance increase was successful.
Decreases transfer allowance of a Deposit.
spender
address
Address to decrease approval for.
token
address
Address of ERC20.
subtractedValue
uint256
Amount of approval value to be removed.
bool
Success.
Farm balances and Silo Deposits support EIP-2612 permits, which allows Farmers to delegate use of their Farm balances and Silo Deposits through permits without the need for a separate transaction.
Permits multiple Deposits.
owner
address
Owner of the Deposit.
spender
address
Address to permit.
tokens
address[]
Array of ERC20s to permit.
values
uint256[]
Array of amount (corresponding to tokens
) to permit.
deadline
uint256
Expiration of signature (Unix time).
v
uint8
Recovery ID.
r
bytes32
ECDSA signature output.
s
bytes32
ECDSA signature output.
Permits a single Deposit.
owner
address
Owner of the Deposit.
spender
address
Address to permit.
token
address
ERC20 to permit.
value
uint256
Amount of token
to permit.
deadline
uint256
Expiration of signature (Unix time).
v
uint8
Recovery ID.
r
bytes32
ECDSA signature output.
s
bytes32
ECDSA signature output.
Set ERC-1155 approvals. Grants or revokes permission to operator
to transfer the caller’s tokens, according to approved
.
spender
address
Address to approve spending for.
approved
bool
Whether or not to approve.
Returns the current nonce for Deposit permits.
owner
address
Owner of the Deposit.
uint256
Current nonce for Deposit permits.
Returns the domain separator for the current chain (link).
bytes32
The domain separator for the current chain.
Returns how much of a token
Deposit that spender
can transfer on behalf of owner
.
owner
address
Owner of the Deposit.
spender
address
The address that can spend the Deposit.
token
address
The token Deposit that spender
can transfer.
uint256
The token
Deposit amount that spender
can transfer on behalf of owner
.
Returns true if _operator
is approved to transfer _owner
's Deposit.
_owner
address
Owner of the Deposit.
_operator
address
Spender of the Deposit.
bool
True if _operator
is approved to transfer _owner
's tokens.
Emitted when a Deposit is approved to spend by another account.
owner
address
Owner of the Deposit.
spender
address
Spender of the Deposit.
token
address
Deposit token that can be spent.
amount
uint256
Amount of the Deposit token that can be spent.
Emitted when account
grants or revokes permission to operator
to transfer their tokens, according to approved
(link).
account
address
Owner of the Deposit.
operator
address
Spender of the Deposit.
approved
address
Whether or not the Deposit was approved.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Convert Getters Facet contains view functions for Convert data.
None.
Estimate the maximum number of tokens that can currently be Converted from tokenIn
to tokenOut
.
tokenIn
address
The whitelisted token to estimate Converting from.
tokenOut
address
The whitelisted token to estimate Converting to.
amountIn
uint256
The maximum number of tokens that can currently be Converted from tokenIn
to tokenOut
.
Estimate the amount of tokens received from Converting tokenIn
to tokenOut
given an amount of tokenIn
.
tokenIn
address
The whitelisted token to estimate Converting from.
tokenOut
address
The whitelisted token to estimate Converting to.
amountOut
uint256
The amount of tokenOut
received from a Conversion from tokenIn
to tokenOut
.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Migration Facet contains functions related to Silo V3. Farmers are required to migrate to the new accounting system created by the Silo V3 upgrade.
Migrates a Farmer's Deposits from the old (Seasons based) to the new Silo (Stems based) accounting system.
When migrating an account, a user must submit all of the account's Deposits or the migration will not pass because the Seed check will fail. The Seed check adds up the BDV of all submitted Deposits, multiplies by the corresponding Seed amount for each token type, then compares that to the total Seeds stored for that user. If everything matches, the migration is valid.
account
address
Address of the account to migrate.
tokens
address[]
Array of whitelisted token addresses to migrate.
seasons
uint256[][]
The Seasons for the Deposits.
amounts
uint256[][]
The amounts of those Deposits which are to be migrated.
stalkDiff
uint256
Discrepancy between the calculated Stalk and the actual Stalk the account has.
seedsDiff
uint256
Discrepancy between the calculated Seeds and the actual Seeds the account has.
proof
bytes32[]
The Merkle proof that confirms stalkDiff
and seedsDiff
.
Migrate an account to Silo V3 that has no Deposits.
account
address
Address of the account to migrate.
Gets balance of Seeds for a Farmer that hasn't migrated.
account
address
A Farmer's address.
uint256
Balance of Seeds for an unmigrated Farmer.
Gets a Farmer's balance of Grown Stalk at the time of Stems deployment (Silo V3 upgrade).
account
address
Address of Farmer.
uint256
Grown Stalk balance for account
at the time of Stems deployment.
Locate the token amount and BDV for a Farmer's Deposit in legacy storage.
account
address
Address of Farmer.
token
address
Whitelisted token address to get Deposit for.
season
uint32
Season of the Deposit in legacy storage.
uint128
Amount of token
of the Deposit in legacy storage.
uint128
BDV of the Deposit in legacy storage.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
On April 17, 2022, Beanstalk was exploited via a governance attack. The attacker used a flash loan to exploit the protocol’s then on-chain governance mechanism and transferred all of the Deposited assets in the Silo to an address they controlled, resulting in a theft of ~$77M in non-Bean assets.
Upon exploit, Beanstalk was Paused and the on-chain governance mechanism was removed. Stalkholders voted via Snapshot on how Beanstalk should proceed.
The Barn is the Beanstalk recapitalization facility used to Replant Beanstalk. The Barn Raise started on June 6, 2022 while the protocol was offline and continues until the recapitalization target has been reached.
The Barn is consists of 2 Facets:
Fertilizer is a semi-fungible limited debt issuance to recapitalize $77M in stolen liquidity.
At the beginning of the Barn Raise, there was 77M Available Fertilizer. Available Fertilizer is the number of Fertilizer that can be bought from Beanstalk in exchange for 1 USDC each. Fertilizer becomes Active when it is bought, at which point the ERC-1155 Fertilizer token is minted.
Active Fertilizer entitles holders to a pro rata portion of 1/3 of Bean mints.
Fertilizer is minted with a given % Humidity. Humidity is dependent on the Season during which the Fertilizer is minted. During Season 6074 (the Season Beanstalk was Paused at), the Humidity was 500%. The next Season, Humidity was set to 250% and decreased 0.5% every Season until it reached 20%. The Humidity will remain at 20% until all Fertilizer is sold.
Each Fertilizer entitles its holder up to 1 + humidity
Unfertilized Beans. Unfertilized Beans become Fertilized Beans when Beans are distributed to Active Fertilizer holders. When Fertilizer has no more corresponding Unfertilized Beans, it becomes Used and no longer receives Bean mints.
To track Active Fertilizer, Beanstalk has a global variable s.bpf
, which is the cumulative Beans Per Fertilizer (BPF) paid back over all Seasons. Fertilizer is indexed by endBpf = s.bpf + 1 + humidity
at the time of minting. This indicates that once s.bpf
reaches endBpf
, the Fertilizer becomes Used. Beanstalk sorts all non-zero Fertilizer ids by endBpf
in s.nextFid
. This is a linked list where s.fFirst
is the start of the list and s.fLast
is the end of the list.
Every Season, Beanstalk increments s.bpf
by the number of new Bean mints distributed to Fertilizer holders divided by s.activeFertilizer
. Note that Beanstalk integrates s.bpf
over s.activeFertilizer
—every time s.bpf
reaches s.fFirst
, s.activeFertilizer
decreases by the supply of Fertilizer with an id of s.fFirst
. The first item is then popped off the linked list and s.fFirst
is set to the next item. When s.fFirst == 0
, Beanstalk stops paying Beans to Fertilizer as all Fertilizer is either Used or Available (and thus s.activeFertilizer == 0
).
Fertilizer can be claimed via the claimFertilizer
function (it is also claimed automatically whenever Fertilizer is transferred). The Fertilizer contract stores the lastBpf
value for each token id that the Farmer owns. When a Farmer claims Fertilizer, Beanstalk computes how many Beans have been Fertilized since the last time the Farmer Fertilized that id with: min(s.bpf, s.nextFid[id]) – lastBpf
. It then gives the Farmer that many Beans for each Fertilizer they have of that id.
Before Beanstalk was Replanted, Fertilizer was deployed as FertilizerPreMint.sol
, which transferred USDC from the caller to the Beanstalk Community Multisig (BCM) address in exchange for Fertilizer. The Fertilizer was issued at the id 6_000_000
as the Humidity was 500% before Replant.
When Beanstalk was Replanted, the BCM called the addFertilizerOwner
function that handled the process of adding liquidity to the BEAN:3CRV pool and minting new Beans for all of the Fertilizer minted prior to Replant.
At the same time, the Fertilizer contract was upgraded to Fertilizer.sol
. This moved the mintFertilizer()
functionality from the Fertilizer contract to Beanstalk itself. From this point forward, Beanstalk automatically adds new liquidity for Unripe LP holders and new Beans for Unripe Bean holders in the same transaction that Fertilizer is minted in.
Upon Replant, Farmers who held Beans in the block prior to the exploit received 1 Unripe Bean for every pre-exploit Bean; Farmers who held whitelisted LP Tokens in the block prior to the exploit received 1 Unripe BEAN:3CRV LP for every 1 BDV of each pre-exploit whitelisted LP Token.
As Fertilizer is sold, Beans are distributed to all Unripe Bean holders pro rata (and BEAN:3CRV LP is distributed to all Unripe LP holders) using the shares and underlying token model that EIP-4626 uses for yield-bearing tokens. The Unripe tokens are the Shares and Beans/LP are the underlying assets. The underlying portion will continue to increase as Fertilizer is minted in exchange for USDC.
Farmers can Chop their Unripe assets at any point for a penalized percent of the corresponding underlying tokens. The penalized percent is equal to the percent of Unfertilized Beans that have been Fertilized. This can be computed as s.fertilizedIndex / s.unfertilizedIndex
.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Legacy Claim Withdrawal Facet allows anyone to Claim and read Withdrawals. Silo V3 removed the Withdrawal Freeze from the Silo. Withdrawing now directly sends ERC-20 tokens to the Farmer's Farm or Circulating balances instead of creating a Withdrawal.
Although new Withdrawals cannot be created, the claim Withdrawal functionality has been preserved in this facet to allow pre-existing unclaimed Withdrawals to still be claimed.
Claims tokens from a Withdrawal.
token
address
Address of whitelisted token.
season
uint32
Season of Withdrawal to claim.
mode
To
Claims tokens from multiple Withdrawals.
token
address
Address of whitelisted token.
seasons
uint32[]
Array of Seasons to claim.
mode
To
Get the amount of token
in the Withdrawal season
for account
.
account
address
Farmer to get the Withdrawal for.
token
address
Token address of the Withdrawal.
season
uint32
Season of the Withdrawal.
uint256
Amount of token
Withdrawn for the Farmer in the given Season.
Get the total amount of token
currently Withdrawn from the Silo across all Farmers.
token
address
The Withdrawn token address.
uint256
Total amount of Withdrawn token
.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Field Facet is where Beans are Sown.
Sow Beans in exchange for Pods.
beans
uint256
The number of Beans to Sow.
minTemperature
uint256
The minimum Temperature at which to Sow.
mode
From
pods
uint256
The number of Pods received.
Sow Beans in exchange for Pods. Use at least minSoil
.
beans
uint256
The number of Beans to Sow.
minTemperature
uint256
The minimum Temperature at which to Sow.
minSoil
uint256
The minimum amount of Soil to use; reverts if there is less than this much Soil available upon execution.
mode
From
pods
uint256
The number of Pods received.
Harvest Pods from the Field.
plots
uint256[]
List of Plot IDs to Harvest.
mode
To
Returns the total number of Pods ever minted.
uint256
The total number of Pods ever minted.
Returns the index below which Pods are Harvestable.
uint256
The index below which Pods are Harvestable.
Returns the number of outstanding Pods. Includes Pods that are currently Harvestable but have not yet been Harvested.
uint256
The number of outstanding Pods.
Returns the number of Pods that have ever been Harvested.
uint256
The number of Pods that have ever been Harvested.
Returns the number of Pods that are currently Harvestable but have not yet been Harvested.
uint256
The number of Pods that are currently Harvestable but have not yet been Harvested.
Returns the number of Pods that are not yet Harvestable.
uint256
The number of Pods that are not yet Harvestable.
Returns the number of Pods remaining in a Plot.
account
address
The account that owns a Plot.
index
uint256
The ID of a Plot.
uint256
The number of Pods remaining in a Plot.
Returns the total available Soil.
uint256
The total available Soil.
Returns the current yield (aka "Temperature") offered by Beanstalk when burning Beans in exchange for Pods.
uint32
The current yield offered by Beanstalk when burning Beans in exchange for Pods.
Returns the current Temperature, the interest rate offered by Beanstalk in exchange for Sowing Beans.
uint256
The current Temperature.
Returns the Maximum Temperature that Beanstalk is willing to offer this Season.
uint256
The Maximum Temperature.
Returns the remaining Pods that could be issued this Season.
uint256
The remaining Pods that could be issued this Season.
Emitted from LibDibbler.sowNoSoil
when an account
creates a Plot. A Plot is a set of Pods created in from a single sow
or fund
call.
account
address
The account that Sowed Beans for Pods.
index
uint256
The Place in Line of the Plot.
beans
uint256
The amount of Beans burnt to create the Plot.
pods
uint256
The amount of Pods associated with the created Plot.
Emitted when account
claims the Beans associated with Harvestable Pods.
account
address
The account that owns the plots
.
plots
uint256[]
The indices of Plots that were Harvested.
beans
uint256
The amount of Beans transferred to account
.
Emitted when a Pod Listing is Cancelled.
account
address
The account that created the Pod Listing.
index
uint256
The index of the Plot listed.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Fundraiser Facet dandles the creation, funding, and completion of Fundraisers.
Fund a Fundraiser in exchange for Pods.
id
uint32
The Fundraiser ID.
amount
uint256
Amount of fundraisers[id].token
to provide.
mode
From
uint256
The number of Pods received.
Creates a Fundraiser. Can only be called by the owner of Beanstalk.
payee
address
The address to which funds are delivered at the end of the Fundraiser.
token
address
The address of the token that can be sent to the Fundraiser in exchange for Pods.
amount
uint256
The amount of token
that is being raised.
Returns the remaining number of tokens to raise.
id
uint32
The Fundraiser ID.
uint256
The remaining number of tokens to raise.
Returns the total amount of tokens raised so far.
id
uint32
The Fundraiser ID.
uint256
The total amount of tokens raised so far.
Returns the address of the token that can be sent to the Fundraiser.
id
uint32
The Fundraiser ID.
address
The address of the token that can be sent to the Fundraiser.
Returns the Fundraiser struct.
id
uint32
The Fundraiser ID.
Fundraiser
Returns the number of Fundraisers.
uint32
The number of Fundraisers.
Emitted when a Fundraiser is created.
id
uint32
The Fundraiser ID.
fundraiser
address
The address to which funds are delivered.
token
address
The address of the token that can be sent to the Fundraiser in exchange for Pods.
amount
uint256
The amount of token
that is being raised.
Emitted when a Farmer calls fund
.
account
address
The address of the Farmer.
id
uint32
The Fundraiser ID.
amount
uint256
The amount of token
that account
provided.
Emitted when a Fundraiser is fully funded.
id
uint32
The Fundraiser ID.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Field is Beanstalk's credit facility. Beanstalk relies on a decentralized set of creditors to maintain Bean price stability.
Anytime Beanstalk is willing to issue debt, there is Soil in the Field. Soil represents the number of Beans that Beanstalk is currently willing to borrow.
Anytime there is Soil in the Field, Farmers can Sow Beans in exchange for Pods. Pods are stored in Plots and placed at the end of the Pod Line.
Pods become Harvestable on a First In, First Out (FIFO) basis when deltaB > 0
over the course of a Season. Assuming there are Unharvestable Pods and Unfertilized Beans, 1/3 of Bean mints turn Pods into Harvestable Pods, which can be Harvested (redeemed) for Beans via the harvest()
function. When a Plot is Harvested, it is deleted from storage.
Pods are implemented using 3 indices:
podIndex
-> The total number of Pods ever created.
harvestableIndex
-> The total number of Pods that ever became Harvestable.
harvestedIndex
-> The total number of Pods ever Harvested.
When Beans are Sown, a Plot is created at the current podIndex
with beans * (1 + weather)
. Pods and podIndex
are incremented by the number of Pods.
When Pods become Harvestable, harvestableIndex
is incremented by the number of newly Harvestable Pods. Plots are Harvestable if the index of a Plot is less than harvestableIndex
. Plots can be partially Harvested, in which case Beanstalk deletes the first part of the Plot and creates a new Plot at the harvestableIndex
. When a Plot is Harvested, the harvestedIndex
increases by the number of Harvested Pods.
Fundraisers allow Beanstalk to raise non-Bean stablecoins to pay for services on behalf of the protocol, such as audits. Fundraisers can be created through the createFundraiser()
function by Beanstalk or the owner of the contract.
Each Fundraiser requires:
The token address of the non-Bean token being raised;
The amount of tokens being raised; and
The address to send the tokens to upon completion of the Fundraiser.
Farmers fund()
Fundraisers by transferring the non-Bean stablecoin to Beanstalk and in exchange receive Pods at the current Weather at the end of the Pod Line. Funding is akin to Sowing, but instead of burning Beans, Beanstalk is raising a non-Bean stable coin.
Once all of the Funds have been raised, the tokens are transferred to the payee address stored in the Fundraiser.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Fertilizer Facet handles the minting of Fertilizer and Beans paid to Fertilizer holders.
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Unripe Facet handles logic for the vesting of Unripe assets.
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Market will house various DEXs for zero fee trading. For now, there is only the Pod Market, but in the future there may be a zero fee AMM, a zero fee NFT marketplace, etc.
The Pod Market allows Farmers to create, Fill and Cancel Pod Listings and Pod Orders.
Farmers with Pods can create Pod Listings, which allow other Farmers to buy part or all of their Plots at a given price.
Pod Listings are contained in the following struct:
Pod Listings are created with the createPodListing
function. Pod Listings can only be created by the owner of the Plot being listed.
When a Pod Listing is created, The PodListing
struct with the exception of account
and index
is encoded and hashed. Beanstalk stores the hash of the listing on-chain in the s.podListings
state mapping. Pod Listing hashes are stored by index of the corresponding Plot. The Pod Listing struct is emitted in an event upon creation.
Pod Listings are Filled with the fillPodListing
function. The Pod buyer is required to input the PodListing
struct associated with the Plot being transferred. Beanstalk hashes the PodListing
data and verifies that the hash is the same as the hash in storage at the corresponding index. If the original Plot owner no longer owns the Plot, then the transaction will fail. If the Fill is successful, Beanstalk then transfers the corresponding part of the Plot to the buyer in exchange for Beans. If the Listing is not empty, the updated Listing is then hashed and stored on-chain.
Pod Listings can be Cancelled at any time with the cancelPodListing
function. Pod Listings are automatically Cancelled on Harvest, Transfer or if a new Pod Listing is created with the same plot.
Pod Orders allow Farmer with Beans to create Orders to buy Plots. An Order specifies a max Place in Line that the Farmer is will to buy Pods at, the price they are willing to by Pods at and the amount they are willing to buy. All Orders are denominated in Beans. Pod Orders are contained in the following struct:
Pod Orders are created with the createPodOrder
function. Pod Orders can be created by any Farmer.
When a Pod Order is created, The PodOrder
struct is encoded and hashed. Beanstalk stores the hash of the Order on-chain in the s.podOrders
state mapping. The hash is the key in the mapping and the amount in the Order is stored in the hash. When a Pod Order is created, Beans are transferred from the Farmer to Beanstalk equal to the amount of Pods being bought times the Price per Pod in the Order. These Beans are locked in Beanstalk until either the Pod Order creator Cancels the Order or the Order is Filled.
Farmers with Pods can sell Pods to open Pod Orders with the fillPodOrder
function. The Pod seller is required to input what part of which Plot is being sold and the PodOrder
struct associated with Order they are filling. Beanstalk hashes the PodOrder
data and verifies that the hash maps to a non-zero value in s.podOrders
. The seller is also required to input the Plot being sold as a part of the calldata. If the Fill is successful, the value at the hash key is updated to equal the new amount remaining in the Pod Order.
Pod Orders can be Cancelled at anytime with the cancelPodOrder
function. When an Order is Cancelled, Beanstalk returns the remaining Beans in the Pod Order to the Farmer.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Marketplace Facet handles logic for buying and selling Pods on the .
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
WIP
The balance to transfer claimed assets to; see .
The balance to transfer claimed assets to; see .
The balance to transfer Beans from; see .
The balance to transfer Beans from; see .
The balance to transfer Beans to; see .
Balance to spend tokens from; see .
Returns the Fundraiser struct in .
You can find links to past BIPs that created Fundraisers .
amount
uint128
WIP
minLP
uint256
WIP
mode
From
WIP
id
uint128
WIP
amount
uint128
WIP
minLP
uint256
WIP
account
address
WIP
amount
uint256
WIP
beans
uint256
WIP
beans
uint256
WIP
beans
uint256
WIP
id
uint128
WIP
uint256
WIP
id
uint128
WIP
uint128
WIP
uint128
WIP
uint128
WIP
uint256
WIP
bool
WIP
bpf
uint128
WIP
_s
uint128
WIP
humidity
uint128
WIP
humidity
uint128
WIP
endBpf
uint128
WIP
uint256
WIP
account
address
WIP
ids
uint256[]
WIP
beans
uint256
WIP
account
address
WIP
ids
uint256[]
WIP
beans
uint256
WIP
account
address
WIP
id
uint256
WIP
IFertilizer.Balance
WIP
accounts
address[]
WIP
ids
uint256[]
WIP
IFertilizer.Balance[]
WIP
fertilizers
Supply[]
WIP
id
uint128
WIP
bpf
uint128
WIP
token
address
WIP
amount
uint256
WIP
proof
bytes32[]
WIP
mode
To
WIP
unripeToken
address
WIP
underlyingToken
address
WIP
root
bytes32
WIP
account
address
WIP
token
address
WIP
bool
WIP
unripeToken
address
WIP
amount
uint256
WIP
redeem
uint256
WIP
unripeToken
address
WIP
penalty
uint256
WIP
unripeToken
address
WIP
amount
uint256
WIP
redeem
uint256
WIP
unripeToken
address
WIP
amount
uint256
WIP
supply
uint256
WIP
redeem
uint256
WIP
unripeToken
address
WIP
unripe
bool
WIP
unripeToken
address
WIP
account
address
WIP
underlying
uint256
WIP
unripeToken
address
WIP
account
address
WIP
underlying
uint256
WIP
unripeToken
address
WIP
percent
uint256
WIP
unripeToken
address
WIP
penalty
uint256
WIP
penalty
uint256
WIP
amount
uint256
WIP
penalty
uint256
WIP
unripeToken
address
WIP
underlyingPerToken
uint256
WIP
unripeToken
address
WIP
underlying
uint256
WIP
unripeToken
address
WIP
underlyingToken
address
WIP
unripeToken
address
WIP
underlyingToken
address
WIP
merkleRoot
bytes32
WIP
token
address
WIP
underlying
int256
WIP
account
address
WIP
token
address
WIP
amount
uint256
WIP
underlying
uint256
WIP
account
address
WIP
token
address
WIP
amount
uint256
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
maxHarvestableIndex
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
mode
To
WIP
l
PodListing
WIP
beanAmount
uint256
WIP
mode
From
WIP
l
PodListing
WIP
beanAmount
uint256
WIP
pricingFunction
bytes
WIP
mode
From
WIP
index
uint256
WIP
beanAmount
uint256
WIP
pricePerPod
uint24
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
mode
From
WIP
id
bytes32
WIP
beanAmount
uint256
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
mode
From
WIP
id
bytes32
WIP
o
PodOrder
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
mode
To
WIP
o
PodOrder
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
pricingFunction
bytes
WIP
mode
To
WIP
pricePerPod
uint24
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
mode
To
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
mode
To
WIP
sender
address
WIP
recipient
address
WIP
id
uint256
WIP
start
uint256
WIP
end
uint256
WIP
spender
address
WIP
amount
uint256
WIP
placeInLine
uint256
WIP
podListingAmount
uint256
WIP
fillBeanAmount
uint256
WIP
pricingFunction
bytes
WIP
amount
uint256
WIP
placeInLine
uint256
WIP
amountPodsFromOrder
uint256
WIP
pricingFunction
bytes
WIP
beanAmount
uint256
WIP
account
address
WIP
pricePerPod
uint24
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
uint256
WIP
account
address
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
uint256
WIP
id
bytes32
WIP
uint256
WIP
index
uint256
WIP
bytes32
WIP
owner
address
WIP
spender
address
WIP
uint256
WIP
account
address
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
pricePerPod
uint24
WIP
maxHarvestableIndex
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
mode
To
WIP
pricingType
PriceType
WIP
from
address
WIP
to
address
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
costInBeans
uint256
WIP
account
address
WIP
index
uint256
WIP
account
address
WIP
id
bytes32
WIP
amount
uint256
WIP
pricePerPod
uint24
WIP
maxPlaceInLine
uint256
WIP
minFillAmount
uint256
WIP
pricingFunction
bytes
WIP
priceType
PriceType
WIP
from
address
WIP
to
address
WIP
id
bytes32
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
costInBeans
uint256
WIP
account
address
WIP
id
bytes32
WIP
from
address
WIP
to
address
WIP
id
uint256
WIP
pods
uint256
WIP
owner
address
WIP
spender
address
WIP
pods
uint256
WIP
ids
uint256[]
WIP
mode
To
WIP
unripeToken
address
WIP
amount
uint256
WIP
fromMode
From
WIP
toMode
To
WIP
underlyingAmount
uint256
WIP
index
uint256
WIP
start
uint256
WIP
amount
uint256
WIP
pricePerPod
uint24
WIP
maxHarvestableIndex
uint256
WIP
minFillAmount
uint256
WIP
mode
To
WIP
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Diamond module contains various functions that require ownership of Beanstalk to execute in Beanstalk. This includes Pausing and Unpausing Beanstalk and upgrading Beanstalk via Diamond Cuts.
See EIP-2535 Diamond to read more about Beanstalk's upgradable proxy implementation.
The Diamond consists of 4 facets:
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Farm Facet allows Farmers to perform multiple Beanstalk functions calls in a single transaction using farm
calls.
Loops through the list of encoded selectors in data
and performs a delegateCall
on each of them.
data
bytes[]
The encoded function data for each of the calls.
results
bytes[]
The return data from each of the calls.
Execute multiple AdvancedFarmCalls.
data
AdvancedFarmCall[]
The encoded function data for each of the calls to make to this contract.
results
bytes[]
The results from each of the calls passed in via data
.
None.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Farm allows Farmers to call multiple functions in a single transaction and use assets between different functions in a composable manner, without those assets every leaving Beanstalk (thanks to Internal Balances). Internal Balances allow the farm
function to use the output of a function in the next function call.
The Farm also provides composable Beanstalk-native interfaces for other DeFi protocols. This allows Farmers to call supported external protocols through the farm
function and leverage Internal Balances. The current protocols that the Farm supports are:
WETH -> wrapping and unwrapping; and
Curve -> swapping and adding/removing liquidity.
Pipeline -> performing an arbitrary series of actions in the EVM in a single transaction.
The Farm creates an interface to transfer ERC-20 tokens between Internal and External Balances, as well as between Farmers through the transferToken
function.
The Farm consists of 5 facets:
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Depot Facet wraps Pipeline's pipe
functions to facilitate the loading of non-Ether assets in Pipeline.
Pipe a PipeCall
through Pipeline.
p
PipeCall
PipeCall
to pipe through Pipeline.
result
bytes
PipeCall
return value.
Pipe multiple PipeCalls
through Pipeline. Does not support sending Ether in the call.
pipes
PipeCall[]
List of PipeCalls
to pipe through Pipeline.
results
bytes[]
List of return values from each PipeCall
.
Pipe multiple AdvancedPipeCalls
through Pipeline.
pipes
AdvancedPipeCall[]
List of AdvancedPipeCalls
to pipe through Pipeline.
value
uint256
results
bytes[]
List of return values from each AdvancedPipeCall
.
Pipe a PipeCall
through Pipeline with an Ether value.
p
PipeCall
PipeCall
to pipe through Pipeline.
value
uint256
Ether value to send in Pipecall
.
result
bytes
PipeCall
return value.
Return the return value of a PipeCall
without executing it.
p
PipeCall
PipeCall
to execute with a staticcall.
result
bytes
PipeCall
return value.
None.
gm
function?In theory, anyone is able to call the gm
function. In practice, MEV bots will front run your transaction by calling the function themselves as they can determine that they will get the Beans instead of you. As there are a number of bots playing the Sunrise game, the chances of getting a successful gm
call from clicking the Sunrise button on the UI are essentially zero.
Louper allows users to directly call functions in a contract that implements EIP-2535, as Etherscan does not yet support this. The Beanstalk contract on Louper can be found here.
Solidity has a limit of 2^256 - 1 ~= 1e77
for integers. Beanstalk is a complex protocol that does a lot of multiplication of big numbers which could potentially bring that upper integer limit into play, especially in the Flood functionality. Given that Bean is a stablecoin and the the value peg is $1, there is no need for an excessive amount of decimals. By reducing decimals to increase protocol security in the long run, Beanstalk is better set up for success. Note that USDC and Tether both have 6 decimals.
A lot of tokens have 18 decimals. Non-stable tokens have to be functional at any possible price at any point in the future.
Let's take the example of ETH and say that the ETH price is $4300. $0.01 is about 0.0000023 ETH. Thus, for ETH to be tradable at the cent level, it needs to have at least 7 decimals. Now fast forward 100 years and let's say (hypothetically) that ETH is worth $1,000,000,000. This would require ETH to have 11 decimals to be transacted at a cent level. Thus, it makes sense for ETH to have 18 decimals.
In terms of gas cost, there is no difference between 6 and 18 decimals.
Delegate calls in Solidity allow a smart contract to use functionality stored in another contract’s bytecode and apply it to its own memory.
Traditionally, an upgradeable contract is a proxy address with an implementation contract. All calls to the proxy use the logic stored in the implementation contract, but update the state of the proxy. Thus, by changing a proxy’s implementation address, one can change the functionality in a contract while maintaining the same state and address. You can read about it more on the OpenZeppelin docs here and here. Beanstalk is actually a multi-facet proxy implementation called a Diamond. This implementation is defined by EIP-2535. EIP-2535 allows a single proxy to implement multiple smart contracts at the same time. You can read more about the reasoning behind EIP-2535 usage with Beanstalk here.
Roots were implemented in BIP-0. Roots are an underlying accounting variable for Stalk in order to track how many Earned Beans a Farmer has earned. When a Farmer Deposits assets or Mows Grown Stalk, they are given Roots proportional to the Stalk they receive: newStalk * totalRoots / totalStalk
.
When Beanstalk mints Beans, it increases totalStalk
but not totalRoots
, which in effect, increases stalk / root
. When a Farmer Mows their Grown Stalk, the ratio: farmerStalk / farmerRoots = totalStalk / totalRoots
is restored. (In this formula farmerStalk
is equal to the Stalk they have after Mowing.)
earnedStalk = farmerStalk - totalStalk / totalRoots * farmerRoots
(In this formula farmerStalk
is equal to the Stalk they have before the Mow.) 1 Stalk = 1 Bean, so earnedBeans = earnedStalk
.
From an engineering perspective, building a zero fee AMM is simpler than building an AMM with fees—you can simply skip the code that implements the fee when a swap occurs.
From an economic perspective, the concept is that Silo yield is a sufficient enough incentive to attract and retain liquidity providers such that there is no need to charge a fee on swaps.
Why is having zero fees important? Given that whether deltaB < 0
or deltaB > 0
is a defining data point in how Beanstalk's peg maintenance operates, any fee on swaps creates a serious inefficiency in Farmers' ability to arbitrage the peg. The BEAN:3CRV pool charges a 0.04% on swaps (including Convert). This means that buying or Converting above the price of $0.9996 means you are paying more than $1 per Bean and selling or Converting below $1.0004 means you are getting less than $1 per Bean. Any Farmer who is constantly arbitraging the price within this range is losing money overtime instead of making a profit (which they should be). For reference, the BEAN:ETH pool previously had a 0.3% fee, which created an even more extreme inefficiency in peg maintenance.
In addition, Beanstalk can overtime become the primary liquidity provider for all of DeFi by providing the cheapest on-chain swaps between two non-Bean assets.
Plots function completely differently than both ERC-721 and ERC-1155. ERC-1155 doesn't work for Plots/Pods as Pods require ordinality for FIFO Harvesting. ERC-721 could work for Pods, but its hard to see how this would add value. ERC-721 tokens are non-divisible, so it would only allow entire Plots to be bought and sold on NFT marketplaces, which is far less efficient that the current Pod Market. Implementing Pods as ERC-721 would increase the cost of Sowing, Harvesting, Transferring, buying and selling.
initialize
function?When Fertilizer was originally deployed. It was deployed as the FertilizerPreMint.sol
contract, which has an initialize
function that calls __Internallize_init
here. The initialize
function was run on deployment. When Beanstalk was Replanted, The Fertilizer proxy contract was upgraded to the Fertilizer
contract found here. This is the current implementation contract you see on Etherscan. There was no additional initialization needed as __Internallize_init
was already executed. Thus, the Fertilizer
contract has no need to have an external initialize
function.
On October 25, 2022, two values could be found on the Beanstalk Data Dashboard:
Underlying per urBEAN3CRV: 0.219823021543684162
Underlying per urBEAN: 0.222227
Dividing the two numbers: 0.219823021543684162/0.222227 = 0.9891823
This implies that 1 urBEAN3CRV will only ripen into 0.9891823 BEAN3CRV (i.e., not 1 BEAN3CRV) when Beanstalk is full recapitalized, assuming there are no Chops, no fees, deltaB = 0 and 1 BEAN3CRV = 1 BEAN. 1 urBEAN will ripen into 1 BEAN.
There are numerous reasons for this discrepancy, but the most significant is that deltaB > 0
when the exploit occurred, so the BDV of LP tokens at the time was less than 1.
See FundraiserFacet.sol
.
Fundraisers are meant to mimic an OTC swap where the buyer trades some stablecoin for a Bean and then automatically Sows the bought Beans for Pods, similar to how the credit mechanism to sustain the peg works. As defined in the whitepaper, Sowing requires a Bean to be burned in exchanged for the Pods. At the start of the Fundraiser, Beans are minted. These Beans represent (1) expected "sell pressure" for Beans as they can be sold at anytime for 1 stablecoin (normally USDC) and (2) expected Pod issuance given that the Beans will be Sown into Pods.
totalDollars
is the total dollar value required to be raised in the Barn Raise. It is equal to dollarPerUnripeLP() * unripeLP().totalSupply()
. If no Farmer has forfeited Unripe LP, then totalDollars
is 77 million, but given that Farmer's can chop
their Unripe LP and forfeit the funds they have not yet been paid back, we need totalDollars
to decrease with the total supply of Unripe LP.
if (s.recapitalized >= totalDollars) return 0;
—
A safe guard in case Beanstalk ends up in a situation where too much is raised. This is also possible if someone uses the chop
function at a penalty even after the full amount has been raised.
return totalDollars.sub(s.recapitalized);
—
s.recapitalized
is incremented every time USDC is exchanged for Fertilizer (or Unripe LP is generated through Convert), but it is equal to the dollar value that has been recapitalized. Thus, the difference between the two is the amount remaining.
See EBIP-2.
It is assumed that if |deltaB| > beanSupply / 100
, then manipulation occurred. This isn't always true, but the ramifications if |deltaB| > beanSupply / 100
naturally are minimal as Beanstalk will simply mint fewer Beans/less Soil this Season.
Theoretically, a multi-block MEV attack could manipulate deltaB
to be any value. Multi-block MEV can only be executed on some time cadence dependent on % ownership of Ethereal stake. Therefore, the greatest vulnerability to Beanstalk is a massive one-time Bean/Soil issuance. By adding this supply cap, the maximum effect of potential manipulation can be at most 1% of supply.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Diamond Loupe Facet allows anyone to see the available functions within Beanstalk.
None.
Returns facet info for all facets of Beanstalk
facets_
Facet[]
Array of facet info.
Returns all the function selectors provided by a facet.
_facet
address
Facet to get selectors for.
facetFunctionSelectors_
bytes4[]
Selectors on _facet
.
Get all the facet addresses used by the Beanstalk Diamond.
facetAddresses_
address[]
All facet addresses used by Beanstalk.
Gets the facet that supports the given selector.
_functionSelector
bytes4
Selector to get the corresponding facet for.
facetAddress_
address
Facet that has _functionSelector
.
Returns if a contract implements an interface. Implements ERC-165.
_interfaceId
bytes4
The interface ID, as specified in ERC-165.
bool
True if the contract implements _interfaceId
, false otherwise.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Pause Facet handles the Pausing and Unpausing of Beanstalk.
Pause Beanstalk, which makes it such that the gm
function cannot be successfully called. Only callable by the owner of Beanstalk.
Unpause Beanstalk, which allows the gm
function to be successfully called at the top of the 2nd hour. The TWAP oracle and Season timer are reset as well.
None.
Emitted when Beanstalk is Paused.
timestamp
uint256
Timestamp of the current block when Beanstalk is Paused.
Emitted when Beanstalk is Unpaused.
timestamp
uint256
Timestamp of the current block when Beanstalk is Unpaused.
timePassed
uint256
How much time passed while Beanstalk was Paused.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Diamond Cut Facet is used by the owner to upgrade Beanstalk.
Add, replace, and/or remove any number of functions and optionally execute a function with delegatecall
. Can only be called by the owner of Beanstalk.
_diamondCut
FacetCut[]
Contains the facet addresses and function selectors.
_init
address
The address of the contract or facet to execute _calldata
.
_calldata
bytes
A function call, including function selector and arguments (_calldata
is executed with delegatecall
on _init
).
None.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Token Facet handles the transfers of assets outside the Silo.
Transfers an asset from a Farmer's Internal and/or External Balance to a Farmer's Internal or External Balance.
token
IERC20
The token to be transferred.
recipient
address
The recipient of the transferred tokens (can be msg.sender
).
amount
uint256
The amount of tokens to be transferred.
fromMode
From
toMode
To
WIP
token
IERC20
WIP
sender
address
WIP
recipient
address
WIP
amount
uint256
WIP
toMode
To
WIP
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Wraps Ether into WETH.
amount
uint256
The amount of Ether to wrap into WETH. Must be <= msg.value
.
toMode
To
Unwraps WETH into Ether.
amount
uint256
The amount of WETH to unwrap into Ether.
fromMode
From
account
address
WIP
token
IERC20
WIP
balance
uint256
WIP
account
address
WIP
tokens
IERC20[]
WIP
balances
uint256[]
WIP
account
address
WIP
token
IERC20
WIP
balance
uint256
WIP
account
address
WIP
tokens
IERC20[]
WIP
balances
uint256[]
WIP
account
address
WIP
token
IERC20
WIP
balance
uint256
WIP
account
address
WIP
tokens
IERC20[]
WIP
balances
uint256[]
WIP
account
address
WIP
token
IERC20
WIP
b
Balance
WIP
account
address
WIP
tokens
IERC20[]
WIP
balances
Balance[]
WIP
account
address
WIP
token
IERC20
WIP
delta
int256
WIP
owner
address
WIP
spender
address
WIP
token
IERC20
WIP
amount
uint256
WIP
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Token Support Facet handles permits for ERC-20 and ERC-721 tokens and transfers for ERC-721 and ERC-1155 tokens.
permitERC20
is a wrapper function for permit of ERC20Permit token.
token
IERC20Permit
Token to permit.
owner
address
Owner of the token.
spender
address
Address to permit to spend the token.
value
uint256
Token amount to permit.
deadline
uint256
Expiration of signature (Unix time)
v
uint8
Recovery ID.
r
bytes32
ECDSA signature output.
s
bytes32
ECDSA signature output.
Execute an ERC-721 token transfer.
token
IERC721
Token address of the ERC-721.
to
address
Address being transferred to.
id
uint256
ID of ERC-721 token to transfer.
Execute a permit for an ERC-721 token.
token
IERC4494
Token address to permit.
spender
address
Address to permit to spend the token.
tokenId
uint256
ID of token
to permit.
deadline
uint256
Expiration of signature (Unix time).
sig
bytes
Execute an ERC-1155 token transfer of a single ID.
token
IERC1155
Token address of the ERC-1155.
to
address
Address being transferred to.
id
uint256
ID of the ERC-1155 token.
value
uint256
Number of the ERC-1155 tokens at id
to transfer.
Execute an ERC-1155 token transfer of multiple IDs.
token
IERC1155
Token address of the ERC-1155.
to
address
Address being transferred to.
ids
uint256[]
Array of IDs of the ERC-155 token.
values
uint256[]
Array of amounts of ERC-1155s at id
to transfer.
None.
None.
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Curve Facet handles swapping in, adding liquidity to, and removing liquidity from Curve pools without assets leaving Beanstalk.
Swaps a token for another token in a Curve base, meta, plain or crypto pool. Slippage is tolerated on the amount out. It also verifies that the pool exists in the Curve Factory. This function does not support underlying tokens.
The stable pair Curve Factory can be found at: 0xB9fC157394Af804a3578134A6585C0dc9cc990d4
The non-stable Curve factory can be found at: 0x0959158b6040D32d04c301A72CBFD6b39E21c9AE
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
registry
address
The Curve Registry to query pool
data from.
fromToken
address
The token to swap from.
toToken
address
The token to swap to.
amountIn
uint256
The amount to swap from.
minAmountOut
uint256
The minimum amount to receive from the swap.
fromMode
From
toMode
To
Swaps an underlying token for another underlying token in a Curve metapool. In a Curve metapool, one of the tokens is an LP token of another pool. Underlying tokens include the non-LP token in the pool as well as the tokens in the pool that the LP token belongs to. For example, in the BEAN:3CRV metapool, the underlying tokens are Bean, USDC, Tether and Dai.
Slippage is tolerated on the amount out. This function verifies that the pool exists in the Curve Factory.
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
fromToken
address
The underlying token to swap from.
toToken
address
The underlying token to swap to.
amountIn
uint256
The amount to swap from.
minAmountOut
uint256
The minimum amount to receive from the swap.
fromMode
From
toMode
To
Adds tokens into a liquidity pool on Curve in exchange for LP tokens.
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
registry
address
The Curve Registry to query pool
data from.
amounts
uint256[]
The amount of each token to add.
minAmountOut
uint256
The minimum amount to receive from the swap.
fromMode
From
toMode
To
Removes liquidity from a pool on Curve in exchange for equal amounts of all tokens in the liquidity pool. The Farmer burns their LP tokens in the process.
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
registry
address
The Curve Registry to query pool
data from.
amountIn
uint256
The amount of LP to remove.
minAmountsOut
uint256[]
The minimum amount to receive in each of the tokens.
fromMode
From
toMode
To
Removes liquidity from a pool on Curve in exchange for an unequal amounts of tokens in the liquidity pool. The Farmer burns LP tokens in the process.
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
registry
address
The Curve Registry to query pool
data from.
amountsOut
uint256[]
The amount of each token to receive.
maxAmountIn
uint256
The max amount of LP tokens to burn.
fromMode
From
toMode
To
Removes liquidity from a pool on Curve in exchange for an amount of one token in the liquidity pool. The Farmer burns LP tokens in the process.
pool
address
The address of the pool to exchange in. The pool must be registered in one of the Curve Factories.
registry
address
The Curve Registry to query pool
data from.
toToken
address
The token to receive in exchange for burning LP tokens.
amountIn
uint256
The amount of LP tokens to burn.
minAmountOut
uint256
The minimum amount of the token to receive.
fromMode
From
toMode
To
None.
None.
The Beanstalk codebase currently uses several terms that are out of date with the whitepaper, the Beanstalk UI, the Farmers' Almanac, etc. The following is a list of outdated terminology used in the Beanstalk codebase and the associated proper terms.
The following discrepancies are in the .
Note that this page has not been updated to reflect the current state of Beanstalk, but is left here as a reference.
The Ownership Facet handles the ownership of Beanstalk.
Transfers ownership of Beanstalk to a new address. Can only be called by the owner of Beanstalk.
Callable by candidate for ownership after a successful transferOwnership
function call.
Returns the address of the owner of Beanstalk.
Returns the owner candidate of Beanstalk.
Emitted when ownership of Beanstalk is transferred.
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to send the WETH to (see ).
Specifies what balance to receive the WETH from (see ).
A valid secp256k1
or signature from owner of the tokenId
.
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
Specifies what balance to receive the tokens from (see ).
Specifies what balance to sent the tokens to (see ).
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
Specifies what balance to receive the tokens from (see ).
Specifies what balance to send the tokens to (see ).
owner_
address
The address of the owner of Beanstalk.
ownerCandidate_
address
The owner candidate of Beanstalk.
previousOwner
address
The previous owner of Beanstalk.
newOwner
address
The new owner of Beanstalk.
Internal Balance
Farm Balance
External Balance
Circulating Balance
Marketplace
Pod Market
Unfertilized Beans
Sprouts
Fertilized Beans
Rinsable Sprouts
Claim Fertilized
Rinse
Underlying assets (w.r.t. Unripe assets)
Ripe assets
Earned Seeds
Plantable Seeds
Season of Plenty
Flood
[not explicitly referenced]
Deposit Whitelist
[not explicitly referenced]
Convert Whitelist
[not explicitly referenced]
Oracle Whitelist
Plantable Stalk
Earned Stalk
Pod Marketplace
Pod Market
_newOwner
address
The address to transfer ownership to.
A catalog of each Beanstalk upgrade, pause/unpause and event change.
Select a block to view event changes:
8/6/2021
-
12974075
1.0.0
Contract Creation
n/a
n/a
n/a
n/a
8/6/2021
1
12974077
1.0.0
init
Call
-
-
-
-
8/9/2021
66
12991967
1.0.1
Accounting Hotfix
-
-
-
-
8/18/2021
286
13051341
1.0.2
Accounting Hotfix
-
-
-
-
-
8/18/2021
287
13051707
1.0.3
Accounting Hotfix
-
-
-
-
-
8/19/2021
312
1.1.0
-
Vote
, Unvote
-
-
9/21/2021
1101
13271109
1.1.1
Accounting Hotfix
-
-
-
-
-
9/22/2021
1125
13277484
1.1.1
Accounting Hotfix
-
-
-
-
9/23/2021
1131
13279160
1.1.2
Accounting Hotfix
-
-
-
10/15/2021
1674
13423680
1.2.0
-
-
-
-
11/11/2021
2329
1.3.0
BeanAllocation
, BeanClaim
, LPClaim
, EtherClaim
, Harvest
-
-
-
11/17/2021
2466
13634175
1.3.1
BIP-2 Patch 1
-
-
-
-
11/22/2021
2590
13666663
1.3.1
BIP-2 Patch 2
-
-
-
-
11/24/2021
2618
13674011
1.3.1
Pause
-
-
-
-
-
11/24/2021
2618
13677026
1.3.1
BIP-2 Patch 3
-
-
-
-
11/24/2021
2618
13677028
1.3.1
Unpause
-
-
-
-
-
11/24/2021
2625
13678942
1.3.1
BIP-2 Patch 3
-
-
-
-
-
-
-
1.3.1
-
-
-
-
-
-
12/3/2021
2840
1.4.0
CreateFundraiser
, FundFundraiser
, CompleteFundraiser
-
-
-
12/3/2021
2840
13735257
1.4.0
-
-
-
-
-
12/5/2021
2893
13748759
1.4.0
-
-
-
-
12/14/2021
3088
1.5.0
LPDeposit
, LPRemove
, BeanRemove
-
-
-
1/6/2022
3645
13950446
1.5.0
-
-
-
-
1/6/2022
3658
1.6.0
Sow
, VoteList
, BeanDeposit
, LPDeposit
-
-
-
2/4/2022
4335
14136449
1.6.0
-
-
-
-
2/5/2022
4379
1.7.0
PodListingCreated
, PodListingFilled
, PodListingCancelled
, PodOrderCreated
, PodOrderFilled
, PodOrderCancelled
, PlotTransfer
, PodApproval
-
-
-
2/16/2022
4641
1.8.0
BeanAllocation
, Deposit
, RemoveSeasons
, RemoveSeason
, Withdraw
, ClaimSeasons
, ClaimSeason
-
-
-
3/12/2022
5200
14369158
1.9.0
-
-
-
-
4/1/2022
5681
1.9.1
Hotfix: Omniscia Audit Update
-
See below
-
-
4/1/2022
5681
1.9.1
Hotfix: Omniscia Audit Update
-
See below
-
-
4/1/2022
5681
1.9.1
Hotfix: Omniscia Audit Update
-
VoteList
-
-
4/7/2022
5844
14541362
1.9.1
-
-
-
-
4/7/2022
5844
14541420
1.15.0
-
-
-
-
4/8/2022
5867
14547427
1.16.0
-
-
-
-
-
-
-
1.16.0
-
-
-
-
-
-
4/17/2022
6074
14602790
1.16.0
-
-
-
-
-
-
-
-
1.16.0
-
-
-
-
-
-
4/17/2022
6074
14603731
1.16.0
Pause
-
-
-
-
-
4/17/2022
6074
14603734
1.16.0
Remove governance functions
-
-
-
-
-
4/18/2022
6074
14611125
1.16.0
Remove exploiter's Beans
-
-
-
-
-
4/19/2022
6074
14618005
1.16.0
Remove all write functions
-
-
-
-
-
6/4/2022
6074
14900249
1.16.0
-
-
-
-
-
6/21/2022
6074
15004465
1.16.0
-
-
-
-
-
6/21/2022
6074
15004541
1.16.0
-
-
-
-
-
6/21/2022
6074
15004593
1.16.0
-
-
-
-
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/4/2022
6074
2.0.0
See below
See below
See below
-
8/5/2022
6074
2.0.0
Convert
, RemoveDeposits
, SetFertilizer
, OwnershipTransferred
, MetapoolOracle
, Reward
, Soil
, Plant
, ClaimPlenty
, SeedsBalanceChanged
, StalkBalanceChanged
, AddDeposit
, RemoveDeposit
, AddWithdrawal
, RemoveWithdrawals
, RemoveWithdrawal
, InternalBalanceChanged
, AddUnripeToken
, ChangeUnderlying
, Chop
, Pick
, WhitelistToken
, DewhitelistToken
, RemoveSeason
, PodOrderCancelled
, ClaimFertilizer
, MetapoolOracle
, MockConvert
, UpdateTWAPs
, DeltaB
PodListingCreated
, SeasonOfPlenty
, Pause
, Unpause
EtherClaim
, BeanAllocation
, LPDeposit
, Proposal
, VoteList
, Unvote
, Commit
, Incentivization
, Vote
, SeasonSnapshot
, SupplyIncrease
, SupplyDecrease
, SupplyNeutral
, BeanDeposit
, BeanWithdraw
, LPWithdraw
, Deposit
, RemoveSeason
, Withdraw
-
8/6/2022
6074
15289539
2.0.0
-
-
-
-
-
8/10/2022
6158
15312400
2.0.1
-
-
-
-
8/17/2022
6328
15357193
2.0.1
-
-
-
-
8/17/2022
6328
15357198
2.0.1
-
-
-
-
9/5/2022
6799
15480267
2.0.2
-
-
-
-
9/13/2022
6987
15528219
2.0.3
-
-
-
-
10/5/2022
7521
2.1.0
DepositApproval
, SeedsBalanceChanged
, StalkBalanceChanged
-
-
-
10/5/2022
7521
15685230
2.1.0
-
-
-
-
-
-
-
2.1.0
-
-
-
-
-
10/6/2022
7540
15690858
2.1.0
-
-
-
-
10/8/2022
7584
2.1.0
-
-
-
SeedsBalanceChanged
, StalkBalanceChanged
10/25/2022
8000
15828214
2.1.1
-
-
-
-
11/1/2022
8151
15872969
2.1.1
-
-
-
-
-
11/1/2022
8151
15872973
2.1.1
-
-
-
-
-
-
-
-
2.1.1
-
-
-
-
-
-
11/12/2022
8412
2.2.0
TokenApproval
PodListingCreated
, PodListingFilled
, PodOrderCreated
, PodOrderFilled
-
-
11/13/2022
8434
15957625
2.2.1
-
-
-
-
-
11/14/2022
8477
15970409
2.2.2
-
-
-
-
-
11/16/2022
8506
15979107
2.2.3
-
-
-
-
11/22/2022
8672
16028530
2.2.3
-
-
-
-
-
11/28/2022
8810
16069756
2.2.3
-
-
-
-
-
11/28/2022
8810
16069765
2.2.3
-
-
-
-
-
12/8/2022
9057
16143379
2.3.0
-
-
-
-
12/9/2022
9063
16145166
2.3.1
-
-
-
-
-
-
-
2.3.1
-
-
-
-
-
-
-
-
-
2.3.1
-
-
-
-
-
-
02/09/2023
10561
16592011
2.3.1
-
-
-
-
05/04/2023
12577
2.4.0
-
-
MetapoolOracle
-
-
-
-
2.4.0
-
-
-
-
-
-
05/13/2023
12793
17251905
2.4.1
-
-
-
-
07/11/2023
14210
2.5.0
TransferBatch
, TransferSingle
, ApprovalForAll
, RemoveDeposit
, UpdatedStalkPerBdvPerSeason
AddDeposit
, RemoveDeposit
, RemoveDeposits
, WhitelistToken
AddWithdrawal
, SeedsBalanceChanged
-
08/30/2023
15410
2.6.0
RemoveDeposit
, RemoveDeposits
, URI
WhitelistToken
RemoveDeposit
-
10/20/2023
16634
2.7.0
SwitchUnderlyingToken
-
-
-
10/21/2023
16644
18395692
2.7.1
-
-
-
-
10/23/2023
16711
18415636
2.7.2
-
-
-
-
10/30/2023
16880
18465853
2.7.3
-
-
-
-
11/08/2023
17091
18528816
2.7.4
-
-
-
-
-
11/09/2023
17120
18537472
2.7.5
-
-
-
-
-
-
-
2.7.5
-
-
-
-
-
-
02/05/2024
19215
19159869
2.7.6
-
-
-
-
02/26/2024
19717
19308933
2.7.6
-
-
-
-
02/26/2024
19717
19308941
2.7.6
-
-
-
-
-
-
-
2.7.6
-
-
-
-
-
-
-
-
-
2.7.6
-
-
-
-
-
-
-
-
-
2.7.6
-
-
-
-
-
-
05/22/2024
21797
2.8.0
TemperatureChange
, UpdateAverageStalkPerBdvPerSeason
, GaugePointChange
, BeanToMaxLpGpPerBdvRatioChange
, FarmerGerminatingStalkBalanceChanged
, TotalGerminatingBalanceChanged
, TotalGerminatingStalkChanged
, TotalStalkChangedFromGermination
, UpdateGaugeSettings
, AddWhitelistStatus
, RemoveWhitelistStatus
, UpdateWhitelistStatus
WhitelistToken
, SeasonOfPlenty
, ClaimPlenty
WeatherChange
-
05/22/2024
21797
19927634
2.8.0
-
-
-
-
05/24/2024
21830
19937474
2.8.1
-
-
-
-
06/02/2024
22043
20000923
2.8.2
-
-
-
-
-
-
-
2.8.2
-
-
-
-
-
07/16/2024
23118
20321455
2.8.3
-
-
-
-
07/26/2024
23347
20389706
2.9.0
-
-
-
-
08/05/2024
23594
20463431
2.10.0
-
-
-
-
10/08/2024
25129
3.0.0
UpdatedSeedGaugeSettings
, UpdatedOptimalPercentDepositedBdvForToken
, UpdatedOracleImplementationForToken
, UpdatedGaugePointImplementationForToken
, UpdatedLiquidityWeightImplementationForToken
, FieldAdded
, ActiveFieldSet
, PublishRequisition
, CancelBlueprint
, Tractor
, ShipmentRoutesSet
, UpdatedEvaluationParameters
, Receipt
, Shipped
, SeasonOfPlentyWell
, SeasonOfPlentyField
, MigratedAccountStatus
, MigratedPlot
, InternalBalanceMigrated
, MigratedPodListing
, MigratedPodOrder
, AddMigratedDeposit
, FertilizerMigrated
FarmerGerminatingStalkBalanceChanged
, WhitelistToken
, Sow
, Harvest
, TemperatureChange
, PodListingCreated
, PodListingFilled
, PodListingCancelled
, PodOrderCreated
, PodOrderFilled
, PodOrderCancelled
, PlotTransfer
, PodApproval
SeedsBalanceChanged
, RemoveWithdrawal
, RemoveWithdrawals
, UpdateGaugeSettings
, Reward
, SeasonOfPlenty
-
-
-
-
3.0.0
-
-
-
-
-
-
10/13/2024
25202
263242481
3.0.1
-
-
-
-
(original event listed first, updated event second)
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/ClaimFacet.sol protocol/contracts/farm/facets/SiloFacet/SiloFacet.sol protocol/contracts/libraries/LibMarket.sol
protocol/contracts/libraries/LibClaim.sol
protocol/contracts/libraries/LibClaim.sol
protocol/contracts/libraries/LibClaim.sol
protocol/contracts/libraries/LibClaim.sol
protocol/contracts/farm/facets/FundraiserFacet.sol
protocol/contracts/farm/facets/FundraiserFacet.sol
protocol/contracts/farm/facets/FundraiserFacet.sol
protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.sol
protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.sol
protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.sol
protocol/contracts/farm/facets/FieldFacet/BeanDibbler.sol protocol/contracts/farm/facets/FundraiserFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/SiloFacet/BeanSilo.sol protocol/contracts/libraries/Silo/LibBeanSilo.sol
protocol/contracts/libraries/Silo/LibLPSilo.sol
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol protocol/contracts/libraries/LibClaim.sol
protocol/contracts/farm/facets/MarketplaceFacet/Order.sol
protocol/contracts/farm/facets/MarketplaceFacet/Order.sol
protocol/contracts/farm/facets/MarketplaceFacet/Order.sol
protocol/contracts/farm/facets/MarketplaceFacet/PodTransfer.sol
protocol/contracts/farm/facets/MarketplaceFacet/PodTransfer.sol
protocol/contracts/farm/facets/SiloV2Facet/SiloV2Facet.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol protocol/contracts/libraries/Silo/LibTokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
(original event listed first, updated event second)
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/ConvertFacet.sol
protocol/contracts/farm/facets/ConvertFacet.sol protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/facets/FertilizerFacet.sol protocol/contracts/libraries/LibFertilizer.sol
protocol/contracts/farm/facets/OwnershipFacet.sol
protocol/contracts/farm/facets/SeasonFacet/Oracle.sol
protocol/contracts/farm/facets/SeasonFacet/Sun.sol
protocol/contracts/farm/facets/SeasonFacet/Sun.sol
protocol/contracts/farm/facets/SiloFacet/Silo.sol
protocol/contracts/farm/facets/SiloFacet/Silo.sol
protocol/contracts/farm/facets/SiloFacet/Silo.sol protocol/contracts/farm/init/replant/Replant7.sol protocol/contracts/libraries/Silo/LibSilo.sol
protocol/contracts/farm/facets/SiloFacet/Silo.sol protocol/contracts/farm/init/replant/Replant7.sol protocol/contracts/libraries/Silo/LibSilo.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol protocol/contracts/farm/init/replant/Replant5.sol protocol/contracts/farm/init/replant/Replant6.sol protocol/contracts/libraries/Silo/LibTokenSilo.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/facets/TokenFacet.sol protocol/contracts/libraries/Token/LibBalance.sol
protocol/contracts/farm/facets/UnripeFacet.sol protocol/contracts/farm/init/replant/Replant8.sol
protocol/contracts/farm/facets/UnripeFacet.sol protocol/contracts/libraries/LibUnripe.sol
protocol/contracts/farm/facets/UnripeFacet.sol
protocol/contracts/farm/facets/UnripeFacet.sol
protocol/contracts/farm/facets/WhitelistFacet.sol protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/farm/facets/WhitelistFacet.sol protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/farm/init/replant/Replant1.sol protocol/contracts/farm/init/replant/Replant6.sol
protocol/contracts/farm/init/replant/Replant3.sol
protocol/contracts/fertilizer/Fertilizer.sol
protocol/contracts/libraries/Oracle/LibCurveOracle.sol
protocol/contracts/mocks/mockFacets/MockConvertFacet.sol
protocol/contracts/mocks/mockFacets/MockSeasonFacet.sol
protocol/contracts/mocks/mockFacets/MockSeasonFacet.sol
protocol/contracts/farm/facets/ClaimFacet.sol protocol/contracts/libraries/LibClaim.sol
protocol/contracts/farm/facets/ClaimFacet.sol protocol/contracts/farm/facets/SiloFacet/SiloFacet.sol protocol/contracts/farm/facets/SiloV2Facet/SiloV2Facet.sol protocol/contracts/libraries/LibMarket.sol
protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.sol protocol/contracts/farm/facets/SiloFacet/LPSilo.sol protocol/contracts/libraries/Silo/LibLPSilo.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/VotingBooth.sol
protocol/contracts/farm/facets/SeasonFacet/SeasonFacet.sol
protocol/contracts/farm/facets/SeasonFacet/Sun.sol
protocol/contracts/farm/facets/SeasonFacet/Sun.sol
protocol/contracts/farm/facets/SeasonFacet/Sun.sol
protocol/contracts/farm/facets/SiloFacet/BeanSilo.sol protocol/contracts/libraries/Silo/LibBeanSilo.sol protocol/contracts/libraries/Silo/LibSilo.sol
protocol/contracts/farm/facets/SiloFacet/BeanSilo.sol
protocol/contracts/farm/facets/SiloFacet/LPSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol protocol/contracts/libraries/Silo/LibTokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.sol
(original event listed first, updated event second)
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol
protocol/contracts/farm/facets/SeasonFacet/Weather.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol protocol/contracts/farm/facets/PauseFacet.sol
protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.sol
protocol/contracts/farm/facets/SiloFacet/TokenSilo.sol
protocol/contracts/farm/init/InitSiloEvents.sol
protocol/contracts/farm/init/InitSiloEvents.sol
protocol/contracts/farm/init/InitSiloEvents.sol
protocol/contracts/farm/init/InitSiloEvents.sol
protocol/contracts/farm/facets/TokenFacet.sol protocol/contracts/libraries/Token/LibTokenApprove.sol
(original event listed first, updated event second)
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol
protocol/contracts/farm/facets/MarketplaceFacet/Listing.sol
protocol/contracts/farm/facets/MarketplaceFacet/Order.sol
protocol/contracts/farm/facets/MarketplaceFacet/Order.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Oracle.sol
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol
protocol/contracts/beanstalk/silo/ApprovalFacet.sol
protocol/contracts/beanstalk/silo/ConvertFacet.sol
protocol/contracts/beanstalk/silo/WhitelistFacet.sol
(original event listed first, updated event second)
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol protocol/contracts/beanstalk/silo/ConvertFacet.sol
protocol/contracts/beanstalk/silo/WhitelistFacet.sol
protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.sol
protocol/contracts/beanstalk/silo/SiloFacet/Silo.sol
protocol/contracts/beanstalk/silo/EnrootFacet.sol
protocol/contracts/beanstalk/silo/EnrootFacet.sol
protocol/contracts/beanstalk/metadata/MetadataFacet.sol
(original event listed first, updated event second)
protocol/contracts/beanstalk/silo/WhitelistFacet.sol
protocol/contracts/beanstalk/silo/ConvertFacet.sol
protocol/contracts/beanstalk/barn/UnripeFacet.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
protocol/contracts/libraries/LibGauge.sol
protocol/contracts/libraries/LibGauge.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
protocol/contracts/libraries/Silo/LibGerminate.sol
protocol/contracts/libraries/Silo/LibGerminate.sol
protocol/contracts/libraries/Silo/LibGerminate.sol
protocol/contracts/libraries/Silo/LibGerminate.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/libraries/Silo/LibWhitelistedTokens.sol
protocol/contracts/libraries/Silo/LibWhitelistedTokens.sol
protocol/contracts/libraries/Silo/LibWhitelistedTokens.sol
(original event listed first, updated event second)
protocol/contracts/beanstalk/silo/WhitelistFacet/WhitelistFacet.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
protocol/contracts/beanstalk/silo/SiloFacet/Silo.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/beanstalk/field/FieldFacet.sol
protocol/contracts/beanstalk/field/FieldFacet.sol
protocol/contracts/beanstalk/farm/TractorFacet.sol
protocol/contracts/beanstalk/farm/TractorFacet.sol
protocol/contracts/beanstalk/farm/TractorFacet.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Distribution.sol
protocol/contracts/beanstalk/silo/WhitelistFacet/WhitelistFacet.sol
protocol/contracts/libraries/LibReceiving.sol
protocol/contracts/libraries/LibShipping.sol
protocol/contracts/libraries/Silo/LibFlood.sol
protocol/contracts/libraries/Silo/LibFlood.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedAccountStatus.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedField.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedInternalBalances.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedPodMarket.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedPodMarket.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedSilo.sol
protocol/contracts/beanstalk/init/reseed/L2/ReseedBarn.sol
(original event listed first, updated event second)
protocol/contracts/libraries/Silo/LibGerminate.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/beanstalk/field/FieldFacet.sol
protocol/contracts/beanstalk/field/FieldFacet.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.sol
protocol/contracts/libraries/LibMarket.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Order.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Order.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/Order.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/PodTransfer.sol
protocol/contracts/beanstalk/market/MarketplaceFacet/PodTransfer.sol
protocol/contracts/libraries/Silo/LibLegacyTokenSilo.sol
protocol/contracts/libraries/Silo/LibLegacyTokenSilo.sol
protocol/contracts/libraries/Silo/LibLegacyTokenSilo.sol
protocol/contracts/libraries/Silo/LibWhitelist.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Sun.sol
protocol/contracts/beanstalk/sun/SeasonFacet/Weather.sol
(0x40b2
)
(ccce0
)
(0xec46
)
(ccce0
)
(0xb4ba
)
(a70db
)
(0x5470
)
(0x1d67
)
(0xe748
)
(43c91
)
(0x543a
)
(0xfdc2
)
(eof57
)
(0x8dce
)
(1cc19
)
(0xe077
)
(1f795
)
(0x9eed
)
(77b11
)
(0x8189
)
(69453
)
(0x8463
)
(7e198
)
(0x6221
)
(0x8b73
)
(51d28
)
(0x21c4
)
(0x7dbf
)
(51d28
)
(Failed)
(0xfb5f
)
(76a6a
)
(0x8ded
)
(0x93d2
)
(160a3
)
(0x91e2
)
(b3c9c
)
(0x8644
)
(cd637
)
(0xc3eb
)
(01db9
)
(0x74ff
)
(c4b53
)
(0xf5e8
)
(75a67
)
(0x3a5b
)
(4a4a6
)
(0x72d3
)
(a50d4
)
(0x1aa7
)
(ee472
)
(0xcf50
)
(ee472
)
(0x4b5b
)
(ee472
)
(0x7025
)
(2fd2f
)
(0x7f12
)
(8bf07
)
(0x47f8
)
(f5e69
)
(Failed)
(0xcd31
)
(Governance exploit)
(Governance exploit)
(0xb983
)
(0x4eb2
)
(0xb62d
)
(0x09ea
)
(0xb155
)
- Remove exploiter's balances
(0xfcd4
)
(0x1d59
)
(0xb84b
)
(0x10e8
)
- WTP-3: Remove Bean Withdrawals, Harvestable Plots and corresponding Pod Listings and Pod Orders
(f0e29
)
(0x900a
)
- WTP-4: Remove LP Withdrawals
(f0e29
)
(0xac98
)
- WTP-5: Migrate Bean Deposits to Unripe Bean Deposits
(f0e29
)
(0x79ca
)
- WTP-5: 2/9
(f0e29
)
(0xea39
)
- WTP-5: 3/9
(f0e29
)
(0xa0b0
)
- WTP-5: 4/9
(f0e29
)
(0xc62d
)
- WTP-5: 5/9
(f0e29
)
(0xc685
)
- WTP-5: 6/9
(f0e29
)
(0x3665
)
- WTP-5: 7/9
(f0e29
)
(0x1c33
)
- WTP-5: 8/9
(f0e29
)
(0xabd5
)
- WTP-5: 9/9
(f0e29
)
(0xb643
)
- WTP-6: Migrate LP Deposits to Unripe LP Deposits
(f0e29
)
(0x81be
)
- WTP-6: 2/17
(f0e29
)
(0xd9b5
)
- WTP-6: 3/17
(f0e29
)
(0x6c7d
)
- WTP-6: 4/17
(f0e29
)
(0x9900
)
- WTP-6: 5/17
(f0e29
)
(0x9c05
)
- WTP-6: 6/17
(f0e29
)
(0x1fb9
)
- WTP-6: 7/17
(f0e29
)
(0xe668
)
- WTP-6: 8/17
(f0e29
)
(0x9475
)
- WTP-6: 9/17
(f0e29
)
(0x208e
)
- WTP-6: 10/17
(f0e29
)
(0x121f
)
- WTP-6: 11/17
(f0e29
)
(0x54a3
)
- WTP-6: 12/17
(f0e29
)
(0x0e38
)
- WTP-6: 13/17
(f0e29
)
(0x30d3
)
- WTP-6: 14/17
(f0e29
)
(0x5897
)
- WTP-6: 15/17
(f0e29
)
(0xdd73
)
- WTP-6: 16/17
(f0e29
)
(0xf751
)
- WTP-6: 17/17
(f0e29
)
(0x9992
)
- WTP-7: Prune Stalk/Seeds and Deposit Earned Beans as Unripe Beans
(f0e29
)
(0xf99c
)
- WTP-7: 2/27
(f0e29
)
(0x1af3
)
- WTP-7: 3/27
(f0e29
)
(0x1cf1
)
- WTP-7: 4/27
(f0e29
)
(0x4c30
)
- WTP-7: 5/27
(f0e29
)
(0xd251
)
- WTP-7: 6/27
(f0e29
)
(0xe23b
)
- WTP-7: 7/27
(f0e29
)
(0x4cac
)
- WTP-7: 8/27
(f0e29
)
(0x4b21
)
- WTP-7: 9/27
(f0e29
)
(0xdb9f
)
- WTP-7: 10/27
(f0e29
)
(0x0225
)
- WTP-7: 11/27
(f0e29
)
(0x16d3
)
- WTP-7: 12/27
(f0e29
)
(0x4dba
)
- WTP-7: 13/27
(f0e29
)
(0x1679
)
- WTP-7: 14/27
(f0e29
)
(0x8289
)
- WTP-7: 15/27
(f0e29
)
(0xee21
)
- WTP-7: 16/27
(f0e29
)
(0x04a8
)
- WTP-7: 17/27
(f0e29
)
(0x6f37
)
- WTP-7: 18/27
(f0e29
)
(0xec5d
)
- WTP-7: 19/27
(f0e29
)
(0xf4f5
)
- WTP-7: 20/27
(f0e29
)
(0x4440
)
- WTP-7: 21/27
(f0e29
)
(0x70cd
)
- WTP-7: 22/27
(f0e29
)
(0xb9af
)
- WTP-7: 23/27
(f0e29
)
(0x99fd
)
- WTP-7: 24/27
(f0e29
)
(0xa9ee
)
- WTP-7: 25/27
(f0e29
)
(0xe764
)
- WTP-7: 26/27
(f0e29
)
(0xb6c6
)
- WTP-7: 27/27
(f0e29
)
(0xfde4
)
- WTP-8: Deploy Bean, BEAN:3CRV, Unripe Bean and Unripe BEAN:3CRV tokens, mint initial supplies and initialize Silo Whitelist
(f0e29
)
(0x26f8
)
- Replant
(f0e29
)
(0x4145
)
- Unpause
(0x7949
)
(a9587
)
(0x7a3e
)
(22523
)
(0x40f3
)
(cf8dd
)
(0x0100
)
(5a05e
)
(0x1ca1
)
(ddf38
)
(0x2b54
)
(9ca85
)
(0xd335
)
(6fb65
)
(Immunefi)
(fb536
)
(0x983e
)
(16b25
)
(0xa896
)
(9ca85
)
(0xaa7c
)
(b2b7b
)
(0x1f3d
)
(0x5fa4
)
(Cancelled)
(0x5e1d
)
(c20cd
)
(0x1ad6
)
(0x74f5
)
(0x7e0f
)
(4ee40
)
(0x89c4
)
(0x1372
)
(0xc63e
)
(0xcbac
)
(fd132
)
(0xce27
)
(3b36f
)
(Failed)
(Failed)
(0x76fc
)
(fa2dc
)
(0x7f6f
)
(a03b8
)
(0x22e5
)
(75ad3
)
(0x17ca
)
(36d3c
)
(0x128f
)
(81435
)
(0xa256
)
(26dd4
)
(0x889a
)
(2ad90
)
(0xe359
)
(87e0e
)
(0x6157
)
(2fb32
)
(0xf534
)
(0xc77c
)
(1c6f5
)
(Failed)
(0x4b7e
)
(d7769
)
(0x2b11
)
(ef38a
)
(0x1378
)
(9460e
)
(Cancelled)
(Failed)
(Failed)
(0x299a
)
(2cd4c
)
(0x299a
)
(2f896
)
(0x77f7
)
(d634c
)
(0xafb3
)
(88018
)
(b14cc
)
(0x60e2
)
(36b85
)
(0xc6fd
)
(1b456
)
(0xf730
)
(b5a1e
)
(0x1360
)
(99bc4
)
(0x83f7
)
(a2666
)