arrow-left

Only this pageAll pages
gitbookPowered by GitBook
1 of 45

Agronomics Handbook

Loading...

Overview

Loading...

Loading...

Loading...

Loading...

Loading...

Protocol

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...

Misc.

Loading...

Loading...

Loading...

App Storage

Because Beanstalk is a single contract, all of the Facets can share a common state through the AppStoragearrow-up-right pattern.

Each Facet should define the AppStorage storage variable in the base contract and define no other internal or public state variables.

AppStorage internal s;

The AppStorage struct can be found in the AppStorage.solarrow-up-right 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 uint128s 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.)

Agronomics Handbook

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.20arrow-up-right for intended use in the EVMarrow-up-right. Beanstalk leverages EIP-2535arrow-up-right to minimize gas costs and complexity.

The contract code can be found below. Beanstalk is deployed at 0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70arrow-up-right.

  • If you are looking for non-technical documentation about Beanstalk, check out the .

  • If you are looking for comprehensive formulas behind Beanstalk's mechanics, check out the .

  • 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 .

hashtag
Links

EIP-2535 Diamond

The Beanstalk contract is a Diamond – a multi-facet proxy defined in that can implement functionality from numerous different Facet contracts.

All the Facets share a common storage through the 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.

hashtag
What is a Diamond?

Introduction

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 that the Beanstalk economy is based on.

Beanstalk implements several novel mechanisms including a first-in-first-out (FIFO) supplemented by

  • Farmers' Almanacarrow-up-right
    Beanstalk whitepaperarrow-up-right
    herearrow-up-right
    Technical Introduction
    Development Ethos
    Protocol Overview
  • hashtag
    Implementation Tips for Diamonds (which Beanstalk uses)

    hashtag
    Why use a Diamond?

    hashtag
    More Information on Diamonds

    EIP-2535arrow-up-right
    AppStoragearrow-up-right
    ,
    that increases the opportunity cost of withdrawing the longer an asset stays deposited in the DAO and
    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 for intended use in the . Beanstalk leverages to minimize gas costs and complexity.

    Beanstalk consists of 2 main contracts:

    • Beanstalk - The protocol responsible for peg maintenance implemented as an multi-facet proxy.

    • Bean – The stablecoin implemented as an token.

    hashtag
    Contracts

    Beanstalk is deployed at .

    Bean is deployed at .

    All relevant contract addresses can be found on the page of the .

    the positive carryarrow-up-right
    debt modelarrow-up-right
    an on-chain order bookarrow-up-right
    EIP-2535arrow-up-right
    Understanding Diamonds on Ethereumarrow-up-right
    How Diamond Upgrades Workarrow-up-right
    AppStorage Pattern for State Variables in Solidityarrow-up-right
    How to Share Functions Between Facets of a Diamondarrow-up-right
    Accessing State Variables in Librariesarrow-up-right
    Ethereum's Maximum Contract Size Limit is Solved with the Diamond Standardarrow-up-right
    🌱 Beanstalk 🤝 EIP-2535 💎arrow-up-right
    Ethereum Diamonds Solve These Problemsarrow-up-right
    Beanstalk on Louper, The Ethereum Diamond Inspectorarrow-up-right
    EIP-2535 Diamonds Discordarrow-up-right
    Nick Mudge <> Publius Podcastarrow-up-right
    a time-weighted staking structurearrow-up-right
    a convert mechanismarrow-up-right
    Solidity v0.8.20arrow-up-right
    EVMarrow-up-right
    EIP-2535arrow-up-right
    EIP-2535arrow-up-right
    ERC-20arrow-up-right
    0xD1A0060ba708BC4BCD3DA6C37EFa8deDF015FB70arrow-up-right
    0xBEA0005B8599265D41256905A9B3073D397812E4arrow-up-right
    Contractsarrow-up-right
    Farmers' Almanacarrow-up-right
    Beanstalk on GitHubarrow-up-right
    Contract Addressesarrow-up-right
    Glossaryarrow-up-right

    Development Ethos

    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 and 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. implemented capital efficient pricing curves. Bancor built an omnipool, providing impermanent loss protection. supports a 0% (customizable) fee AMM.

    Open source protocols are a public good. More than 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.

    Uniswaparrow-up-right
    Bancorarrow-up-right
    Curvearrow-up-right
    Basinarrow-up-right
    250arrow-up-right

    Farm

    circle-exclamation

    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:

    Diamond

    circle-exclamation

    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:

    Field

    circle-exclamation

    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.

    Pause Facet

    circle-exclamation

    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.

    hashtag

    Token Support Facet
  • Curve Facet

  • Farm Facet
    Depot Facet
    Token Facet
    Pause Facet
    Diamond Cut Facet
    Diamond Loupe Facet
    Ownership Facet
    Call Functions

    hashtag
    Pausearrow-up-right

    Pause Beanstalk, which makes it such that the gm function cannot be successfully called. Only callable by the owner of Beanstalk.

    hashtag
    Unpausearrow-up-right

    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.

    hashtag
    View Functions

    None.

    hashtag
    Events

    hashtag
    Pausearrow-up-right

    Emitted when Beanstalk is Paused.

    Parameter
    Type
    Description

    timestamp

    uint256

    Timestamp of the current block when Beanstalk is Paused.

    hashtag
    Unpausearrow-up-right

    Emitted when Beanstalk is Unpaused.

    Parameter
    Type
    Description

    timestamp

    uint256

    Timestamp of the current block when Beanstalk is Unpaused.

    timePassed

    uint256

    How much time passed while Beanstalk was Paused.

    function pause() external payable;
    function unpause() external payable;
    event Pause(uint256 timestamp);
    event Unpause(uint256 timestamp, uint256 timePassed);
    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.

    hashtag
    Fundraiser

    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:

    1. The token address of the non-Bean token being raised;

    2. The amount of tokens being raised; and

    3. 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.

    You can find links to past BIPs that created Fundraisers herearrow-up-right.

    Market

    circle-exclamation

    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.

    hashtag
    Pod Listings

    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.

    hashtag
    Pod Orders

    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.

    Farm Facet

    circle-exclamation

    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.

    Sun

    circle-exclamation

    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 :

    Diamond Cut Facet

    circle-exclamation

    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.

    hashtag

    GitHub - BeanstalkFarms/Beanstalk: A monorepo for the Beanstalk protocol, SDK, subgraphs and UI. Currently houses infra for the Basin protocol.GitHubchevron-right
    hashtag
    Call Functions

    hashtag
    Farmarrow-up-right

    Loops through the list of encoded selectors in data and performs a delegateCall on each of them.

    Parameter
    Type
    Description

    data

    bytes[]

    The encoded function data for each of the calls.

    Return Value
    Type
    Description

    results

    bytes[]

    The return data from each of the calls.

    hashtag
    Advanced Farmarrow-up-right

    Execute multiple AdvancedFarmCalls.

    Parameter
    Type
    Description

    data

    AdvancedFarmCall[]

    The encoded function data for each of the calls to make to this contract.

    Return Value
    Type
    Description

    results

    bytes[]

    The results from each of the calls passed in via data.

    hashtag
    View Functions

    None.

    hashtag
    Events

    None.

    Call Functions

    hashtag
    Diamond Cutarrow-up-right

    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.

    Parameter
    Type
    Description

    _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).

    hashtag
    View Functions

    None.

    hashtag
    Events

    None.

    struct PodListing {
        address account;
        uint256 index;
        uint256 start;
        uint256 amount;
        uint24 pricePerPod;
        uint256 maxHarvestableIndex;
        LibTransfer.To mode;
    }
    struct PodOrder {
        address account;
        uint24 pricePerPod;
        uint256 maxPlaceInLine;
    }
    function farm(bytes[] calldata data)
        external
        payable
        withEth
        returns (bytes[] memory results);
    function advancedFarm(AdvancedFarmCall[] calldata data)
        external
        payable
        withEth
        returns (bytes[] memory results);
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external override;

    Oracle.solarrow-up-right -> Calculates the time weighted average number of Beans that Bean is above/below its value peg in all pools on the Oracle Whitelistarrow-up-right.

  • Weather.solarrow-up-right -> Changes the Max Temperature (interest rate) depending on the Bean price, debt level and demand for Soil.

  • Sun.solarrow-up-right -> 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 Barn);

    • 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:

    1. Increments the Season number;

    2. Calls Oracle to get deltaB;

    3. Calls Weather to adjust the Max Temperature and checks for Rain and Season of Plenty;

    4. Calls Sun to set the Soil and mint Beans if deltaB > 0; and

    5. Pays msg.sender Beans for paying the transaction fee associated with calling the function.

    circle-exclamation

    In the Beanstalk ecosystem,

    • Rain is referred to as Oversaturation; and

    • Season of Plenty is referred to as Flood.

    See .

    several subcontractsarrow-up-right

    Barn

    circle-exclamation

    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 Snapshotarrow-up-right 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:

    hashtag
    Fertilizer

    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

    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.

    hashtag
    Pre-Replant Fertilizer

    Before Beanstalk was Replanted, Fertilizer was deployed as FertilizerPreMint.sol, which transferred USDC from the caller to 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 . 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.

    hashtag
    Unripe Assets

    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 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.

    Metadata Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    None.

    hashtag
    View Functions

    hashtag

    Returns the URI for a given Deposit ID.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    Returns the name of the collection for OpenSea compatibility.

    Return Type
    Description

    hashtag

    Returns the ticker of the collection for OpenSea compatibility.

    Return Type
    Description

    hashtag

    Returns the image URI for a given Deposit ID.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag
    Events

    hashtag

    Not currently emitted.

    Parameter
    Type
    Description

    Terminology Discrepancies

    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.

    Beanstalk codebase
    Beanstalk term

    Internal Balance

    Farm Balance

    External Balance

    Circulating Balance

    Marketplace

    The following discrepancies are in the .

    Beanstalk Subgraph
    Beanstalk term

    Legacy Claim Withdrawal Facet

    circle-exclamation

    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. 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.

    Diamond Loupe Facet

    circle-exclamation

    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.

    hashtag

    Convert Getters Facet

    circle-exclamation

    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.

    hashtag

    Internal Balances

    hashtag
    What are Internal Balances?

    Beanstalk uses an Internal Balances system largely inspired by . 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 . 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.

    Field
    Silo
    Terminology Discrepancies
    s.activeFertilizer == 0
    ).
    Fertilizer Facet
    Unripe Facet
    the Beanstalk Community Multisig (BCM) addressarrow-up-right
    Fertilizer.solarrow-up-right
    EIP-4626arrow-up-right

    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

    Beanstalk Subgraph

    depositId

    uint256

    Deposit ID to get the URI for.

    string

    URI of Deposit with depositId.

    string

    Name of the OpenSea collection.

    string

    Ticker of the OpenSea collection.

    depositId

    uint256

    Deposit ID to get the image URI for.

    string

    Image URI of Deposit with depositId.

    _uri

    string

    URI.

    _id

    uint256

    Deposit ID.

    URIarrow-up-right
    Namearrow-up-right
    Symbolarrow-up-right
    Image URIarrow-up-right
    URIarrow-up-right
    Call Functions

    None.

    hashtag
    View Functions

    hashtag
    Facetsarrow-up-right

    Returns facet info for all facets of Beanstalk

    Return Value
    Type
    Description

    facets_

    Facet[]

    Array of facet info.

    hashtag
    Facet Function Selectorsarrow-up-right

    Returns all the function selectors provided by a facet.

    Parameter
    Type
    Description

    _facet

    address

    Facet to get selectors for.

    Return Value
    Type
    Description

    facetFunctionSelectors_

    bytes4[]

    Selectors on _facet.

    hashtag
    Facet Addressesarrow-up-right

    Get all the facet addresses used by the Beanstalk Diamond.

    Return Value
    Type
    Description

    facetAddresses_

    address[]

    All facet addresses used by Beanstalk.

    hashtag
    Facet Addressarrow-up-right

    Gets the facet that supports the given selector.

    Parameter
    Type
    Description

    _functionSelector

    bytes4

    Selector to get the corresponding facet for.

    Return Value
    Type
    Description

    facetAddress_

    address

    Facet that has _functionSelector.

    hashtag
    Supports Interfacearrow-up-right

    Returns if a contract implements an interface. Implements ERC-165arrow-up-right.

    Parameter
    Type
    Description

    _interfaceId

    bytes4

    The interface ID, as specified in ERC-165.

    Return Type
    Description

    bool

    True if the contract implements _interfaceId, false otherwise.

    hashtag
    Events

    None.

    Call Functions

    None.

    hashtag
    View Functions

    hashtag
    Get Max Amount Inarrow-up-right

    Estimate the maximum number of tokens that can currently be Converted from tokenIn to tokenOut.

    Parameter
    Type
    Description

    tokenIn

    address

    The whitelisted token to estimate Converting from.

    tokenOut

    address

    The whitelisted token to estimate Converting to.

    Return Value
    Type
    Description

    amountIn

    uint256

    The maximum number of tokens that can currently be Converted from tokenIn to tokenOut.

    hashtag
    Get Amount Outarrow-up-right

    Estimate the amount of tokens received from Converting tokenIn to tokenOut given an amount of tokenIn.

    Parameter
    Type
    Description

    tokenIn

    address

    The whitelisted token to estimate Converting from.

    tokenOut

    address

    The whitelisted token to estimate Converting to.

    Return Value
    Type
    Description

    amountOut

    uint256

    The amount of tokenOut received from a Conversion from tokenIn to tokenOut.

    hashtag
    Events

    None.

    circle-exclamation

    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.

    hashtag
    Relevant Contracts

    • LibTransfer.solarrow-up-right

    • LibBalance.solarrow-up-right

    hashtag
    To / From

    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.

    hashtag
    Transferring Internal / External Balances

    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).

    hashtag
    Sending Internal / External Balances

    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.

    hashtag
    Receiving Internal / External Balances

    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.

    Balancer's Vaultarrow-up-right
    AppStorage
    function uri(uint256 depositId) external view returns (string memory);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function imageURI(uint256 depositId) public view returns (string memory);
    event URI(string _uri, uint256 indexed _id);
    function facets() external view override returns (Facet[] memory facets_);
    function facetFunctionSelectors(address _facet)
        external
        view
        override
        returns (bytes4[] memory facetFunctionSelectors_);
    function facetAddresses() 
        external 
        view 
        override 
        returns (address[] memory facetAddresses_);
    function facetAddress(bytes4 _functionSelector)
        external
        view
        override
        returns (address facetAddress_);
    function supportsInterface(bytes4 _interfaceId) 
        external 
        view 
        override 
        returns (bool);
    function getMaxAmountIn(address tokenIn, address tokenOut)
        external
        view
        returns (uint256 amountIn);
    function getAmountOut(
        address tokenIn,
        address tokenOut,
        uint256 amountIn
    ) external view returns (uint256 amountOut);
    enum From {
        EXTERNAL,
        INTERNAL,
        EXTERNAL_INTERNAL,
        INTERNAL_TOLERANT
    }
    enum To {
        EXTERNAL,
        INTERNAL
    }
    function transferToken(
        IERC20 token,
        address recipient,
        uint256 amount,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable;
    function sendToken(
        IERC20 token,
        uint256 amount,
        address recipient,
        To mode
    ) internal;
    function receiveToken(
        IERC20 token,
        uint256 amount,
        address recipient,
        To mode
    ) internal;
    hashtag
    Call Functions

    hashtag
    Claim Withdrawalarrow-up-right

    Claims tokens from a Withdrawal.

    Parameter
    Type
    Description

    token

    address

    Address of whitelisted token.

    season

    uint32

    Season of Withdrawal to claim.

    mode

    To

    The balance to transfer claimed assets to; see .

    hashtag
    Claim Withdrawalsarrow-up-right

    Claims tokens from multiple Withdrawals.

    Parameter
    Type
    Description

    token

    address

    Address of whitelisted token.

    seasons

    uint32[]

    Array of Seasons to claim.

    mode

    To

    The balance to transfer claimed assets to; see .

    hashtag
    View Functions

    hashtag
    Get Withdrawalarrow-up-right

    Get the amount of token in the Withdrawal season for account.

    Parameter
    Type
    Description

    account

    address

    Farmer to get the Withdrawal for.

    token

    address

    Token address of the Withdrawal.

    season

    uint32

    Season of the Withdrawal.

    Return Value
    Description

    uint256

    Amount of token Withdrawn for the Farmer in the given Season.

    hashtag
    Get Total Withdrawnarrow-up-right

    Get the total amount of token currently Withdrawn from the Silo across all Farmers.

    Parameter
    Type
    Description

    token

    address

    The Withdrawn token address.

    Return Value
    Description

    uint256

    Total amount of Withdrawn token.

    hashtag
    Events

    None.

    Silo V3arrow-up-right

    Depot Facet

    circle-exclamation

    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 Pipelinearrow-up-right.

    hashtag
    Call Functions

    hashtag

    Pipe a PipeCall through Pipeline.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Pipe multiple PipeCalls through Pipeline. Does not support sending Ether in the call.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Pipe multiple AdvancedPipeCalls through Pipeline.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Pipe a PipeCall through Pipeline with an Ether value.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    View Functions

    hashtag

    Return the return value of a PipeCall without executing it.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    Events

    None.

    Ownership Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    Transfers ownership of Beanstalk to a new address. Can only be called by the owner of Beanstalk.

    Parameter
    Type
    Description

    hashtag

    Callable by candidate for ownership after a successful transferOwnership function call.

    hashtag
    View Functions

    hashtag

    Returns the address of the owner of Beanstalk.

    Return Value
    Type
    Description

    hashtag

    Returns the owner candidate of Beanstalk.

    Return Value
    Type
    Description

    hashtag
    Events

    hashtag

    Emitted when ownership of Beanstalk is transferred.

    Parameter
    Type
    Description

    BDV Facet

    circle-exclamation

    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.

    hashtag

    function claimWithdrawal(
        address token,
        uint32 season,
        LibTransfer.To mode
    ) external payable nonReentrant;
    function claimWithdrawals(
        address token,
        uint32[] calldata seasons,
        LibTransfer.To mode
    ) external payable nonReentrant;
    function getWithdrawal(
        address account,
        address token,
        uint32 season
    ) external view returns (uint256);
    function getTotalWithdrawn(address token) external view returns (uint256);
    LibTransfer.To
    LibTransfer.To
    Logo

    p

    PipeCall

    PipeCall to pipe through Pipeline.

    result

    bytes

    PipeCall return value.

    pipes

    PipeCall[]

    List of PipeCalls to pipe through Pipeline.

    results

    bytes[]

    List of return values from each PipeCall.

    pipes

    AdvancedPipeCall[]

    List of AdvancedPipeCalls to pipe through Pipeline.

    value

    uint256

    results

    bytes[]

    List of return values from each AdvancedPipeCall.

    p

    PipeCall

    PipeCall to pipe through Pipeline.

    value

    uint256

    Ether value to send in Pipecall.

    result

    bytes

    PipeCall return value.

    p

    PipeCall

    PipeCall to execute with a staticcall.

    result

    bytes

    PipeCall return value.

    Pipearrow-up-right
    Multi Pipearrow-up-right
    Advanced Pipearrow-up-right
    Ether Pipearrow-up-right
    Read Pipearrow-up-right

    _newOwner

    address

    The address to transfer ownership to.

    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.

    Transfer Ownershiparrow-up-right
    Claim Ownershiparrow-up-right
    Ownerarrow-up-right
    Owner Candidatearrow-up-right
    Ownership Transferredarrow-up-right
    Call Functions

    None.

    hashtag
    View Functions

    hashtag
    Curve to BDVarrow-up-right

    Returns the BDV of a number of BEAN:3CRV LP tokens.

    Parameter
    Type
    Description

    amount

    uint256

    Number of tokens to get the BDV for.

    Return Value
    Description

    uint256

    The total BDV of amount number of BEAN:3CRV LP tokens.

    hashtag
    Bean to BDVarrow-up-right

    Returns the BDV of a number of Beans (1 Bean = 1 BDV).

    Parameter
    Type
    Description

    amount

    uint256

    Number of tokens to get the BDV for.

    Return Value
    Description

    uint256

    The total BDV of amount number of Beans.

    hashtag
    Unripe LP to BDVarrow-up-right

    Returns the total BDV of a number of Unripe BEAN:3CRV LP tokens.

    Parameter
    Type
    Description

    amount

    uint256

    Number of tokens to get the BDV for.

    Return Value
    Description

    uint256

    The total BDV of amount number of Unripe BEAN:3CRV LP tokens.

    hashtag
    Unripe Bean to BDVarrow-up-right

    Returns the total BDV of a number of Unripe Beans.

    Parameter
    Type
    Description

    amount

    uint256

    Number of tokens to get the BDV for.

    Return Value
    Description

    uint256

    The total BDV of amount number of Unripe Beans.

    hashtag
    Well BDVarrow-up-right

    Returns the total BDV of a number of Well LP tokens given a Well LP token.

    Parameter
    Type
    Description

    token

    address

    The whitelisted token address.

    amount

    uint256

    The number of tokens.

    Return Value
    Description

    uint256

    The total BDV of amount number of token.

    hashtag
    Events

    None.

    function pipe(PipeCall calldata p)
        external
        payable
        returns (bytes memory result);
    function multiPipe(PipeCall[] calldata pipes)
        external
        payable
        returns (bytes[] memory results);
    function advancedPipe(AdvancedPipeCall[] calldata pipes, uint256 value)
        external
        payable
        returns (bytes[] memory results);
    function etherPipe(PipeCall calldata p, uint256 value)
        external
        payable
        returns (bytes memory result);
    function readPipe(PipeCall calldata p)
        external
        view
        returns (bytes memory result);
    function transferOwnership(address _newOwner) external;
    function claimOwnership() external;
    function owner() external view returns (address owner_);
    function ownerCandidate() external view returns (address ownerCandidate_);
    event OwnershipTransferred(
        address indexed previousOwner, 
        address indexed newOwner
    );
    function curveToBDV(uint256 amount) public view returns (uint256);
    function beanToBDV(uint256 amount) public pure returns (uint256);
    function unripeLPToBDV(uint256 amount) public view returns (uint256);
    function unripeBeanToBDV(uint256 amount) public view returns (uint256);
    function wellBdv(address token, uint256 amount)
        external
        view
        returns (uint256);

    Silo

    circle-exclamation

    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 Whitelistarrow-up-right 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 . Each Convert type must be approved via governance and the Convert functionality must be added to LibConvert.

    hashtag
    Adding and Removing Assets on the Deposit Whitelist

    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 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.

    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.

    hashtag
    Bean Denominated Value

    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 to calculate the BDV of a given amount of the asset.

    hashtag
    Stalk and Seeds

    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

    circle-exclamation

    In the Beanstalk ecosystem, Update (i.e., updating Grown Stalk) is referred to as Mow (i.e., Mowing Grown Stalk). See .

    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.

    circle-exclamation

    In the Beanstalk ecosystem, Earned Seeds are referred to as Plantable Seeds. See .

    hashtag
    Deposit

    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

    hashtag
    Withdraw

    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.

    hashtag
    Claim Withdrawal

    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.

    hashtag
    Convert

    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:

    1. Converts some amount of Token A to Token B via LibConvert;

    2. Removes Deposits of Token A equal to the amount of Token A that was Converted; and

    3. 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.

    FAQ

    hashtag
    Who calls the 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.

    hashtag
    Where can I call functions directly on Beanstalk?

    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 .

    hashtag
    Why do Beans only have 6 decimals?

    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.

    hashtag
    How are proxy contracts used to upgrade Beanstalk?

    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 and . Beanstalk is actually a multi-facet proxy implementation called a Diamond. This implementation is defined by 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 .

    hashtag
    What are Roots?

    Roots were implemented in . 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.

    hashtag
    Why build a zero fee AMM?

    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.

    hashtag
    Why aren't Pods / Plots implemented with an ERC standard?

    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.

    hashtag
    Why doesn't Fertilizer.sol have an initialize function?

    When Fertilizer was originally deployed. It was deployed as the FertilizerPreMint.sol contract, which has an initialize function that calls __Internallize_init . The initialize function was run on deployment. When Beanstalk was Replanted, The Fertilizer proxy contract was upgraded to the Fertilizer contract found . 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.

    hashtag
    Why is the BDV of urBEAN3CRV lower than the BDV of urBEAN?

    On October 25, 2022, two values could be found on the :

    • 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.

    hashtag
    Why are Beans minted for a Fundraiser just to later burn them?

    See .

    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.

    hashtag
    Algorithm Explanations

    hashtag

    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.

    hashtag

    See .

    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.

    Convert Facet

    circle-exclamation

    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.

    hashtag

    Overview

    circle-exclamation

    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:

    • (1 Facet)

    Migration Facet

    circle-exclamation

    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 . Farmers are required to migrate to the new accounting system created by the Silo V3 upgrade.

    hashtag

    herearrow-up-right
    herearrow-up-right
    herearrow-up-right
    EIP-2535arrow-up-right
    herearrow-up-right
    BIP-0arrow-up-right
    herearrow-up-right
    herearrow-up-right
    Beanstalk Data Dashboardarrow-up-right
    FundraiserFacet.solarrow-up-right
    remainingRecapitalizationarrow-up-right
    checkForMaxDeltaBarrow-up-right
    EBIP-2arrow-up-right

    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.

  • 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.

  • is the BDV of the amount of tokens at the time of Deposit.
    Convert Whitelistarrow-up-right
    AppStorage
    BDVFacet
    Terminology Discrepancies
    Terminology Discrepancies
    struct SiloSettings {
        bytes4 selector;
        uint32 seeds;
        uint32 stalk;
    }
    
    mapping(address => Storage.SiloSettings) ss;
    seeds = depositBdv * s.ss[token].seeds;
    stalk = depositBdv * s.ss[token].stalk + (currentSeason - depositSeason) * seeds
    mapping(address => mapping(uint32 => Deposit)) deposits;
    
    struct Deposit {
        uint128 amount;
        uint128 bdv;
    }
    mapping(address => mapping(uint32 => uint256)) withdrawals;
    depositSeason = currentSeason - (grownStalk / depositSeeds)
    Call Functions

    hashtag
    Convertarrow-up-right

    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 Convert in the Farmers' Almanacarrow-up-right.

    Parameter
    Type
    Description

    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.

    Return Value
    Type
    Description

    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.

    hashtag
    View Functions

    None.

    hashtag
    Events

    hashtag
    Convertarrow-up-right

    Emitted upon each Conversion.

    Parameter
    Type
    Description

    account

    address

    Address of Farmer that Converted.

    fromToken

    address

    Whitelisted token that was Converted from.

    toToken

    address

    Whitelisted token that was Converted to.

    hashtag
    Remove Depositarrow-up-right

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

    Parameter
    Type
    Description

    account

    address

    The Farmer whose Deposit was removed.

    token

    address

    Whitelisted token address.

    stem

    int96

    The Stem of the Deposit.

    hashtag
    Remove Depositsarrow-up-right

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

    Parameter
    Type
    Description

    account

    address

    The Farmer whose Deposits were removed.

    token

    address

    Whitelisted token address.

    stems

    int96[]

    Stems of the Deposits.

    Silo (10 Facets)

  • Field (2 Facets)

  • Barn (2 Facets)

  • Market (1 Facet)

  • Farm (5 Facets)

  • Diamond (4 Facets)

  • hashtag
    Sun

    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.

    hashtag
    Silo

    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 Whitelistarrow-up-right.

    • -> Where Farmers Convert a Deposit of a whitelisted asset to a Deposit of another whitelisted asset.

    • -> Contains view functions for Convert data.

    • -> Where Farmers Enroot their Unripe Deposits.

    • -> Contains logic for Deposit approvals and permits.

    • -> Contains on-chain metadata for the Deposit ERC-1155 tokens.

    • -> Where Farmers migrate to the latest Silo accounting system.

    • -> Facilitates backwards compatibility for Farmers with unclaimed Withdrawals before the .

    hashtag
    Field

    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.

    hashtag
    Barn

    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.

    circle-exclamation

    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.

    See .

    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.

    hashtag
    Market

    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 Marketarrow-up-right. 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.

    hashtag
    Farm

    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 Pipelinearrow-up-right contract, providing access to Pipeline from Beanstalk through the use of the farm function.

    • -> Supports transferring assets between Internal and External Balances and between different accounts. Also supports Wrap/Unwrap logic for ETH.

    • -> Handles token permits.

    • -> Provides an interface to exchange and add/remove liquidity on Curve directly through Beanstalk.

    hashtag
    Diamond

    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.

    • -> Allows the owner of Beanstalk to Pause/Unpause Beanstalk.

    Sun
    Call Functions

    hashtag
    Mow and Migratearrow-up-right

    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.

    Parameter
    Type
    Description

    account

    address

    Address of the account to migrate.

    tokens

    address[]

    Array of whitelisted token addresses to migrate.

    seasons

    uint256[][]

    The Seasons for the Deposits.

    hashtag
    Mow and Migrate No Depositsarrow-up-right

    Migrate an account to Silo V3 that has no Deposits.

    Parameter
    Type
    Description

    account

    address

    Address of the account to migrate.

    hashtag
    View Functions

    hashtag
    Balance Of Legacy Seedsarrow-up-right

    Gets balance of Seeds for a Farmer that hasn't migrated.

    Parameter
    Type
    Description

    account

    address

    A Farmer's address.

    Return Value
    Description

    uint256

    Balance of Seeds for an unmigrated Farmer.

    hashtag
    Balance Of Grown Stalk up to Stems Deploymentarrow-up-right

    Gets a Farmer's balance of Grown Stalk at the time of Stems deployment (Silo V3 upgrade).

    Parameter
    Type
    Description

    account

    address

    Address of Farmer.

    Return Value
    Description

    uint256

    Grown Stalk balance for account at the time of Stems deployment.

    hashtag
    Get Deposit Legacyarrow-up-right

    Locate the token amount and BDV for a Farmer's Deposit in legacy storage.

    Parameter
    Type
    Description

    account

    address

    Address of Farmer.

    token

    address

    Whitelisted token address to get Deposit for.

    season

    uint32

    Season of the Deposit in legacy storage.

    Return Value
    Description

    uint128

    Amount of token of the Deposit in legacy storage.

    uint128

    BDV of the Deposit in legacy storage.

    hashtag
    Events

    None.

    Silo V3arrow-up-right

    Token Support Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    permitERC20 is a wrapper function for permit of token.

    Parameter
    Type
    Description

    hashtag

    Execute an ERC-721 token transfer.

    Parameter
    Type
    Description

    hashtag

    Execute a permit for an ERC-721 token.

    Parameter
    Type
    Description

    hashtag

    Execute an ERC-1155 token transfer of a single ID.

    Parameter
    Type
    Description

    hashtag

    Execute an ERC-1155 token transfer of multiple IDs.

    Parameter
    Type
    Description

    hashtag
    View Functions

    None.

    hashtag
    Events

    None.

    Whitelist Facet

    circle-exclamation

    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 Deposit Whitelistarrow-up-right.

    hashtag
    Call Functions

    hashtag

    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.

    Parameter
    Type
    Description

    hashtag

    Adds a token to the Deposit Whitelist. Can only be called by the owner of Beanstalk.

    Parameter
    Type
    Description

    hashtag

    Adds a token to the Deposit Whitelist with an encodeType. Can only be called by the owner of Beanstalk.

    Parameter
    Type
    Description

    hashtag

    Changes the Grown Stalk per BDV per Season for a token on the Deposit Whitelist. Can only be called by the owner of Beanstalk.

    Parameter
    Type
    Description

    hashtag
    View Functions

    None.

    hashtag
    Events

    hashtag

    Emitted when a token is added to the Deposit Whitelist.

    Parameter
    Type
    Description

    hashtag

    Emitted when the Grown Stalk per BDV per Season for a token on the Deposit Whitelist is changed.

    Parameter
    Type
    Description

    hashtag

    Emitted when a token is removed from the Deposit Whitelist.

    Parameter
    Type
    Description

    Enroot Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    Claims outstanding Revitalized Stalk and Seeds and updates BDV of a single Unripe Deposit.

    Parameter
    Type
    Description

    hashtag

    Claims outstanding Revitalized Stalk and Seeds and updates BDV of multiple Unripe Deposits.

    Parameter
    Type
    Description

    hashtag
    View Functions

    None.

    hashtag
    Events

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    function convert(
        bytes calldata convertData,
        int96[] memory stems,
        uint256[] memory amounts
    )
        external
        payable
        nonReentrant
        returns (int96 toStem, uint256 fromAmount, uint256 toAmount, uint256 fromBdv, uint256 toBdv);
    event Convert(
        address indexed account,
        address fromToken,
        address toToken,
        uint256 fromAmount,
        uint256 toAmount
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        int96[] stems,
        uint256[] amounts,
        uint256 amount,
        uint256[] bdvs
    );
    function mowAndMigrate(
        address account, 
        address[] calldata tokens, 
        uint32[][] calldata seasons,
        uint256[][] calldata amounts,
        uint256 stalkDiff,
        uint256 seedsDiff,
        bytes32[] calldata proof
    ) external payable;
    function mowAndMigrateNoDeposits(address account) external payable;
    function balanceOfLegacySeeds(address account) external view returns (uint256);
    function balanceOfGrownStalkUpToStemsDeployment(address account)
        external
        view
        returns (uint256);
    function getDepositLegacy(
        address account,
        address token,
        uint32 season
    ) external view returns (uint128, uint128);

    fromBdv

    uint256

    The BDV of the Deposits Converted from.

    toBdv

    uint256

    The BDV of the Deposits Converted to.

    fromAmount

    uint256

    Amount of fromToken Converted.

    toAmount

    uint256

    Amount of toAmount Converted to.

    amount

    uint256

    The token amount of the Deposit.

    bdv

    uint256

    The BDV associated with the Deposit.

    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.

    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.

    ConvertFacet
    ConvertGettersFacet
    EnrootFacet
    ApprovalFacet
    MetadataFacet
    MigrationFacet
    LegacyClaimWithdrawalFacet
    Silo V3 upgradearrow-up-right
    Terminology Discrepancies
    TokenFacet
    TokenSupportFacet
    CurveFacet
    PauseFacet

    uint32

    Grown Stalk per BDV per Season for token.

    uint32

    Grown Stalk per BDV per Season for token.

    encodeType

    bytes1

    The encode type that should be used to encode the BDV function call.

    uint256

    Stalk per BDV for token issued upon Deposit.

    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.

    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.

    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.

    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.

    Dewhitelist Tokenarrow-up-right
    Whitelist Tokenarrow-up-right
    Whitelist Token with Encode Typearrow-up-right
    Update Stalk per BDV per Season for Tokenarrow-up-right
    Whitelist Tokenarrow-up-right
    Update Stalk per BDV per Seasonarrow-up-right
    Dewhitelist Tokenarrow-up-right

    stalkEarnedPerSeason

    stalkEarnedPerSeason

    stalkIssuedPerBdv

    uint256

    The token amount of the Deposit.

    bdv

    uint256

    The BDV associated with the Deposit.

    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.

    token

    address

    Address of whitelist Unripe ERC20.

    stem

    int96

    Stem of Deposit to Enroot.

    amount

    uint256

    Amount to Enroot.

    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.

    account

    address

    The Farmer whose Deposit was removed.

    token

    address

    Whitelisted token address.

    stem

    int96

    The Stem of the Deposit.

    account

    address

    The Farmer whose Deposits were removed.

    token

    address

    Whitelisted token address.

    stems

    int96[]

    Stems of the Deposits.

    Enroot Depositarrow-up-right
    Enroot Depositsarrow-up-right
    Remove Depositarrow-up-right
    Remove Depositsarrow-up-right

    amount

    amounts

    function dewhitelistToken(address token) external payable;
    function whitelistToken(
        address token,
        bytes4 selector,
        uint32 stalkIssuedPerBdv,
        uint32 stalkEarnedPerSeason
    ) external payable;
    function whitelistTokenWithEncodeType(
        address token,
        bytes4 selector,
        uint32 stalkIssuedPerBdv,
        uint32 stalkEarnedPerSeason,
        bytes1 encodeType
    ) external payable;
    function updateStalkPerBdvPerSeasonForToken(
        address token,
        uint32 stalkEarnedPerSeason
    ) external payable;
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv
    );
    event UpdatedStalkPerBdvPerSeason(
        address indexed token,
        uint32 stalkEarnedPerSeason,
        uint32 season
    );
    event DewhitelistToken(address indexed token);
    function enrootDeposit(
        address token,
        int96 stem,
        uint256 amount
    ) external payable nonReentrant mowSender(token);
    function enrootDeposits(
        address token,
        int96[] calldata stems,
        uint256[] calldata amounts
    ) external payable nonReentrant mowSender(token);
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        int96[] stems,
        uint256[] amounts,
        uint256 amount,
        uint256[] bdvs
    );

    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.

    uint256

    Expiration of signature (Unix time).

    sig

    bytes

    A valid secp256k1 or signature from owner of the tokenId.

    uint256

    Number of the ERC-1155 tokens at id to transfer.

    uint256[]

    Array of amounts of ERC-1155s at id to transfer.

    token

    IERC20Permit

    Token to permit.

    owner

    address

    Owner of the token.

    spender

    address

    Address to permit to spend the token.

    token

    IERC721

    Token address of the ERC-721.

    to

    address

    Address being transferred to.

    id

    uint256

    ID of ERC-721 token to transfer.

    token

    IERC4494

    Token address to permit.

    spender

    address

    Address to permit to spend the token.

    tokenId

    uint256

    ID of token to permit.

    token

    IERC1155

    Token address of the ERC-1155.

    to

    address

    Address being transferred to.

    id

    uint256

    ID of the ERC-1155 token.

    token

    IERC1155

    Token address of the ERC-1155.

    to

    address

    Address being transferred to.

    ids

    uint256[]

    Array of IDs of the ERC-155 token.

    Permit ERC-20arrow-up-right
    ERC20Permitarrow-up-right
    Transfer ERC-721arrow-up-right
    Permit ERC-721arrow-up-right
    Transfer ERC-1155arrow-up-right
    Batch Transfer ERC-1155arrow-up-right

    value

    deadline

    value

    values

    Fundraiser Facet

    circle-exclamation

    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 .

    hashtag

    function permitERC20(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public payable;
    function transferERC721(
        IERC721 token,
        address to,
        uint256 id
    ) external payable;
    function permitERC721(
        IERC4494 token,
        address spender,
        uint256 tokenId,
        uint256 deadline,
        bytes memory sig
    ) external payable;
    function transferERC1155(
        IERC1155 token,
        address to,
        uint256 id,
        uint256 value
    ) external payable;
    function batchTransferERC1155(
        IERC1155 token,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values
    ) external payable;
    EIP-2098arrow-up-right
    Call Functions

    hashtag
    Fundarrow-up-right

    Fund a Fundraiser in exchange for Pods.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    amount

    uint256

    Amount of fundraisers[id].token to provide.

    mode

    From

    Balance to spend tokens from; see .

    Return Type
    Description

    uint256

    The number of Pods received.

    hashtag
    Create Fundraiserarrow-up-right

    Creates a Fundraiser. Can only be called by the owner of Beanstalk.

    Parameter
    Type
    Description

    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.

    hashtag
    View Functions

    hashtag
    Remaining Fundingarrow-up-right

    Returns the remaining number of tokens to raise.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    Return Type
    Description

    uint256

    The remaining number of tokens to raise.

    hashtag
    Total Fundingarrow-up-right

    Returns the total amount of tokens raised so far.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    Return Type
    Description

    uint256

    The total amount of tokens raised so far.

    hashtag
    Funding Tokenarrow-up-right

    Returns the address of the token that can be sent to the Fundraiser.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    Return Type
    Description

    address

    The address of the token that can be sent to the Fundraiser.

    hashtag
    Fundraiserarrow-up-right

    Returns the Fundraiser struct.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    Return Type
    Description

    Fundraiser

    Returns the Fundraiser struct in .

    hashtag
    Number Of Fundraisersarrow-up-right

    Returns the number of Fundraisers.

    Return Type
    Description

    uint32

    The number of Fundraisers.

    hashtag
    Events

    hashtag
    Create Fundraiserarrow-up-right

    Emitted when a Fundraiser is created.

    Parameter
    Type
    Description

    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.

    hashtag
    Fund Fundraiserarrow-up-right

    Emitted when a Farmer calls fund.

    Parameter
    Type
    Description

    account

    address

    The address of the Farmer.

    id

    uint32

    The Fundraiser ID.

    amount

    uint256

    The amount of token that account provided.

    hashtag
    Complete Fundraiserarrow-up-right

    Emitted when a Fundraiser is fully funded.

    Parameter
    Type
    Description

    id

    uint32

    The Fundraiser ID.

    Fundraisersarrow-up-right
    function fund(
        uint32 id,
        uint256 amount,
        LibTransfer.From mode
    ) external payable nonReentrant returns (uint256);
    function createFundraiser(
        address payee,
        address token,
        uint256 amount
    ) external payable;
    function remainingFunding(uint32 id) public view returns (uint256);
    function totalFunding(uint32 id) public view returns (uint256);
    function fundingToken(uint32 id) public view returns (address);
    function fundraiser(uint32 id)
        public
        view
        returns (Storage.Fundraiser memory);
    function numberOfFundraisers() public view returns (uint32);
    event CreateFundraiser(
        uint32 indexed id,
        address fundraiser,
        address token,
        uint256 amount
    );
    event FundFundraiser(
        address indexed account,
        uint32 indexed id,
        uint256 amount
    );
    event CompleteFundraiser(uint32 indexed id);

    amount

    uint256

    The amount of token that is being raised.

    LibTransfer.From
    App Storage

    Curve Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    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:

    • The non-stable Curve factory can be found at:

    Parameter
    Type
    Description

    hashtag

    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 , 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.

    Parameter
    Type
    Description

    hashtag

    Adds tokens into a liquidity pool on Curve in exchange for LP tokens.

    Parameter
    Type
    Description

    hashtag

    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.

    Parameter
    Type
    Description

    hashtag

    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.

    Parameter
    Type
    Description

    hashtag

    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.

    Parameter
    Type
    Description

    hashtag
    View Functions

    None.

    hashtag
    Events

    None.

    Field Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    Sow Beans in exchange for Pods.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Sow Beans in exchange for Pods. Use at least minSoil.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Harvest Pods from the Field.

    Parameter
    Type
    Description

    hashtag
    View Functions

    hashtag

    Returns the total number of Pods ever minted.

    Return Type
    Description

    hashtag

    Returns the index below which Pods are Harvestable.

    Return Type
    Description

    hashtag

    Returns the number of outstanding Pods. Includes Pods that are currently Harvestable but have not yet been Harvested.

    Return Type
    Description

    hashtag

    Returns the number of Pods that have ever been Harvested.

    Return Type
    Description

    hashtag

    Returns the number of Pods that are currently Harvestable but have not yet been Harvested.

    Return Type
    Description

    hashtag

    Returns the number of Pods that are not yet Harvestable.

    Return Type
    Description

    hashtag

    Returns the number of Pods remaining in a Plot.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    Returns the total available Soil.

    Return Type
    Description

    hashtag

    Returns the current yield (aka "Temperature") offered by Beanstalk when burning Beans in exchange for Pods.

    Return Type
    Description

    hashtag

    Returns the current Temperature, the interest rate offered by Beanstalk in exchange for Sowing Beans.

    Return Value
    Description

    hashtag

    Returns the Maximum Temperature that Beanstalk is willing to offer this Season.

    Return Type
    Description

    hashtag

    Returns the remaining Pods that could be issued this Season.

    Return Value
    Description

    hashtag
    Events

    hashtag

    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.

    Parameter
    Type
    Description

    hashtag

    Emitted when account claims the Beans associated with Harvestable Pods.

    Parameter
    Type
    Description

    hashtag

    Emitted when a Pod Listing is Cancelled.

    Parameter
    Type
    Description

    Season Facet

    circle-exclamation

    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.

    hashtag

    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

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    uint256

    The amount to swap from.

    minAmountOut

    uint256

    The minimum amount to receive from the swap.

    fromMode

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    uint256

    The minimum amount to receive from the swap.

    fromMode

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    uint256[]

    The minimum amount to receive in each of the tokens.

    fromMode

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to sent the tokens to (see ).

    uint256

    The max amount of LP tokens to burn.

    fromMode

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    uint256

    The amount of LP tokens to burn.

    minAmountOut

    uint256

    The minimum amount of the token to receive.

    fromMode

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    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.

    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.

    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.

    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.

    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.

    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.

    Exchangearrow-up-right
    0xB9fC157394Af804a3578134A6585C0dc9cc990d4arrow-up-right
    0x0959158b6040D32d04c301A72CBFD6b39E21c9AEarrow-up-right
    Exchange Underlyingarrow-up-right
    BEAN:3CRV metapoolarrow-up-right
    Add Liquidityarrow-up-right
    Remove Liquidityarrow-up-right
    Remove Liquidity Imbalancearrow-up-right
    Remove Liquidity One Tokenarrow-up-right

    toToken

    amountIn

    minAmountOut

    minAmountsOut

    maxAmountIn

    amountIn

    From

    The balance to transfer Beans from; see .

    uint256

    The amount of Pods associated with the created Plot.

    beans

    uint256

    The number of Beans to Sow.

    minTemperature

    uint256

    The minimum Temperature at which to Sow.

    mode

    From

    The balance to transfer Beans from; see LibTransfer.From.

    pods

    uint256

    The number of Pods received.

    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.

    pods

    uint256

    The number of Pods received.

    plots

    uint256[]

    List of Plot IDs to Harvest.

    mode

    To

    The balance to transfer Beans to; see LibTransfer.To.

    uint256

    The total number of Pods ever minted.

    uint256

    The index below which Pods are Harvestable.

    uint256

    The number of outstanding Pods.

    uint256

    The number of Pods that have ever been Harvested.

    uint256

    The number of Pods that are currently Harvestable but have not yet been Harvested.

    uint256

    The number of Pods that are not yet Harvestable.

    account

    address

    The account that owns a Plot.

    index

    uint256

    The ID of a Plot.

    uint256

    The number of Pods remaining in a Plot.

    uint256

    The total available Soil.

    uint32

    The current yield offered by Beanstalk when burning Beans in exchange for Pods.

    uint256

    The current Temperature.

    uint256

    The Maximum Temperature.

    uint256

    The remaining Pods that could be issued this Season.

    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.

    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.

    account

    address

    The account that created the Pod Listing.

    index

    uint256

    The index of the Plot listed.

    Sowarrow-up-right
    Sow With Minarrow-up-right
    Harvestarrow-up-right
    Pod Indexarrow-up-right
    Harvestable Indexarrow-up-right
    Total Podsarrow-up-right
    Total Harvestedarrow-up-right
    Total Harvestablearrow-up-right
    Total Unharvestablearrow-up-right
    Plotarrow-up-right
    Total Soilarrow-up-right
    Yieldarrow-up-right
    Temperaturearrow-up-right
    Max Temperaturearrow-up-right
    Remaining Podsarrow-up-right
    Sowarrow-up-right
    Harvestarrow-up-right
    Pod Listing Cancelledarrow-up-right

    mode

    pods

    Call Functions

    hashtag
    Sunrisearrow-up-right

    Advances Beanstalk to the next Season, sending reward Beans to the caller's Circulating balance.

    Return Type
    Description

    uint256

    The number of Beans minted to the caller.

    hashtag
    GMarrow-up-right

    Advances Beanstalk to the next Season, sending reward Beans to a specified address and balance.

    Parameter
    Type
    Description

    account

    address

    Indicates to which address reward Beans should be sent.

    mode

    To

    The balance to transfer Beans to; see .

    Return Type
    Description

    uint256

    The number of Beans minted to the caller.

    hashtag
    View Functions

    hashtag
    Seasonarrow-up-right

    Returns the current Season number.

    Return Type
    Description

    uint32

    The current Season number.

    hashtag
    Pausedarrow-up-right

    Returns whether Beanstalk is Paused. When Paused, sunrise cannot be called.

    Return Type
    Description

    bool

    Whether Beanstalk is Paused.

    hashtag
    Timearrow-up-right

    Returns the Season struct.

    Return Type
    Description

    Season

    The Season struct in .

    hashtag
    Above Pegarrow-up-right

    Returns whether Beanstalk started this Season above or below peg.

    Return Type
    Description

    bool

    Whether Beanstalk started this Season above or below peg.

    hashtag
    Sunrise Blockarrow-up-right

    Returns the block during which the current Season started.

    Return Type
    Description

    uint32

    The block during which the current Season started.

    hashtag
    Season Timearrow-up-right

    Returns the expected Season number given the current block timestamp. The sunrise function can be called when seasonTime() > season().

    Return Type
    Description

    uint32

    The expected Season number given the current block timestamp.

    hashtag
    Weatherarrow-up-right

    Returns the Weather struct.

    Return Type
    Description

    Weather

    Returns the Weather struct in .

    hashtag
    Rainarrow-up-right

    Returns the Rain struct.

    Return Type
    Description

    Rain

    Returns the Rain struct in .

    hashtag
    Plenty Per Rootarrow-up-right

    Returns the Season of Plenty (SOP) rewards per Root for the given Season.

    Parameter
    Type
    Description

    season

    uint32

    The Season to fetch SOP rewards per Root for.

    Return Type
    Description

    uint256

    The SOP rewards for the given Season.

    hashtag
    Total deltaBarrow-up-right

    Returns the cumulative deltaB across all pools on the Oracle Whitelist.

    Return Value
    Type
    Description

    deltaB

    int256

    The cumulative deltaB.

    hashtag
    Pool deltaBarrow-up-right

    Returns the deltaB for a given pool.

    Parameter
    Type
    Description

    pool

    address

    The address of the pool .

    Return Value
    Description

    int256

    The deltaB for the given pool.

    hashtag
    Well Oracle Snapshotarrow-up-right

    Returns the last Well oracle snapshot for a given Well.

    Parameter
    Type
    Description

    well

    address

    The address of the pool to get the snapshot for.

    Type

    int256

    hashtag
    Curve Oraclearrow-up-right

    Returns the last Curve oracle data snapshot for the BEAN:3CRV pool.

    Return Value
    Type
    Description

    co

    Storage.CurveMetapoolOracle

    Last Curve oracle data snapshot.

    hashtag
    Events

    hashtag
    Sunrisearrow-up-right

    Emitted when the Season changes.

    Parameter
    Type
    Description

    season

    uint256

    The new Season number.

    hashtag
    Incentivizationarrow-up-right

    Emitted when Beanstalk pays Beans to the sunrise caller.

    Parameter
    Type
    Description

    account

    address

    The address to which the reward Beans were sent.

    beans

    uint256

    The amount of Beans paid as a reward.

    hashtag
    Rewardarrow-up-right

    Emitted during Sunrise when Beans are distributed to the Field, the Silo, and Fertilizer.

    Parameter
    Type
    Description

    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.

    hashtag
    Soilarrow-up-right

    Emitted during Sunrise when Beanstalk adjusts the amount of available Soil.

    Parameter
    Type
    Description

    season

    uint32

    The Season in which Soil was adjusted.

    soil

    uint256

    The new amount of Soil available.

    hashtag
    Weather Changearrow-up-right

    Emitted when the Weather (now Temperature) changes.

    Parameter
    Type
    Description

    season

    uint256

    The current Season.

    caseId

    uint256

    The "".

    change

    int8

    The change in Temperature from the previous value.

    hashtag
    Season of Plentyarrow-up-right

    Emitted when Beans are minted during the Season of Plenty.

    Parameter
    Type
    Description

    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.

    Approval Facet

    circle-exclamation

    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.

    hashtag

    function exchange(
        address pool,
        address registry,
        address fromToken,
        address toToken,
        uint256 amountIn,
        uint256 minAmountOut,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function exchangeUnderlying(
        address pool,
        address fromToken,
        address toToken,
        uint256 amountIn,
        uint256 minAmountOut,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function addLiquidity(
        address pool,
        address registry,
        uint256[] memory amounts,
        uint256 minAmountOut,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function removeLiquidity(
        address pool,
        address registry,
        uint256 amountIn,
        uint256[] calldata minAmountsOut,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function removeLiquidityImbalance(
        address pool,
        address registry,
        uint256[] calldata amountsOut,
        uint256 maxAmountIn,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function removeLiquidityOneToken(
        address pool,
        address registry,
        address toToken,
        uint256 amountIn,
        uint256 minAmountOut,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function sow(
        uint256 beans,
        uint256 minTemperature,
        LibTransfer.From mode
    )
        external
        payable
        returns (uint256 pods);
    function sowWithMin(
        uint256 beans,
        uint256 minTemperature,
        uint256 minSoil,
        LibTransfer.From mode
    ) public payable returns (uint256 pods);
    function harvest(uint256[] calldata plots, LibTransfer.To mode)
        external
        payable;
    function podIndex() public view returns (uint256);
    function harvestableIndex() public view returns (uint256);
    function totalPods() public view returns (uint256);
    function totalHarvested() public view returns (uint256);
    function totalHarvestable() public view returns (uint256);
    function totalUnharvestable() public view returns (uint256);
    function plot(address account, uint256 index)
        public
        view
        returns (uint256);
    function totalSoil() external view returns (uint256);
    function yield() external view returns (uint32);
    function temperature() external view returns (uint256);
    function maxTemperature() external view returns (uint256);
    function remainingPods() external view returns (uint256);
    event Sow(
        address indexed account,
        uint256 index,
        uint256 beans,
        uint256 pods
    );
    event Harvest(address indexed account, uint256[] plots, uint256 beans);
    event PodListingCancelled(address indexed account, uint256 index);
    function sunrise() external payable returns (uint256);
    function gm(
        address account,
        LibTransfer.To mode
    ) public payable returns (uint256);
    function season() public view returns (uint32);
    function paused() public view returns (bool);
    function time() external view returns (Storage.Season memory);
    function abovePeg() external view returns (bool);
    function sunriseBlock() external view returns (uint32);
    function seasonTime() public view virtual returns (uint32);
    function weather() public view returns (Storage.Weather memory);
    function rain() public view returns (Storage.Rain memory);
    function plentyPerRoot(uint32 season) external view returns (uint256);
    function totalDeltaB() external view returns (int256 deltaB);
    function poolDeltaB(address pool) external view returns (int256);
    function wellOracleSnapshot(address well) external view returns (bytes memory snapshot);
    function curveOracle() external view returns (Storage.CurveMetapoolOracle memory co);
    event Sunrise(uint256 indexed season);
    event Incentivization(address indexed account, uint256 beans);
    event Reward(uint32 indexed season, uint256 toField, uint256 toSilo, uint256 toFertilizer);
    event Soil(uint32 indexed season, uint256 soil);
    event WeatherChange(uint256 indexed season, uint256 caseId, int8 change);
    event SeasonOfPlenty(
        uint256 indexed season,
        uint256 amount,
        uint256 toField
    );
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    Internal Balances
    LibTransfer.From

    toFertilizer

    uint256

    The number of Beans distributed to Fertilizer holders.

    LibTransfer.To
    App Storage
    App Storage
    App Storage
    Weather Casearrow-up-right
    Call Functions

    hashtag
    Approvals

    hashtag
    Approve Depositarrow-up-right

    Approves an address to access a Farmer's Deposit.

    Parameter
    Type
    Description

    spender

    address

    Address to be given approval.

    token

    address

    Address of ERC20.

    amount

    uint256

    Amount to be approved.

    hashtag
    Increase Deposit Allowancearrow-up-right

    Increases transfer allowance of a Deposit.

    Parameter
    Type
    Description

    spender

    address

    Address to increase approval for.

    token

    address

    Address of ERC20.

    addedValue

    uint256

    Additional approval value to be given.

    Return Value
    Description

    bool

    If the allowance increase was successful.

    hashtag
    Decrease Deposit Allowancearrow-up-right

    Decreases transfer allowance of a Deposit.

    Parameter
    Type
    Description

    spender

    address

    Address to decrease approval for.

    token

    address

    Address of ERC20.

    subtractedValue

    uint256

    Amount of approval value to be removed.

    Return Value
    Description

    bool

    Success.

    hashtag
    Permits

    Farm balances and Silo Deposits support EIP-2612 permitsarrow-up-right, which allows Farmers to delegate use of their Farm balances and Silo Deposits through permits without the need for a separate transaction.

    hashtag
    Permit Depositsarrow-up-right

    Permits multiple Deposits.

    Parameter
    Type
    Description

    owner

    address

    Owner of the Deposit.

    spender

    address

    Address to permit.

    tokens

    address[]

    Array of ERC20s to permit.

    hashtag
    Permit Depositarrow-up-right

    Permits a single Deposit.

    Parameter
    Type
    Description

    owner

    address

    Owner of the Deposit.

    spender

    address

    Address to permit.

    token

    address

    ERC20 to permit.

    hashtag
    Set Approval for Allarrow-up-right

    Set ERC-1155 approvals. Grants or revokes permission to operator to transfer the caller’s tokens, according to approved.

    Parameter
    Type
    Description

    spender

    address

    Address to approve spending for.

    approved

    bool

    Whether or not to approve.

    hashtag
    View Functions

    hashtag
    Deposit Permit Noncesarrow-up-right

    Returns the current nonce for Deposit permits.

    Parameter
    Type
    Description

    owner

    address

    Owner of the Deposit.

    Return Value
    Description

    uint256

    Current nonce for Deposit permits.

    hashtag
    Deposit Permit Domain Separatorarrow-up-right

    Returns the domain separator for the current chain (linkarrow-up-right).

    Return Value
    Description

    bytes32

    The domain separator for the current chain.

    hashtag
    Deposit Allowancearrow-up-right

    Returns how much of a token Deposit that spender can transfer on behalf of owner.

    Parameter
    Type
    Description

    owner

    address

    Owner of the Deposit.

    spender

    address

    The address that can spend the Deposit.

    token

    address

    The token Deposit that spender can transfer.

    Return Value
    Description

    uint256

    The token Deposit amount that spender can transfer on behalf of owner.

    hashtag
    Is Approved for Allarrow-up-right

    Returns true if _operator is approved to transfer _owner's Deposit.

    Parameter
    Type
    Description

    _owner

    address

    Owner of the Deposit.

    _operator

    address

    Spender of the Deposit.

    Return Value
    Description

    bool

    True if _operator is approved to transfer _owner's tokens.

    hashtag
    Events

    hashtag
    Deposit Approvalarrow-up-right

    Emitted when a Deposit is approved to spend by another account.

    Parameter
    Type
    Description

    owner

    address

    Owner of the Deposit.

    spender

    address

    Spender of the Deposit.

    token

    address

    Deposit token that can be spent.

    hashtag
    Approval for Allarrow-up-right

    Emitted when account grants or revokes permission to operator to transfer their tokens, according to approved (linkarrow-up-right).

    Parameter
    Type
    Description

    account

    address

    Owner of the Deposit.

    operator

    address

    Spender of the Deposit.

    approved

    address

    Whether or not the Deposit was approved.

    Fertilizer Facet

    circle-exclamation

    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.

    hashtag

    function approveDeposit(
        address spender,
        address token,
        uint256 amount
    ) external payable nonReentrant;
    function increaseDepositAllowance(
        address spender, 
        address token, 
        uint256 addedValue
    ) public virtual nonReentrant returns (bool);
    function decreaseDepositAllowance(
        address spender, 
        address token, 
        uint256 subtractedValue
    ) public virtual nonReentrant returns (bool);
    function permitDeposits(
        address owner,
        address spender,
        address[] calldata tokens,
        uint256[] calldata values,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external payable nonReentrant;
    function permitDeposit(
        address owner,
        address spender,
        address token,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external payable nonReentrant;
    function setApprovalForAll(
        address spender, 
        bool approved
    ) external;
    function depositPermitNonces(address owner) public view virtual returns (uint256);
    function depositPermitDomainSeparator() external view returns (bytes32);
    function depositAllowance(
        address owner,
        address spender,
        address token
    ) public view virtual returns (uint256);
    function isApprovedForAll(
        address _owner, 
        address _operator
    ) external view returns (bool);
    event DepositApproval(
        address indexed owner,
        address indexed spender,
        address token,
        uint256 amount
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    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.

    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.

    amount

    uint256

    Amount of the Deposit token that can be spent.

    Call Functions

    hashtag
    Claim Fertilized Beansarrow-up-right

    WIP

    Parameter
    Type
    Description

    ids

    uint256[]

    WIP

    mode

    To

    WIP

    hashtag
    Mint Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    amount

    uint128

    WIP

    minLP

    uint256

    WIP

    mode

    From

    WIP

    hashtag
    Add Fertilizer Ownerarrow-up-right

    WIP

    Parameter
    Type
    Description

    id

    uint128

    WIP

    amount

    uint128

    WIP

    minLP

    uint256

    WIP

    hashtag
    Pay Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    account

    address

    WIP

    amount

    uint256

    WIP

    hashtag
    View Functions

    hashtag
    Total Fertilized Beansarrow-up-right

    WIP

    Return Value
    Type
    Description

    beans

    uint256

    WIP

    hashtag
    Total Unfertilized Beansarrow-up-right

    WIP

    Return Value
    Type
    Description

    beans

    uint256

    WIP

    hashtag
    Total Fertilizer Beansarrow-up-right

    WIP

    Return Value
    Type
    Description

    beans

    uint256

    WIP

    hashtag
    Get Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    id

    uint128

    WIP

    Return Type
    Description

    uint256

    WIP

    hashtag
    Get Nextarrow-up-right

    WIP

    Parameter
    Type
    Description

    id

    uint128

    WIP

    Return Type
    Description

    uint128

    WIP

    hashtag
    Get Firstarrow-up-right

    WIP

    Return Type
    Description

    uint128

    WIP

    hashtag
    Get Lastarrow-up-right

    WIP

    Return Type
    Description

    uint128

    WIP

    hashtag
    Get Active Fertilizerarrow-up-right

    WIP

    Return Type
    Description

    uint256

    WIP

    hashtag
    Is Fertilizingarrow-up-right

    WIP

    Return Type
    Description

    bool

    WIP

    hashtag
    Beans Per Fertilizerarrow-up-right

    WIP

    Return Value
    Type
    Description

    bpf

    uint128

    WIP

    hashtag
    Get Humidityarrow-up-right

    WIP

    Parameter
    Type
    Description

    _s

    uint128

    WIP

    Return Value
    Type
    Description

    humidity

    uint128

    WIP

    hashtag
    Get Current Humidityarrow-up-right

    WIP

    Return Value
    Type
    Description

    humidity

    uint128

    WIP

    hashtag
    Get End BPFarrow-up-right

    WIP

    Return Value
    Type
    Description

    endBpf

    uint128

    WIP

    hashtag
    Remaining Recapitalizationarrow-up-right

    WIP

    Return Type
    Description

    uint256

    WIP

    hashtag
    Balance of Unfertilizedarrow-up-right

    WIP

    Parameter
    Type
    Description

    account

    address

    WIP

    ids

    uint256[]

    WIP

    Return Value
    Type
    Description

    beans

    uint256

    WIP

    hashtag
    Balance of Fertilizedarrow-up-right

    WIP

    Parameter
    Type
    Description

    account

    address

    WIP

    ids

    uint256[]

    WIP

    Return Value
    Type
    Description

    beans

    uint256

    WIP

    hashtag
    Balance of Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    account

    address

    WIP

    id

    uint256

    WIP

    Return Type
    Description

    IFertilizer.Balance

    WIP

    hashtag
    Balance of Batch Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    accounts

    address[]

    WIP

    ids

    uint256[]

    WIP

    Return Type
    Description

    IFertilizer.Balance[]

    WIP

    hashtag
    Get Fertilizersarrow-up-right

    WIP

    Return Value
    Type
    Description

    fertilizers

    Supply[]

    WIP

    hashtag
    Events

    hashtag
    Set Fertilizerarrow-up-right

    WIP

    Parameter
    Type
    Description

    id

    uint128

    WIP

    bpf

    uint128

    WIP

    function claimFertilized(uint256[] calldata ids, LibTransfer.To mode)
        external
        payable;
    function mintFertilizer(
        uint128 amount,
        uint256 minLP,
        LibTransfer.From mode
    ) external payable;
    function addFertilizerOwner(
        uint128 id,
        uint128 amount,
        uint256 minLP
    ) external payable;
    function payFertilizer(address account, uint256 amount) external payable
    function totalFertilizedBeans() external view returns (uint256 beans);
    function totalUnfertilizedBeans() external view returns (uint256 beans);
    function totalFertilizerBeans() external view returns (uint256 beans);
    function getFertilizer(uint128 id) external view returns (uint256);
    function getNext(uint128 id) external view returns (uint128);
    function getFirst() external view returns (uint128);
    function getLast() external view returns (uint128);
    function getActiveFertilizer() external view returns (uint256);
    function isFertilizing() external view returns (bool);
    function beansPerFertilizer() external view returns (uint128 bpf);
    function getHumidity(uint128 _s) external pure returns (uint128 humidity);
    function getCurrentHumidity() external view returns (uint128 humidity);
    function getEndBpf() external view returns (uint128 endBpf);
    function remainingRecapitalization() external view returns (uint256);
    function balanceOfUnfertilized(address account, uint256[] memory ids)
        external
        view
        returns (uint256 beans);
    function balanceOfFertilized(address account, uint256[] memory ids)
        external
        view
        returns (uint256 beans);
    function balanceOfFertilizer(address account, uint256 id)
        external
        view
        returns (IFertilizer.Balance memory);
    function balanceOfBatchFertilizer(
        address[] memory accounts,
        uint256[] memory ids
    ) external view returns (IFertilizer.Balance[] memory);
    function getFertilizers()
        external
        view
        returns (Supply[] memory fertilizers);
    event SetFertilizer(uint128 id, uint128 bpf);

    Unripe Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag
    View Functions

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    Events

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    To

    WIP

    To

    WIP

    uint256

    WIP

    unripeToken

    address

    WIP

    amount

    uint256

    WIP

    fromMode

    From

    WIP

    underlyingAmount

    uint256

    WIP

    token

    address

    WIP

    amount

    uint256

    WIP

    proof

    bytes32[]

    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

    account

    address

    WIP

    token

    address

    WIP

    amount

    uint256

    WIP

    Choparrow-up-right
    Pickarrow-up-right
    Add Unripe Tokenarrow-up-right
    Pickedarrow-up-right
    Get Underlyingarrow-up-right
    Get Penaltyarrow-up-right
    Get Penalized Underlyingarrow-up-right
    _Get Penalized Underlyingarrow-up-right
    Is Unripearrow-up-right
    Balance Of Underlyingarrow-up-right
    Balance Of Penalized Underlyingarrow-up-right
    Get Recap Funded Percentarrow-up-right
    Get Percent Penaltyarrow-up-right
    Get Recap Paid Percentarrow-up-right
    Get Recap Paid Percent Amountarrow-up-right
    Get Underlying Per Unripe Tokenarrow-up-right
    Get Total Underlyingarrow-up-right
    Get Underlying Tokenarrow-up-right
    Add Unripe Tokenarrow-up-right
    Change Underlyingarrow-up-right
    Choparrow-up-right
    Pickarrow-up-right

    toMode

    mode

    underlying

    function chop(
        address unripeToken,
        uint256 amount,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable nonReentrant returns (uint256 underlyingAmount);
    function pick(
        address token,
        uint256 amount,
        bytes32[] memory proof,
        LibTransfer.To mode
    ) external payable nonReentrant;
    function addUnripeToken(
        address unripeToken,
        address underlyingToken,
        bytes32 root
    ) external payable nonReentrant;
    function picked(address account, address token)
        public
        view
        returns (bool);
    function getUnderlying(address unripeToken, uint256 amount)
        public
        view
        returns (uint256 redeem);
    function getPenalty(address unripeToken)
        external
        view
        returns (uint256 penalty);
    function getPenalizedUnderlying(address unripeToken, uint256 amount)
        public
        view
        returns (uint256 redeem);
    function _getPenalizedUnderlying(address unripeToken, uint256 amount, uint256 supply)
        public
        view
        returns (uint256 redeem);
    function isUnripe(address unripeToken) public view returns (bool unripe);
    function balanceOfUnderlying(address unripeToken, address account)
        external
        view
        returns (uint256 underlying);
    function balanceOfPenalizedUnderlying(address unripeToken, address account)
        external
        view
        returns (uint256 underlying);
    function getRecapFundedPercent(address unripeToken)
        public
        view
        returns (uint256 percent);
    function getPercentPenalty(address unripeToken)
        external
        view
        returns (uint256 penalty);
    function getRecapPaidPercent() external view returns (uint256 penalty);
    function getRecapPaidPercentAmount(uint256 amount)
        private
        view
        returns (uint256 penalty);
    function getUnderlyingPerUnripeToken(address unripeToken)
        external
        view
        returns (uint256 underlyingPerToken);
    function getTotalUnderlying(address unripeToken)
        external
        view
        returns (uint256 underlying);
    function getUnderlyingToken(address unripeToken)
        external
        view
        returns (address underlyingToken)
    event AddUnripeToken(
        address indexed unripeToken,
        address indexed underlyingToken,
        bytes32 merkleRoot
    );
    event ChangeUnderlying(address indexed token, int256 underlying);
    event Chop(
        address indexed account,
        address indexed token,
        uint256 amount,
        uint256 underlying
    );
    event Pick(
        address indexed account,
        address indexed token,
        uint256 amount
    );

    Token Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag
    Transfers

    hashtag

    Transfers an asset from a Farmer's Internal and/or External Balance to a Farmer's Internal or External Balance.

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag
    Approvals

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag
    Permits

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag
    ERC-1155

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag
    WETH

    hashtag

    Wraps Ether into WETH.

    Parameter
    Type
    Description

    hashtag

    Unwraps WETH into Ether.

    Parameter
    Type
    Description

    hashtag
    View Functions

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    Events

    hashtag

    Parameter
    Type
    Description

    hashtag

    Parameter
    Type
    Description

    From

    Specifies what balance to receive the tokens from (see ).

    toMode

    To

    Specifies what balance to send the tokens to (see ).

    uint256

    WIP

    toMode

    To

    WIP

    uint256

    WIP

    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.

    token

    IERC20

    WIP

    sender

    address

    WIP

    recipient

    address

    WIP

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of Ether to wrap into WETH. Must be <= msg.value.

    toMode

    To

    Specifies what balance to send the WETH to (see Internal Balances).

    amount

    uint256

    The amount of WETH to unwrap into Ether.

    fromMode

    From

    Specifies what balance to receive the WETH from (see Internal Balances).

    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

    Transfer Tokenarrow-up-right
    Transfer Internal Token Fromarrow-up-right
    Approve Tokenarrow-up-right
    Increase Token Allowancearrow-up-right
    Decrease Token Allowancearrow-up-right
    Token Allowancearrow-up-right
    Permit Tokenarrow-up-right
    Token Permit Noncesarrow-up-right
    Token Permit Domain Separatorarrow-up-right
    On ERC-1155 Receivedarrow-up-right
    On ERC-1155 Batch Receivedarrow-up-right
    Wrap Etherarrow-up-right
    Unwrap Etherarrow-up-right
    Get Internal Balancearrow-up-right
    Get Internal Balancesarrow-up-right
    Get External Balancearrow-up-right
    Get External Balancesarrow-up-right
    Get Balancearrow-up-right
    Get Balancesarrow-up-right
    Get All Balancearrow-up-right
    Get All Balancesarrow-up-right
    Internal Balance Changedarrow-up-right
    Token Approvalarrow-up-right

    fromMode

    amount

    amount

    function transferToken(
        IERC20 token,
        address recipient,
        uint256 amount,
        LibTransfer.From fromMode,
        LibTransfer.To toMode
    ) external payable;
    function transferInternalTokenFrom(
        IERC20 token,
        address sender,
        address recipient,
        uint256 amount,
        LibTransfer.To toMode
    ) external payable nonReentrant;
    function approveToken(
        address spender,
        IERC20 token,
        uint256 amount
    ) external payable nonReentrant;
    function increaseTokenAllowance(
        address spender,
        IERC20 token,
        uint256 addedValue
    ) public virtual nonReentrant returns (bool);
    function decreaseTokenAllowance(
        address spender,
        IERC20 token,
        uint256 subtractedValue
    ) public virtual nonReentrant returns (bool);
    function tokenAllowance(
        address account,
        address spender,
        IERC20 token
    ) public view virtual returns (uint256);
    function permitToken(
        address owner,
        address spender,
        address token,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external payable nonReentrant;
    function tokenPermitNonces(address owner)
        public
        view
        virtual
        returns (uint256);
    function tokenPermitDomainSeparator() external view returns (bytes32);
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external pure override returns (bytes4);
    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external pure override returns (bytes4);
    function wrapEth(uint256 amount, LibTransfer.To mode) external payable;
    function unwrapEth(uint256 amount, LibTransfer.From mode) external payable;
    function getInternalBalance(address account, IERC20 token)
        public
        view
        returns (uint256 balance);
    function getInternalBalances(address account, IERC20[] memory tokens)
        external
        view
        returns (uint256[] memory balances);
    function getExternalBalance(address account, IERC20 token)
        public
        view
        returns (uint256 balance);
    function getExternalBalances(address account, IERC20[] memory tokens)
        external
        view
        returns (uint256[] memory balances);
    function getBalance(address account, IERC20 token)
        public
        view
        returns (uint256 balance);
    function getBalances(address account, IERC20[] memory tokens)
        external
        view
        returns (uint256[] memory balances);
    function getAllBalance(address account, IERC20 token)
        public
        view
        returns (Balance memory b);
    function getAllBalances(address account, IERC20[] memory tokens)
        external
        view
        returns (Balance[] memory balances);
    event InternalBalanceChanged(
        address indexed account,
        IERC20 indexed token,
        int256 delta
    );
    event TokenApproval(
        address indexed owner,
        address indexed spender,
        IERC20 token,
        uint256 amount
    );
    Internal Balances
    Internal Balances

    Marketplace Facet

    circle-exclamation

    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 Pod Marketarrow-up-right.

    hashtag
    Call Functions

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    View Functions

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Value
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag
    Events

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    hashtag

    WIP

    Parameter
    Type
    Description

    uint24

    WIP

    maxHarvestableIndex

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    mode

    To

    WIP

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    mode

    To

    WIP

    From

    WIP

    uint256

    WIP

    mode

    From

    WIP

    bytes

    WIP

    mode

    From

    WIP

    uint256

    WIP

    mode

    To

    WIP

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    mode

    To

    WIP

    To

    WIP

    To

    WIP

    uint256

    WIP

    end

    uint256

    WIP

    bytes

    WIP

    uint256

    WIP

    bytes

    WIP

    uint256

    WIP

    pricePerPod

    uint24

    WIP

    maxHarvestableIndex

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    mode

    To

    WIP

    pricingType

    PriceType

    WIP

    uint256

    WIP

    amount

    uint256

    WIP

    costInBeans

    uint256

    WIP

    uint24

    WIP

    maxPlaceInLine

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    priceType

    PriceType

    WIP

    uint256

    WIP

    start

    uint256

    WIP

    amount

    uint256

    WIP

    costInBeans

    uint256

    WIP

    uint256

    WIP

    index

    uint256

    WIP

    start

    uint256

    WIP

    amount

    uint256

    WIP

    index

    uint256

    WIP

    start

    uint256

    WIP

    amount

    uint256

    WIP

    l

    PodListing

    WIP

    beanAmount

    uint256

    WIP

    mode

    From

    WIP

    l

    PodListing

    WIP

    beanAmount

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    index

    uint256

    WIP

    beanAmount

    uint256

    WIP

    pricePerPod

    uint24

    WIP

    maxPlaceInLine

    uint256

    WIP

    id

    bytes32

    WIP

    beanAmount

    uint256

    WIP

    maxPlaceInLine

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    id

    bytes32

    WIP

    o

    PodOrder

    WIP

    index

    uint256

    WIP

    start

    uint256

    WIP

    o

    PodOrder

    WIP

    index

    uint256

    WIP

    start

    uint256

    WIP

    pricePerPod

    uint24

    WIP

    maxPlaceInLine

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    maxPlaceInLine

    uint256

    WIP

    minFillAmount

    uint256

    WIP

    pricingFunction

    bytes

    WIP

    sender

    address

    WIP

    recipient

    address

    WIP

    id

    uint256

    WIP

    spender

    address

    WIP

    amount

    uint256

    WIP

    placeInLine

    uint256

    WIP

    podListingAmount

    uint256

    WIP

    fillBeanAmount

    uint256

    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

    uint256

    WIP

    account

    address

    WIP

    maxPlaceInLine

    uint256

    WIP

    minFillAmount

    uint256

    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

    from

    address

    WIP

    to

    address

    WIP

    index

    uint256

    WIP

    account

    address

    WIP

    index

    uint256

    WIP

    account

    address

    WIP

    id

    bytes32

    WIP

    amount

    uint256

    WIP

    from

    address

    WIP

    to

    address

    WIP

    id

    bytes32

    WIP

    account

    address

    WIP

    id

    bytes32

    WIP

    from

    address

    WIP

    to

    address

    WIP

    id

    uint256

    WIP

    owner

    address

    WIP

    spender

    address

    WIP

    pods

    uint256

    WIP

    Create Pod Listingarrow-up-right
    Create Pod Listing V2arrow-up-right
    Fill Pod Listingarrow-up-right
    Fill Pod Listing V2arrow-up-right
    Cancel Pod Listingarrow-up-right
    Create Pod Orderarrow-up-right
    Create Pod Order V2arrow-up-right
    Fill Pod Orderarrow-up-right
    Fill Pod Order V2arrow-up-right
    Cancel Pod Orderarrow-up-right
    Cancel Pod Order V2arrow-up-right
    Transfer Plotarrow-up-right
    Approve Podsarrow-up-right
    Get Amount Pods From Fill Listing V2arrow-up-right
    Get Amount Beans To Fill Order V2arrow-up-right
    Pod Orderarrow-up-right
    Pod Order V2arrow-up-right
    Pod Order By Idarrow-up-right
    Pod Listingarrow-up-right
    Allowance Podsarrow-up-right
    Pod Listing Createdarrow-up-right
    Pod Listing Filledarrow-up-right
    Pod Listing Cancelledarrow-up-right
    Pod Order Createdarrow-up-right
    Pod Order Filledarrow-up-right
    Pod Order Cancelledarrow-up-right
    Plot Transferarrow-up-right
    Pod Approvalarrow-up-right

    pricePerPod

    maxHarvestableIndex

    mode

    minFillAmount

    pricingFunction

    amount

    amount

    mode

    mode

    start

    pricingFunction

    minFillAmount

    pricingFunction

    amount

    start

    pricePerPod

    index

    pods

    function createPodListing(
        uint256 index,
        uint256 start,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        uint256 minFillAmount,
        LibTransfer.To mode
    ) external payable;
    function createPodListingV2(
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 maxHarvestableIndex,
        uint256 minFillAmount,
        bytes calldata pricingFunction,
        LibTransfer.To mode
    ) external payable;
    function fillPodListing(
        PodListing calldata l,
        uint256 beanAmount,
        LibTransfer.From mode
    ) external payable;
    function fillPodListingV2(
        PodListing calldata l,
        uint256 beanAmount,
        bytes calldata pricingFunction,
        LibTransfer.From mode
    ) external payable;
    function cancelPodListing(uint256 index) external payable;
    function createPodOrder(
        uint256 beanAmount,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        LibTransfer.From mode
    ) external payable returns (bytes32 id);
    function createPodOrderV2(
        uint256 beanAmount,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes calldata pricingFunction,
        LibTransfer.From mode
    ) external payable returns (bytes32 id);
    function fillPodOrder(
        PodOrder calldata o,
        uint256 index,
        uint256 start,
        uint256 amount,
        LibTransfer.To mode
    ) external payable;
    function fillPodOrderV2(
        PodOrder calldata o,
        uint256 index,
        uint256 start,
        uint256 amount,
        bytes calldata pricingFunction,
        LibTransfer.To mode
    ) external payable;
    function cancelPodOrder(
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        LibTransfer.To mode
    ) external payable;
    function cancelPodOrderV2(
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes calldata pricingFunction,
        LibTransfer.To mode
    ) external payable;
    function transferPlot(
        address sender,
        address recipient,
        uint256 id,
        uint256 start,
        uint256 end
    ) external payable nonReentrant;
    function approvePods(address spender, uint256 amount)
        external
        payable
        nonReentrant;
    function getAmountPodsFromFillListingV2(
        uint256 placeInLine, 
        uint256 podListingAmount,
        uint256 fillBeanAmount,
        bytes calldata pricingFunction
    ) public pure returns (uint256 amount);
    function getAmountBeansToFillOrderV2(
        uint256 placeInLine, 
        uint256 amountPodsFromOrder,
        bytes calldata pricingFunction
    ) public pure returns (uint256 beanAmount);
    function podOrder(
        address account,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount
    ) external view returns (uint256);
    function podOrderV2(
        address account,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes calldata pricingFunction
    ) external view returns (uint256);
    function podOrderById(bytes32 id) external view returns (uint256);
    function podListing(uint256 index) external view returns (bytes32);
    function allowancePods(address owner, address spender)
        public
        view
        returns (uint256);
    event PodListingCreated(
        address indexed account, 
        uint256 index, 
        uint256 start, 
        uint256 amount, 
        uint24 pricePerPod, 
        uint256 maxHarvestableIndex, 
        uint256 minFillAmount,
        bytes pricingFunction,
        LibTransfer.To mode,
        LibPolynomial.PriceType pricingType
    );
    event PodListingFilled(
        address indexed from,
        address indexed to,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event PodListingCancelled(address indexed account, uint256 index);
    event PodOrderCreated(
        address indexed account,
        bytes32 id,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes pricingFunction,
        LibPolynomial.PriceType priceType
    );
    event PodOrderFilled(
        address indexed from,
        address indexed to,
        bytes32 id,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event PodOrderCancelled(address indexed account, bytes32 id);
    event PlotTransfer(
        address indexed from,
        address indexed to,
        uint256 indexed id,
        uint256 pods
    );
    event PodApproval(
        address indexed owner,
        address indexed spender,
        uint256 pods
    );

    Silo Facet

    circle-exclamation

    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.

    hashtag
    Call Functions

    hashtag

    Deposits ERC20 token into internal Farmer balances.

    Parameter
    Type
    Description
    Return value
    Type
    Description

    hashtag

    Withdraws a single Deposit.

    Parameter
    Type
    Description

    hashtag

    Withdraws multiple Deposits.

    Parameter
    Type
    Description

    hashtag

    Transfers single Farmer's Deposit.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Transfers multiple Farmer Deposits.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Transfer a single Deposit, conforming to the ERC1155 standard.

    Parameter
    Type
    Description

    hashtag

    Transfer a single Deposit, conforming to the ERC1155 standard.

    Parameter
    Type
    Description

    hashtag
    Yield Distribution

    hashtag

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

    Parameter
    Type
    Description

    hashtag

    Mow for multiple whitelisted assets for an account.

    Parameter
    Type
    Description

    hashtag

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

    Return Value
    Type
    Description

    hashtag

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

    hashtag
    View Functions

    hashtag
    Utilities

    hashtag

    Get the last Season in which account updated their Silo.

    Return Type
    Description

    hashtag
    Silo Totals

    hashtag

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

    Return Type
    Description

    hashtag

    Returns the total supply of Roots.

    Return Type
    Description

    hashtag

    Returns the total supply of Earned Beans.

    Return Type
    Description

    hashtag
    Silo Account Balances

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    Returns the balance of Roots for a particular Farmer.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

    Returns the balance of Earned Beans for a Farmer.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Description

    hashtag

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

    Parameter
    Type
    Description
    Type

    hashtag
    Season of Plenty (Flood)

    hashtag

    Returns the last Season that a Season of Plenty started.

    Return Value
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Description

    hashtag

    Returns the account Season of Plenty related state variables.

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag
    Stems

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Return Type
    Description

    hashtag

    Returns whether or not a Farmer needs to migrate to .

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Return Type
    Description

    hashtag
    Getters

    hashtag

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

    Parameter
    Type
    Description
    Return Value
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    Get the Storage.SiloSettings for a whitelisted token.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Type

    hashtag
    ERC-1155

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

    Gets an array of amounts corresponding to Deposits.

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag

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

    Parameter
    Type
    Description
    Return Type
    Description

    hashtag
    Events

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

    Emitted when account gains or loses Stalk.

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    hashtag

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

    Parameter
    Type
    Description

    To

    The balance to transfer the token to; see .

    To

    The balance to transfer the token to; see .

    int96

    Stem of Deposit to Transfer.

    amount

    uint256

    Amount of tokens to transfer.

    int96[]

    Stems of Deposits to transfer.

    amounts

    uint256[]

    Array of token amounts to transfer based on corresponding stems.

    uint256

    Amount of ERC1155 to transfer.

    uint256[]

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

    uint256

    Token amount of the Deposit.

    bdv

    uint256

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

    uint256

    The token amount of the Deposit.

    bdv

    uint256

    The BDV associated with the Deposit.

    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.

    uint256

    The Deposit ID of the Deposit.

    value

    uint256

    The amount of the Deposit.

    uint256[]

    The Deposit IDs of the Deposits.

    values

    uint256[]

    The amounts of the Deposits.

    uint256

    Amount of claimed asset.

    uint256

    Amount of claimed asset.

    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

    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.

    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.

    sender

    address

    Source of Deposit.

    recipient

    address

    Destination of Deposit.

    token

    address

    Address of Deposited ERC20 being transferred.

    bdv

    uint256

    BDV now owned by recipient.

    sender

    address

    Source of Deposit.

    recipient

    address

    Destination of Deposit.

    token

    address

    Address of ERC20 being transferred.

    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.

    sender

    address

    Source of Deposit.

    recipient

    address

    Destination of Deposit.

    depositIds

    uint256[]

    Array of IDs of Deposits to transfer.

    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.

    account

    address

    The Farmer whose Deposit was removed.

    token

    address

    Whitelisted token address.

    stem

    int96

    The Stem of the Deposit.

    account

    address

    The Farmer whose Deposit was removed.

    token

    address

    Whitelisted token address.

    stems

    uint32[]

    Stems of the Deposits.

    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.

    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.

    account

    address

    Farmer that claimed the Withdrawals.

    token

    address

    Whitelisted token address.

    seasons

    uint32[]

    Seasons of claimed Withdrawn assets.

    account

    address

    Farmer that claimed the Withdrawal.

    token

    address

    Whitelisted token address.

    season

    uint32

    Seasons of claimed Withdrawn asset.

    Depositarrow-up-right
    Withdraw Depositarrow-up-right
    Withdraw Depositsarrow-up-right
    Transfer Depositarrow-up-right
    Transfer Depositsarrow-up-right
    Safe Transfer Fromarrow-up-right
    Safe Batch Transfer Fromarrow-up-right
    Mowarrow-up-right
    Mow Multiplearrow-up-right
    Plantarrow-up-right
    Claim Plentyarrow-up-right
    Last Updatearrow-up-right
    Total Stalkarrow-up-right
    Total Rootsarrow-up-right
    Total Earned Beansarrow-up-right
    Balance Of Stalkarrow-up-right
    Balance Of Rootsarrow-up-right
    Balance Of Grown Stalkarrow-up-right
    Grown Stalk for Depositarrow-up-right
    Balance Of Earned Beansarrow-up-right
    Balance Of Earned Stalkarrow-up-right
    Balance Of Deposited BDVarrow-up-right
    Get Last Mowed Stemarrow-up-right
    Get Mow Statusarrow-up-right
    Last Season Of Plentyarrow-up-right
    Balance Of Plentyarrow-up-right
    Balance Of Rain Rootsarrow-up-right
    Balance of SOParrow-up-right
    Stem Tip for Tokenarrow-up-right
    Season to Stemarrow-up-right
    Get Seeds per Tokenarrow-up-right
    Stem Start Seasonarrow-up-right
    Silo V3arrow-up-right
    Migration Neededarrow-up-right
    Silo V3arrow-up-right
    In Vesting Periodarrow-up-right
    Get Depositarrow-up-right
    Get Total Depositedarrow-up-right
    Get Total Deposited BDVarrow-up-right
    Token Settingsarrow-up-right
    BDVarrow-up-right
    Balance Ofarrow-up-right
    Balance Of Batcharrow-up-right
    Get Deposit IDarrow-up-right
    Plantarrow-up-right
    Claim Plentyarrow-up-right
    Stalk Balance Changedarrow-up-right
    Add Depositarrow-up-right
    Remove Depositarrow-up-right
    Remove Depositsarrow-up-right
    Transfer Singlearrow-up-right
    Transfer Batcharrow-up-right
    Remove Withdrawalsarrow-up-right
    Remove Withdrawalarrow-up-right

    mode

    mode

    stem

    stem

    amount

    amounts

    amount

    amount

    amounts

    id

    ids

    amount

    amount

    function deposit(
        address token,
        uint256 _amount,
        LibTransfer.From mode
    ) 
        external 
        payable 
        nonReentrant 
        mowSender(token)
        returns (uint256 amount, uint256 bdv, int96 stem);
    function withdrawDeposit(
        address token,
        int96 stem,
        uint256 amount
        LibTransfer.To mode
    ) external payable mowSender(token) nonReentrant;
    function withdrawDeposits(
        address token,
        int96[] calldata stems,
        uint256[] calldata amounts,
        LibTransfer.To mode
    ) external payable mowSender(token) nonReentrant;
    function transferDeposit(
        address sender,
        address recipient,
        address token,
        int96 stem,
        uint256 amount
    ) public payable nonReentrant returns (uint256 bdv);
    function transferDeposits(
        address sender,
        address recipient,
        address token,
        int96[] calldata stem,
        uint256[] calldata amounts
    ) public payable nonReentrant returns (uint256[] memory bdvs);
    function safeTransferFrom(
        address sender, 
        address recipient, 
        uint256 depositId, 
        uint256 amount,
        bytes calldata
    ) external;
    function safeBatchTransferFrom(
        address sender, 
        address recipient, 
        uint256[] calldata depositIds, 
        uint256[] calldata amounts, 
        bytes calldata
    ) external;
    function mow(address account, address token) external payable;
    function mowMultiple(address account, address[] calldata tokens) external payable;
    function plant() 
        external payable returns (uint256 beans, int96 stem);
    function claimPlenty() external payable;
    function lastUpdate(address account) public view returns (uint32);
    function totalStalk() public view returns (uint256);
    function totalRoots() public view returns (uint256);
    function totalEarnedBeans() public view returns (uint256);
    function balanceOfStalk(address account) public view returns (uint256);
    function balanceOfRoots(address account) public view returns (uint256);
    function balanceOfGrownStalk(address account, address token)
        public
        view
        returns (uint256);
    function grownStalkForDeposit(
        address account,
        address token,
        int96 stem
    )
        public
        view
        returns (uint grownStalk);
    function balanceOfEarnedBeans(address account)
        public
        view
        returns (uint256 beans);
    function balanceOfEarnedStalk(address account)
        public
        view
        returns (uint256)
    function balanceOfDepositedBdv(address account, address token)
        external
        view
        returns (uint256 depositedBdv);
    function getLastMowedStem(address account, address token)
        external
        view
        returns (int96 lastStem);
    function getMowStatus(address account, address token)
        external
        view
        returns (Account.MowStatus memory mowStatus);
    function lastSeasonOfPlenty() public view returns (uint32);
    function balanceOfPlenty(address account)
        public
        view
        returns (uint256 plenty);
    function balanceOfRainRoots(address account) public view returns (uint256);
    function balanceOfSop(address account)
        external
        view
        returns (AccountSeasonOfPlenty memory sop);
    function stemTipForToken(address token)
        public
        view
        returns (int96 _stemTip);
    function seasonToStem(address token, uint32 season)
        public
        view
        returns (int96 stem);
    function getSeedsPerToken(address token) public view virtual returns (uint256);
    function stemStartSeason() public view virtual returns (uint16);
    function migrationNeeded(address account) public view returns (bool);
    function inVestingPeriod() public view returns (bool);
    function getDeposit(
        address account,
        address token,
        int96 stem
    ) external view returns (uint256, uint256)
    function getTotalDeposited(address token) external view returns (uint256);
    function getTotalDepositedBdv(address token) external view returns (uint256);
    function tokenSettings(address token)
        external
        view
        returns (Storage.SiloSettings memory);
    function bdv(address token, uint256 amount)
        external
        view
        returns (uint256 _bdv);
    function balanceOf(
        address account, 
        uint256 depositId
    ) external view returns (uint256 amount);
    function balanceOfBatch(
        address[] calldata accounts, 
        uint256[] calldata depositIds
    ) external view returns (uint256[] memory);
    function getDepositId(
        address token, 
        int96 stem
    ) external pure returns (uint256);
    event Plant(
        address indexed account,
        uint256 beans
    );
    event ClaimPlenty(
        address indexed account,
        uint256 plenty
    );
    event StalkBalanceChanged(
        address indexed account,
        int256 delta,
        int256 deltaRoots
    );
    event AddDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        int96[] stems,
        uint256[] amounts,
        uint256 amount,
        uint256[] bdvs
    );
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event RemoveWithdrawals(
        address indexed account,
        address indexed token,
        uint32[] seasons,
        uint256 amount
    );
    event RemoveWithdrawal(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    LibTransfer.To
    LibTransfer.To

    Upgrade History

    A catalog of each Beanstalk upgrade, pause/unpause and event change.

    • Beanstalk Upgrades

    • Event Changes by Block

    hashtag
    Beanstalk Upgrades

    Select a block to view event changes:

    Date
    Season
    Block
    Version
    Transaction
    Description
    Commit
    Event Added
    Event Modified
    Event Removed
    Re-emissions

    hashtag
    Event Changes by Block

    hashtag

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    13597738 ()

    hashtag
    Added

    hashtag
    13735230 ()

    hashtag
    Added

    hashtag
    13800636 ()

    hashtag
    Added

    hashtag
    13953949 ()

    hashtag
    Added

    hashtag
    14148509 ()

    hashtag
    Added

    hashtag
    14218934 ()

    hashtag
    Added

    hashtag
    14498034-14498067 (Hotfix: Omniscia Audit Update)

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    15277988-15278963 ()

    hashtag
    Added

    hashtag
    Removed

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    15685220 ()

    hashtag
    Added

    hashtag
    15703994 ()

    hashtag
    Re-emissions

    hashtag
    15951072 ()

    hashtag
    Added

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    17188356 ()

    hashtag
    Removed

    hashtag
    17671557 ()

    hashtag
    Added

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    Removed

    hashtag
    18028591 ()

    hashtag
    Added

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    Removed

    hashtag
    18392690 ()

    hashtag
    Added

    hashtag
    19927634 ()

    hashtag
    Added

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    Removed

    hashtag
    20921738 ()

    hashtag
    Added

    hashtag
    Modified

    (original event listed first, updated event second)

    hashtag
    Removed

    Contract Creation

    (ccce0)

    n/a

    n/a

    n/a

    n/a

    8/6/2021

    1

    12974077

    1.0.0

    (0xec46)

    init Call

    (ccce0)

    -

    -

    -

    -

    8/9/2021

    66

    12991967

    1.0.1

    (0xb4ba)

    Accounting Hotfix

    (a70db)

    -

    -

    -

    -

    8/18/2021

    286

    13051341

    1.0.2

    (0x5470)

    Accounting Hotfix

    -

    -

    -

    -

    -

    8/18/2021

    287

    13051707

    1.0.3

    (0x1d67)

    Accounting Hotfix

    -

    -

    -

    -

    -

    8/19/2021

    312

    1.1.0

    (0xe748)

    (43c91)

    -

    Vote, Unvote

    -

    -

    9/21/2021

    1101

    13271109

    1.1.1

    (0x543a)

    Accounting Hotfix

    -

    -

    -

    -

    -

    9/22/2021

    1125

    13277484

    1.1.1

    (0xfdc2)

    Accounting Hotfix

    (eof57)

    -

    -

    -

    -

    9/23/2021

    1131

    13279160

    1.1.2

    (0x8dce)

    Accounting Hotfix

    (1cc19)

    -

    -

    -

    10/15/2021

    1674

    13423680

    1.2.0

    (0xe077)

    (1f795)

    -

    -

    -

    -

    11/11/2021

    2329

    1.3.0

    (0x9eed)

    (77b11)

    BeanAllocation, BeanClaim, LPClaim, EtherClaim, Harvest

    -

    -

    -

    11/17/2021

    2466

    13634175

    1.3.1

    (0x8189)

    BIP-2 Patch 1

    (69453)

    -

    -

    -

    -

    11/22/2021

    2590

    13666663

    1.3.1

    (0x8463)

    BIP-2 Patch 2

    (7e198)

    -

    -

    -

    -

    11/24/2021

    2618

    13674011

    1.3.1

    (0x6221)

    Pause

    -

    -

    -

    -

    -

    11/24/2021

    2618

    13677026

    1.3.1

    (0x8b73)

    BIP-2 Patch 3

    (51d28)

    -

    -

    -

    -

    11/24/2021

    2618

    13677028

    1.3.1

    (0x21c4)

    Unpause

    -

    -

    -

    -

    -

    11/24/2021

    2625

    13678942

    1.3.1

    (0x7dbf)

    BIP-2 Patch 3

    (51d28)

    -

    -

    -

    -

    -

    -

    -

    1.3.1

    -

    (Failed)

    -

    -

    -

    -

    -

    12/3/2021

    2840

    1.4.0

    (0xfb5f)

    (76a6a)

    CreateFundraiser, FundFundraiser, CompleteFundraiser

    -

    -

    -

    12/3/2021

    2840

    13735257

    1.4.0

    (0x8ded)

    -

    -

    -

    -

    -

    12/5/2021

    2893

    13748759

    1.4.0

    (0x93d2)

    (160a3)

    -

    -

    -

    -

    12/14/2021

    3088

    1.5.0

    (0x91e2)

    (b3c9c)

    LPDeposit, LPRemove, BeanRemove

    -

    -

    -

    1/6/2022

    3645

    13950446

    1.5.0

    (0x8644)

    (cd637)

    -

    -

    -

    -

    1/6/2022

    3658

    1.6.0

    (0xc3eb)

    (01db9)

    Sow, VoteList, BeanDeposit, LPDeposit

    -

    -

    -

    2/4/2022

    4335

    14136449

    1.6.0

    (0x74ff)

    (c4b53)

    -

    -

    -

    -

    2/5/2022

    4379

    1.7.0

    (0xf5e8)

    (75a67)

    PodListingCreated, PodListingFilled, PodListingCancelled, PodOrderCreated, PodOrderFilled, PodOrderCancelled, PlotTransfer, PodApproval

    -

    -

    -

    2/16/2022

    4641

    1.8.0

    (0x3a5b)

    (4a4a6)

    BeanAllocation, Deposit, RemoveSeasons, RemoveSeason, Withdraw, ClaimSeasons, ClaimSeason

    -

    -

    -

    3/12/2022

    5200

    14369158

    1.9.0

    (0x72d3)

    (a50d4)

    -

    -

    -

    -

    4/1/2022

    5681

    1.9.1

    (0x1aa7)

    Hotfix: Omniscia Audit Update

    (ee472)

    -

    See below

    -

    -

    4/1/2022

    5681

    1.9.1

    (0xcf50)

    Hotfix: Omniscia Audit Update

    (ee472)

    -

    See below

    -

    -

    4/1/2022

    5681

    1.9.1

    (0x4b5b)

    Hotfix: Omniscia Audit Update

    (ee472)

    -

    VoteList

    -

    -

    4/7/2022

    5844

    14541362

    1.9.1

    (0x7025)

    (2fd2f)

    -

    -

    -

    -

    4/7/2022

    5844

    14541420

    1.15.0

    (0x7f12)

    (8bf07)

    -

    -

    -

    -

    4/8/2022

    5867

    14547427

    1.16.0

    (0x47f8)

    (f5e69)

    -

    -

    -

    -

    -

    -

    -

    1.16.0

    -

    (Failed)

    -

    -

    -

    -

    -

    4/17/2022

    6074

    14602790

    1.16.0

    (0xcd31)

    (Governance exploit)

    -

    -

    -

    -

    -

    -

    -

    -

    1.16.0

    -

    (Governance exploit)

    -

    -

    -

    -

    -

    4/17/2022

    6074

    14603731

    1.16.0

    (0xb983)

    Pause

    -

    -

    -

    -

    -

    4/17/2022

    6074

    14603734

    1.16.0

    (0x4eb2)

    Remove governance functions

    -

    -

    -

    -

    -

    4/18/2022

    6074

    14611125

    1.16.0

    (0xb62d)

    Remove exploiter's Beans

    -

    -

    -

    -

    -

    4/19/2022

    6074

    14618005

    1.16.0

    (0x09ea)

    Remove all write functions

    -

    -

    -

    -

    -

    6/4/2022

    6074

    14900249

    1.16.0

    (0xb155)

    - Remove exploiter's balances

    -

    -

    -

    -

    -

    6/21/2022

    6074

    15004465

    1.16.0

    (0xfcd4)

    -

    -

    -

    -

    -

    6/21/2022

    6074

    15004541

    1.16.0

    (0x1d59)

    -

    -

    -

    -

    -

    6/21/2022

    6074

    15004593

    1.16.0

    (0xb84b)

    -

    -

    -

    -

    -

    8/4/2022

    6074

    2.0.0

    (0x10e8)

    - WTP-3: Remove Bean Withdrawals, Harvestable Plots and corresponding Pod Listings and Pod Orders

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x900a)

    - WTP-4: Remove LP Withdrawals

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xac98)

    - WTP-5: Migrate Bean Deposits to Unripe Bean Deposits

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x79ca)

    - WTP-5: 2/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xea39)

    - WTP-5: 3/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xa0b0)

    - WTP-5: 4/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xc62d)

    - WTP-5: 5/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xc685)

    - WTP-5: 6/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x3665)

    - WTP-5: 7/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x1c33)

    - WTP-5: 8/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xabd5)

    - WTP-5: 9/9

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xb643)

    - WTP-6: Migrate LP Deposits to Unripe LP Deposits

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x81be)

    - WTP-6: 2/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xd9b5)

    - WTP-6: 3/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x6c7d)

    - WTP-6: 4/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x9900)

    - WTP-6: 5/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x9c05)

    - WTP-6: 6/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x1fb9)

    - WTP-6: 7/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xe668)

    - WTP-6: 8/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x9475)

    - WTP-6: 9/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x208e)

    - WTP-6: 10/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x121f)

    - WTP-6: 11/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x54a3)

    - WTP-6: 12/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x0e38)

    - WTP-6: 13/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x30d3)

    - WTP-6: 14/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x5897)

    - WTP-6: 15/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xdd73)

    - WTP-6: 16/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xf751)

    - WTP-6: 17/17

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x9992)

    - WTP-7: Prune Stalk/Seeds and Deposit Earned Beans as Unripe Beans

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xf99c)

    - WTP-7: 2/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x1af3)

    - WTP-7: 3/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x1cf1)

    - WTP-7: 4/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x4c30)

    - WTP-7: 5/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xd251)

    - WTP-7: 6/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xe23b)

    - WTP-7: 7/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x4cac)

    - WTP-7: 8/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x4b21)

    - WTP-7: 9/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xdb9f)

    - WTP-7: 10/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x0225)

    - WTP-7: 11/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x16d3)

    - WTP-7: 12/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x4dba)

    - WTP-7: 13/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x1679)

    - WTP-7: 14/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x8289)

    - WTP-7: 15/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xee21)

    - WTP-7: 16/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x04a8)

    - WTP-7: 17/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x6f37)

    - WTP-7: 18/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xec5d)

    - WTP-7: 19/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xf4f5)

    - WTP-7: 20/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x4440)

    - WTP-7: 21/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x70cd)

    - WTP-7: 22/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xb9af)

    - WTP-7: 23/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0x99fd)

    - WTP-7: 24/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xa9ee)

    - WTP-7: 25/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xe764)

    - WTP-7: 26/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xb6c6)

    - WTP-7: 27/27

    (f0e29)

    See below

    See below

    See below

    -

    8/4/2022

    6074

    2.0.0

    (0xfde4)

    - WTP-8: Deploy Bean, BEAN:3CRV, Unripe Bean and Unripe BEAN:3CRV tokens, mint initial supplies and initialize Silo Whitelist

    (f0e29)

    See below

    See below

    See below

    -

    8/5/2022

    6074

    2.0.0

    (0x26f8)

    - Replant

    (f0e29)

    Convert, RemoveDeposits, SetFertilizer, OwnershipTransferred, MetapoolOracle, Reward, Soil, Plant, ClaimPlenty, SeedsBalanceChanged, StalkBalanceChanged, AddDeposit

    PodListingCreated, SeasonOfPlenty, Pause, Unpause

    EtherClaim, BeanAllocation, LPDeposit, Proposal, VoteList, Unvote, Commit, Incentivization, Vote, SeasonSnapshot, SupplyIncrease, SupplyDecrease

    -

    8/6/2022

    6074

    15289539

    2.0.0

    (0x4145)

    - Unpause

    -

    -

    -

    -

    -

    8/10/2022

    6158

    15312400

    2.0.1

    (0x7949)

    (a9587)

    -

    -

    -

    -

    8/17/2022

    6328

    15357193

    2.0.1

    (0x7a3e)

    (22523)

    -

    -

    -

    -

    8/17/2022

    6328

    15357198

    2.0.1

    (0x40f3)

    (cf8dd)

    -

    -

    -

    -

    9/5/2022

    6799

    15480267

    2.0.2

    (0x0100)

    (5a05e)

    -

    -

    -

    -

    9/13/2022

    6987

    15528219

    2.0.3

    (0x1ca1)

    (ddf38)

    -

    -

    -

    -

    10/5/2022

    7521

    2.1.0

    (0x2b54)

    (9ca85)

    DepositApproval, SeedsBalanceChanged, StalkBalanceChanged

    -

    -

    -

    10/5/2022

    7521

    15685230

    2.1.0

    (0xd335)

    (6fb65)

    -

    -

    -

    -

    -

    -

    -

    2.1.0

    -

    (Immunefi)

    (fb536)

    -

    -

    -

    -

    10/6/2022

    7540

    15690858

    2.1.0

    (0x983e)

    (16b25)

    -

    -

    -

    -

    10/8/2022

    7584

    2.1.0

    (0xa896)

    (9ca85)

    -

    -

    -

    SeedsBalanceChanged, StalkBalanceChanged

    10/25/2022

    8000

    15828214

    2.1.1

    (0xaa7c)

    (b2b7b)

    -

    -

    -

    -

    11/1/2022

    8151

    15872969

    2.1.1

    (0x1f3d)

    -

    -

    -

    -

    -

    11/1/2022

    8151

    15872973

    2.1.1

    (0x5fa4)

    -

    -

    -

    -

    -

    -

    -

    -

    2.1.1

    -

    (Cancelled)

    -

    -

    -

    -

    -

    11/12/2022

    8412

    2.2.0

    (0x5e1d)

    (c20cd)

    TokenApproval

    PodListingCreated, PodListingFilled, PodOrderCreated, PodOrderFilled

    -

    -

    11/13/2022

    8434

    15957625

    2.2.1

    (0x1ad6)

    -

    -

    -

    -

    -

    11/14/2022

    8477

    15970409

    2.2.2

    (0x74f5)

    -

    -

    -

    -

    -

    11/16/2022

    8506

    15979107

    2.2.3

    (0x7e0f)

    (4ee40)

    -

    -

    -

    -

    11/22/2022

    8672

    16028530

    2.2.3

    (0x89c4)

    -

    -

    -

    -

    -

    11/28/2022

    8810

    16069756

    2.2.3

    (0x1372)

    -

    -

    -

    -

    -

    11/28/2022

    8810

    16069765

    2.2.3

    (0xc63e)

    -

    -

    -

    -

    -

    12/8/2022

    9057

    16143379

    2.3.0

    (0xcbac)

    (fd132)

    -

    -

    -

    -

    12/9/2022

    9063

    16145166

    2.3.1

    (0xce27)

    (3b36f)

    -

    -

    -

    -

    -

    -

    -

    2.3.1

    -

    (Failed)

    -

    -

    -

    -

    -

    -

    -

    -

    2.3.1

    -

    (Failed)

    -

    -

    -

    -

    -

    02/09/2023

    10561

    16592011

    2.3.1

    (0x76fc)

    (fa2dc)

    -

    -

    -

    -

    05/04/2023

    12577

    2.4.0

    (0x7f6f)

    (a03b8)

    -

    -

    MetapoolOracle

    -

    -

    -

    -

    2.4.0

    -

    -

    -

    -

    -

    -

    05/13/2023

    12793

    17251905

    2.4.1

    (0x22e5)

    (75ad3)

    -

    -

    -

    -

    07/11/2023

    14210

    2.5.0

    (0x17ca)

    (36d3c)

    TransferBatch, TransferSingle, ApprovalForAll, RemoveDeposit, UpdatedStalkPerBdvPerSeason

    AddDeposit, RemoveDeposit, RemoveDeposits, WhitelistToken

    AddWithdrawal, SeedsBalanceChanged

    -

    08/30/2023

    15410

    2.6.0

    (0x128f)

    (81435)

    RemoveDeposit, RemoveDeposits, URI

    WhitelistToken

    RemoveDeposit

    -

    10/20/2023

    16634

    2.7.0

    (0xa256)

    (26dd4)

    SwitchUnderlyingToken

    -

    -

    -

    10/21/2023

    16644

    18395692

    2.7.1

    (0x889a)

    (2ad90)

    -

    -

    -

    -

    10/23/2023

    16711

    18415636

    2.7.2

    (0xe359)

    (87e0e)

    -

    -

    -

    -

    10/30/2023

    16880

    18465853

    2.7.3

    (0x6157)

    (2fb32)

    -

    -

    -

    -

    11/08/2023

    17091

    18528816

    2.7.4

    (0xf534)

    -

    -

    -

    -

    -

    11/09/2023

    17120

    18537472

    2.7.5

    (0xc77c)

    (1c6f5)

    -

    -

    -

    -

    -

    -

    -

    2.7.5

    -

    (Failed)

    -

    -

    -

    -

    -

    02/05/2024

    19215

    19159869

    2.7.6

    (0x4b7e)

    (d7769)

    -

    -

    -

    -

    02/26/2024

    19717

    19308933

    2.7.6

    (0x2b11)

    (ef38a)

    -

    -

    -

    -

    02/26/2024

    19717

    19308941

    2.7.6

    (0x1378)

    (9460e)

    -

    -

    -

    -

    -

    -

    -

    2.7.6

    -

    (Cancelled)

    -

    -

    -

    -

    -

    -

    -

    -

    2.7.6

    -

    (Failed)

    -

    -

    -

    -

    -

    -

    -

    -

    2.7.6

    -

    (Failed)

    -

    -

    -

    -

    -

    05/22/2024

    21797

    2.8.0

    (0x299a)

    (2cd4c)

    TemperatureChange, UpdateAverageStalkPerBdvPerSeason, GaugePointChange, BeanToMaxLpGpPerBdvRatioChange, FarmerGerminatingStalkBalanceChanged, TotalGerminatingBalanceChanged, TotalGerminatingStalkChanged, TotalStalkChangedFromGermination, UpdateGaugeSettings, AddWhitelistStatus, RemoveWhitelistStatus

    WhitelistToken, SeasonOfPlenty, ClaimPlenty

    WeatherChange

    -

    05/22/2024

    21797

    19927634

    2.8.0

    (0x299a)

    (2f896)

    -

    -

    -

    -

    05/24/2024

    21830

    19937474

    2.8.1

    (0x77f7)

    (d634c)

    -

    -

    -

    -

    06/02/2024

    22043

    20000923

    2.8.2

    (0xafb3)

    (88018)

    -

    -

    -

    -

    -

    -

    -

    2.8.2

    -

    (b14cc)

    -

    -

    -

    -

    07/16/2024

    23118

    20321455

    2.8.3

    (0x60e2)

    (36b85)

    -

    -

    -

    -

    07/26/2024

    23347

    20389706

    2.9.0

    (0xc6fd)

    (1b456)

    -

    -

    -

    -

    08/05/2024

    23594

    20463431

    2.10.0

    (0xf730)

    (b5a1e)

    -

    -

    -

    -

    10/08/2024

    25129

    3.0.0

    (0x1360)

    (99bc4)

    UpdatedSeedGaugeSettings, UpdatedOptimalPercentDepositedBdvForToken, UpdatedOracleImplementationForToken, UpdatedGaugePointImplementationForToken, UpdatedLiquidityWeightImplementationForToken, FieldAdded, ActiveFieldSet, PublishRequisition, CancelBlueprint, Tractor, ShipmentRoutesSet

    FarmerGerminatingStalkBalanceChanged, WhitelistToken, Sow, Harvest, TemperatureChange, PodListingCreated, PodListingFilled, PodListingCancelled, PodOrderCreated, PodOrderFilled, PodOrderCancelled, PlotTransfer

    SeedsBalanceChanged, RemoveWithdrawal, RemoveWithdrawals, UpdateGaugeSettings, Reward, SeasonOfPlenty

    -

    -

    -

    -

    3.0.0

    -

    -

    -

    -

    -

    -

    10/13/2024

    25202

    263242481

    3.0.1

    (0x83f7)

    (a2666)

    -

    -

    -

    -

    8/6/2021

    -

    12974075

    1.0.0

    BIP-0arrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    BIP-2arrow-up-right
    protocol/contracts/farm/facets/ClaimFacet.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/SiloFacet.solarrow-up-right
    protocol/contracts/libraries/LibMarket.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    BIP-4arrow-up-right
    protocol/contracts/farm/facets/FundraiserFacet.solarrow-up-right
    protocol/contracts/farm/facets/FundraiserFacet.solarrow-up-right
    protocol/contracts/farm/facets/FundraiserFacet.solarrow-up-right
    BIP-7arrow-up-right
    protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.solarrow-up-right
    protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.solarrow-up-right
    protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.solarrow-up-right
    BIP-9arrow-up-right
    protocol/contracts/farm/facets/FieldFacet/BeanDibbler.solarrow-up-right
    protocol/contracts/farm/facets/FundraiserFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/BeanSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibBeanSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibLPSilo.solarrow-up-right
    BIP-11arrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/PodTransfer.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/PodTransfer.solarrow-up-right
    BIP-12arrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/SiloV2Facet.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibTokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    BIP-21arrow-up-right
    Added
    Removed
    Modified
    protocol/contracts/farm/facets/ConvertFacet.solarrow-up-right
    protocol/contracts/farm/facets/ConvertFacet.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/FertilizerFacet.solarrow-up-right
    protocol/contracts/libraries/LibFertilizer.solarrow-up-right
    protocol/contracts/farm/facets/OwnershipFacet.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Oracle.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/Silo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/Silo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/Silo.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant7.solarrow-up-right
    protocol/contracts/libraries/Silo/LibSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/Silo.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant7.solarrow-up-right
    protocol/contracts/libraries/Silo/LibSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant5.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant6.solarrow-up-right
    protocol/contracts/libraries/Silo/LibTokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/TokenFacet.solarrow-up-right
    protocol/contracts/libraries/Token/LibBalance.solarrow-up-right
    protocol/contracts/farm/facets/UnripeFacet.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant8.solarrow-up-right
    protocol/contracts/farm/facets/UnripeFacet.solarrow-up-right
    protocol/contracts/libraries/LibUnripe.solarrow-up-right
    protocol/contracts/farm/facets/UnripeFacet.solarrow-up-right
    protocol/contracts/farm/facets/UnripeFacet.solarrow-up-right
    protocol/contracts/farm/facets/WhitelistFacet.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/farm/facets/WhitelistFacet.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant1.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant6.solarrow-up-right
    protocol/contracts/farm/init/replant/Replant3.solarrow-up-right
    protocol/contracts/fertilizer/Fertilizer.solarrow-up-right
    protocol/contracts/libraries/Oracle/LibCurveOracle.solarrow-up-right
    protocol/contracts/mocks/mockFacets/MockConvertFacet.solarrow-up-right
    protocol/contracts/mocks/mockFacets/MockSeasonFacet.solarrow-up-right
    protocol/contracts/mocks/mockFacets/MockSeasonFacet.solarrow-up-right
    protocol/contracts/farm/facets/ClaimFacet.solarrow-up-right
    protocol/contracts/libraries/LibClaim.solarrow-up-right
    protocol/contracts/farm/facets/ClaimFacet.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/SiloFacet.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/SiloV2Facet.solarrow-up-right
    protocol/contracts/libraries/LibMarket.solarrow-up-right
    protocol/contracts/farm/facets/ConvertFacet/ConvertSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/LPSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibLPSilo.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/VotingBooth.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/SeasonFacet.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/BeanSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibBeanSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/BeanSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloFacet/LPSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibTokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/SiloV2Facet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/farm/facets/SeasonFacet/Weather.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    protocol/contracts/farm/facets/PauseFacet.solarrow-up-right
    protocol/contracts/farm/facets/GovernanceFacet/GovernanceFacet.solarrow-up-right
    BIP-24arrow-up-right
    protocol/contracts/farm/facets/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/farm/init/InitSiloEvents.solarrow-up-right
    protocol/contracts/farm/init/InitSiloEvents.solarrow-up-right
    BIP-24 Event Emissionsarrow-up-right
    protocol/contracts/farm/init/InitSiloEvents.solarrow-up-right
    protocol/contracts/farm/init/InitSiloEvents.solarrow-up-right
    BIP-29arrow-up-right
    Added
    Modified
    protocol/contracts/farm/facets/TokenFacet.solarrow-up-right
    protocol/contracts/libraries/Token/LibTokenApprove.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/farm/facets/MarketplaceFacet/Order.solarrow-up-right
    BIP-34arrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Oracle.solarrow-up-right
    BIP-36arrow-up-right
    Added
    Modified
    Removed
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/ApprovalFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/ConvertFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/WhitelistFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/ConvertFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/WhitelistFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/TokenSilo.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/Silo.solarrow-up-right
    BIP-37arrow-up-right
    Added
    Modified
    Removed
    protocol/contracts/beanstalk/silo/EnrootFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/EnrootFacet.solarrow-up-right
    protocol/contracts/beanstalk/metadata/MetadataFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/WhitelistFacet.solarrow-up-right
    protocol/contracts/beanstalk/silo/ConvertFacet.solarrow-up-right
    BIP-38arrow-up-right
    protocol/contracts/beanstalk/barn/UnripeFacet.solarrow-up-right
    BIP-45arrow-up-right
    Added
    Modified
    Removed
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right
    protocol/contracts/libraries/LibGauge.solarrow-up-right
    protocol/contracts/libraries/LibGauge.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right
    protocol/contracts/libraries/Silo/LibGerminate.solarrow-up-right
    protocol/contracts/libraries/Silo/LibGerminate.solarrow-up-right
    protocol/contracts/libraries/Silo/LibGerminate.solarrow-up-right
    protocol/contracts/libraries/Silo/LibGerminate.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelistedTokens.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelistedTokens.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelistedTokens.solarrow-up-right
    protocol/contracts/beanstalk/silo/WhitelistFacet/WhitelistFacet.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right
    protocol/contracts/beanstalk/silo/SiloFacet/Silo.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right
    BIP-50arrow-up-right
    Added
    Modified
    Removed
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/beanstalk/field/FieldFacet.solarrow-up-right
    protocol/contracts/beanstalk/field/FieldFacet.solarrow-up-right
    protocol/contracts/beanstalk/farm/TractorFacet.solarrow-up-right
    protocol/contracts/beanstalk/farm/TractorFacet.solarrow-up-right
    protocol/contracts/beanstalk/farm/TractorFacet.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Distribution.solarrow-up-right
    protocol/contracts/beanstalk/silo/WhitelistFacet/WhitelistFacet.solarrow-up-right
    protocol/contracts/libraries/LibReceiving.solarrow-up-right
    protocol/contracts/libraries/LibShipping.solarrow-up-right
    protocol/contracts/libraries/Silo/LibFlood.solarrow-up-right
    protocol/contracts/libraries/Silo/LibFlood.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedAccountStatus.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedField.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedInternalBalances.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedPodMarket.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedPodMarket.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedSilo.solarrow-up-right
    protocol/contracts/beanstalk/init/reseed/L2/ReseedBarn.solarrow-up-right
    protocol/contracts/libraries/Silo/LibGerminate.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/beanstalk/field/FieldFacet.solarrow-up-right
    protocol/contracts/beanstalk/field/FieldFacet.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Listing.solarrow-up-right
    protocol/contracts/libraries/LibMarket.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/Order.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/PodTransfer.solarrow-up-right
    protocol/contracts/beanstalk/market/MarketplaceFacet/PodTransfer.solarrow-up-right
    protocol/contracts/libraries/Silo/LibLegacyTokenSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibLegacyTokenSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibLegacyTokenSilo.solarrow-up-right
    protocol/contracts/libraries/Silo/LibWhitelist.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Sun.solarrow-up-right
    protocol/contracts/beanstalk/sun/SeasonFacet/Weather.solarrow-up-right

    (0x40b2)

    event Vote(address indexed account, uint32 indexed bip, uint256 stalk, uint256 seeds);
    event Vote(address indexed account, uint32 indexed bip, uint256 roots);
    event Unvote(address indexed account, uint32 indexed bip, uint256 stalk, uint256 seeds);
    event Unvote(address indexed account, uint32 indexed bip, uint256 roots);
    event BeanAllocation(address indexed account, uint256 beans);
    event BeanClaim(address indexed account, uint32[] withdrawals, uint256 beans);
    event LPClaim(address indexed account, uint32[] withdrawals, uint256 lp);
    event EtherClaim(address indexed account, uint256 ethereum);
    event Harvest(address indexed account, uint256[] plots, uint256 beans);
    event CreateFundraiser(uint32 indexed id, address fundraiser, address token, uint256 amount);
    event FundFundraiser(address indexed account, uint32 indexed id, uint256 amount);
    event CompleteFundraiser(uint32 indexed id);
    event LPDeposit(address indexed account, uint256 season, uint256 lp, uint256 seeds);
    event LPRemove(address indexed account, uint32[] crates, uint256[] crateLP, uint256 lp);
    event BeanRemove(address indexed account, uint32[] crates, uint256[] crateBeans, uint256 beans);
    event Sow(address indexed account, uint256 index, uint256 beans, uint256 pods);
    event VoteList(address indexed account, uint32[] indexed bips, bool[] votes, uint256 roots);
    event BeanDeposit(address indexed account, uint256 season, uint256 beans);
    event LPDeposit(address indexed account, uint256 season, uint256 lp, uint256 seeds);
    event PodListingCreated(
        address indexed account, 
        uint256 index, 
        uint256 start, 
        uint256 amount, 
        uint24 pricePerPod, 
        uint256 maxHarvestableIndex, 
        bool toWallet
    );
    event PodListingFilled(
        address indexed from, 
        address indexed to, 
        uint256 index, 
        uint256 start, 
        uint256 amount
    );
    event PodListingCancelled(address indexed account, uint256 index);
    event PodOrderCreated(
        address indexed account, 
        bytes32 id, 
        uint256 amount, 
        uint24 pricePerPod, 
        uint256 maxPlaceInLine
    );
    event PodOrderFilled(
        address indexed from, 
        address indexed to, 
        bytes32 id, 
        uint256 index, 
        uint256 start, 
        uint256 amount
    );
    event PodOrderCancelled(address indexed account, bytes32 id);
    event PlotTransfer(address indexed from, address indexed to, uint256 indexed id, uint256 pods);
    event PodApproval(address indexed owner, address indexed spender, uint256 pods);
    event BeanAllocation(address indexed account, uint256 beans);
    event Deposit(address indexed account, address indexed token, uint256 season, uint256 amount, uint256 bdv);
    event RemoveSeason(address indexed account, address indexed token, uint32 season, uint256 amount);
    event Withdraw(address indexed account, address indexed token, uint32 season, uint256 amount);
    event ClaimSeasons(address indexed account, address indexed token, uint32[] seasons, uint256 amount);
    event ClaimSeason(address indexed account, address indexed token, uint32 season, uint256 amount);
    event VoteList(address indexed account, uint32[] indexed bips, bool[] votes, uint256 roots);
    event VoteList(address indexed account, uint32[] bips, bool[] votes, uint256 roots);
    event Convert(
        address indexed account,
        address fromToken,
        address toToken,
        uint256 fromAmount,
        uint256 toAmount
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        uint32[] seasons,
        uint256[] amounts,
        uint256 amount
    );
    event SetFertilizer(uint128 id, uint128 bpf);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MetapoolOracle(uint32 indexed season, int256 deltaB, uint256[2] balances);
    event Reward(uint32 indexed season, uint256 toField, uint256 toSilo, uint256 toFertilizer);
    event Soil(uint32 indexed season, uint256 soil);
    event Plant(
        address indexed account,
        uint256 beans
    );
    event ClaimPlenty(
        address indexed account,
        uint256 plenty
    );
    event SeedsBalanceChanged(
        address indexed account,
        int256 delta
    );
    event StalkBalanceChanged(
        address indexed account,
        int256 delta,
        int256 deltaRoots
    );
    event AddDeposit(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event AddWithdrawal(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event RemoveWithdrawals(
        address indexed account,
        address indexed token,
        uint32[] seasons,
        uint256 amount
    );
    event RemoveWithdrawal(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event InternalBalanceChanged(
        address indexed user,
        IERC20 indexed token,
        int256 delta
    );
    event InternalBalanceChanged(
        address indexed account,
        IERC20 indexed token,
        int256 delta
    );
    event AddUnripeToken(
        address indexed unripeToken,
        address indexed underlyingToken,
        bytes32 merkleRoot
    );
    event ChangeUnderlying(address indexed token, int256 underlying);
    event Chop(
        address indexed account,
        address indexed token,
        uint256 amount,
        uint256 underlying
    );
    event Pick(
        address indexed account,
        address indexed token,
        uint256 amount
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint256 seeds,
        uint256 stalk
    );
    event DewhitelistToken(address indexed token);
    event RemoveSeason(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event PodOrderCancelled(address indexed account, bytes32 id);
    event ClaimFertilizer(uint256[] ids, uint256 beans);
    event MetapoolOracle(uint32 indexed season, int256 deltaB, uint256[2] balances);
    event MockConvert(uint256 stalkRemoved, uint256 bdvRemoved);
    event UpdateTWAPs(uint256[2] balances);
    event DeltaB(int256 deltaB);
    event EtherClaim(address indexed account, uint256 ethereum);
    event BeanAllocation(address indexed account, uint256 beans);
    event LPDeposit(address indexed account, uint256 season, uint256 lp, uint256 seeds);
    event Proposal(address indexed account, uint32 indexed bip, uint256 indexed start, uint256 period);
    event VoteList(address indexed account, uint32[] bips, bool[] votes, uint256 roots);
    event Unvote(address indexed account, uint32 indexed bip, uint256 roots);
    event Commit(address indexed account, uint32 indexed bip);
    event Incentivization(address indexed account, uint256 beans);
    event Vote(address indexed account, uint32 indexed bip, uint256 roots);
    event SeasonSnapshot(
        uint32 indexed season,
        uint256 price,
        uint256 supply,
        uint256 stalk,
        uint256 seeds,
        uint256 podIndex,
        uint256 harvestableIndex
    );
    event SupplyIncrease(
        uint256 indexed season,
        uint256 price,
        uint256 newHarvestable,
        uint256 newSilo,
        int256 newSoil
    );
    event SupplyDecrease(uint256 indexed season, uint256 price, int256 newSoil);
    event SupplyNeutral(uint256 indexed season, int256 newSoil);
    event BeanDeposit(address indexed account, uint256 season, uint256 beans);
    event BeanWithdraw(address indexed account, uint256 season, uint256 beans);
    event LPWithdraw(address indexed account, uint256 season, uint256 lp);
    event Deposit(address indexed account, address indexed token, uint256 season, uint256 amount, uint256 bdv);
    event RemoveSeason(address indexed account, address indexed token, uint32 season, uint256 amount);
    event Withdraw(address indexed account, address indexed token, uint32 season, uint256 amount);
    event PodListingCreated(
        address indexed account,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        bool toWallet
    );
    event PodListingCreated(
        address indexed account,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        LibTransfer.To mode
    );
    event SeasonOfPlenty(uint256 indexed season, uint256 eth, uint256 harvestable);
    event SeasonOfPlenty(
        uint256 indexed season,
        uint256 amount,
        uint256 toField
    );
    event Pause(address account, uint256 timestamp);
    event Pause(uint256 timestamp);
    event Unpause(address account, uint256 timestamp, uint256 timePassed);
    event Unpause(uint256 timestamp, uint256 timePassed);
    event DepositApproval(
        address indexed owner,
        address indexed spender,
        address token,
        uint256 amount
    );
    event SeedsBalanceChanged(
        address indexed account,
        int256 delta
    );
    event StalkBalanceChanged(
        address indexed account,
        int256 delta,
        int256 deltaRoots
    );
    event SeedsBalanceChanged(
        address indexed account,
        int256 delta
    );
    event StalkBalanceChanged(
        address indexed account,
        int256 delta,
        int256 deltaRoots
    );
    event TokenApproval(
        address indexed owner,
        address indexed spender,
        IERC20 token,
        uint256 amount
    );
    event PodListingCreated(
        address indexed account,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        LibTransfer.To mode
    );
    event PodListingCreated(
        address indexed account, 
        uint256 index, 
        uint256 start, 
        uint256 amount, 
        uint24 pricePerPod, 
        uint256 maxHarvestableIndex, 
        uint256 minFillAmount,
        bytes pricingFunction,
        LibTransfer.To mode,
        LibPolynomial.PriceType pricingType
    );
    event PodListingFilled(
        address indexed from,
        address indexed to,
        uint256 index,
        uint256 start,
        uint256 amount
    );
    event PodListingFilled(
        address indexed from,
        address indexed to,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event PodOrderCreated(
        address indexed account,
        bytes32 id,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxPlaceInLine
    );
    event PodOrderCreated(
        address indexed account,
        bytes32 id,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes pricingFunction,
        LibPolynomial.PriceType priceType
    );
    event PodOrderFilled(
        address indexed from,
        address indexed to,
        bytes32 id,
        uint256 index,
        uint256 start,
        uint256 amount
    );
    event PodOrderFilled(
        address indexed from,
        address indexed to,
        bytes32 id,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event MetapoolOracle(uint32 indexed season, int256 deltaB, uint256[2] balances);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event UpdatedStalkPerBdvPerSeason(
        address indexed token,
        uint32 stalkEarnedPerSeason,
        uint32 season
    );
    event AddDeposit(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount,
        uint256 bdv
    );
    event AddDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        uint32[] seasons,
        uint256[] amounts,
        uint256 amount
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        int96[] stems,
        uint256[] amounts,
        uint256 amount,
        uint256[] bdvs
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint256 seeds,
        uint256 stalk
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalk
    );
    event AddWithdrawal(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event SeedsBalanceChanged(
        address indexed account,
        int256 delta
    );
    event RemoveDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event RemoveDeposits(
        address indexed account,
        address indexed token,
        int96[] stems,
        uint256[] amounts,
        uint256 amount,
        uint256[] bdvs
    );
    event URI(string _uri, uint256 indexed _id);
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalk
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv
    );
    emit RemoveDeposit(msg.sender, token, stem, amount, ogBDV);
    event SwitchUnderlyingToken(address indexed token, address indexed underlyingToken);
    event TemperatureChange(uint256 indexed season, uint256 caseId, int8 absChange);
    event UpdateAverageStalkPerBdvPerSeason(uint256 newStalkPerBdvPerSeason);
    event GaugePointChange(uint256 indexed season, address indexed token, uint256 gaugePoints);
    event BeanToMaxLpGpPerBdvRatioChange(uint256 indexed season, uint256 caseId, int80 absChange);
    event FarmerGerminatingStalkBalanceChanged(
        address indexed account,
        int256 deltaGerminatingStalk,
        Germinate germinationState
    );
    event TotalGerminatingBalanceChanged(
        uint256 germinationSeason,
        address indexed token,
        int256 deltaAmount,
        int256 deltaBdv
    );
    event TotalGerminatingStalkChanged(uint256 germinationSeason, int256 deltaGerminatingStalk);
    event TotalStalkChangedFromGermination(int256 deltaStalk, int256 deltaRoots);
    event UpdateGaugeSettings(
        address indexed token,
        bytes4 gpSelector,
        bytes4 lwSelector,
        uint64 optimalPercentDepositedBdv
    );
    event AddWhitelistStatus(
        address token,
        uint256 index,
        bool isWhitelisted,
        bool isWhitelistedLp,
        bool isWhitelistedWell
    );
    event RemoveWhitelistStatus(
        address token,
        uint256 index
    );
    event UpdateWhitelistStatus(
        address token,
        uint256 index,
        bool isWhitelisted,
        bool isWhitelistedLp,
        bool isWhitelistedWell
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv,
        bytes4 gpSelector,
        bytes4 lwSelector,
        uint128 gaugePoints,
        uint64 optimalPercentDepositedBdv
    );
    event SeasonOfPlenty(
        uint256 indexed season,
        uint256 amount,
        uint256 toField
    );
    event SeasonOfPlenty(uint256 indexed season, address well, address token, uint256 amount, uint256 toField);
    event ClaimPlenty(
        address indexed account,
        uint256 plenty
    );
    event ClaimPlenty(
        address indexed account,
        address token,
        uint256 plenty
    );
    event WeatherChange(
        uint256 indexed season,
        uint256 caseId,
        int8 change
    );
    event UpdatedOptimalPercentDepositedBdvForToken(
        address indexed token,
        uint64 optimalPercentDepositedBdv
    );
    event UpdatedOracleImplementationForToken(
        address indexed token,
        Implementation oracleImplementation
    );
    event UpdatedGaugePointImplementationForToken(
        address indexed token,
        Implementation gaugePointImplementation
    );
    event UpdatedLiquidityWeightImplementationForToken(
        address indexed token,
        Implementation liquidityWeightImplementation
    );
    event FieldAdded(uint256 fieldId);
    event ActiveFieldSet(uint256 fieldId);
    event PublishRequisition(LibTractor.Requisition requisition);
    event CancelBlueprint(bytes32 blueprintHash);
    event Tractor(address indexed operator, bytes32 blueprintHash);
    event ShipmentRoutesSet(ShipmentRoute[] newShipmentRoutes);
    event UpdatedEvaluationParameters(EvaluationParameters);
    event Receipt(ShipmentRecipient indexed recipient, uint256 receivedAmount, bytes data);
    event Shipped(uint32 indexed season, uint256 shipmentAmount);
    event SeasonOfPlentyWell(uint256 indexed season, address well, address token, uint256 amount);
    event SeasonOfPlentyField(uint256 toField);
    event MigratedAccountStatus(address indexed account, uint256 stalk, uint256 roots);
    event MigratedPlot(address indexed account, uint256 indexed plotIndex, uint256 pods);
    event InternalBalanceMigrated(address indexed account, IERC20 indexed token, int256 delta);
    event MigratedPodListing(
        address indexed lister,
        uint256 fieldId,
        uint256 index,
        uint256 start,
        uint256 podAmount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        uint256 minFillAmount,
        LibTransfer.To mode
    );
    event MigratedPodOrder(
        address indexed orderer,
        bytes32 id,
        uint256 beanAmount,
        uint256 fieldId,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount
    );
    event AddMigratedDeposit(
        address indexed account,
        address indexed token,
        int96 stem,
        uint256 amount,
        uint256 bdv
    );
    event FertilizerMigrated(address account, uint128 fid, uint128 amount, uint128 lastBpf);
    event FarmerGerminatingStalkBalanceChanged(
        address indexed account,
        int256 deltaGerminatingStalk,
        Germinate germinationState
    );
    event FarmerGerminatingStalkBalanceChanged(
        address indexed account,
        int256 delta,
        GerminationSide germ
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv,
        bytes4 gpSelector,
        bytes4 lwSelector,
        uint128 gaugePoints,
        uint64 optimalPercentDepositedBdv
    );
    event WhitelistToken(
        address indexed token,
        bytes4 selector,
        uint32 stalkEarnedPerSeason,
        uint256 stalkIssuedPerBdv,
        uint128 gaugePoints,
        uint64 optimalPercentDepositedBdv
    );
    event Sow(
        address indexed account,
        uint256 index,
        uint256 beans,
        uint256 pods
    );
    event Sow(address indexed account, uint256 fieldId, uint256 index, uint256 beans, uint256 pods);
    event Harvest(address indexed account, uint256[] plots, uint256 beans);
    event Harvest(address indexed account, uint256 fieldId, uint256[] plots, uint256 beans);
    event TemperatureChange(uint256 indexed season, uint256 caseId, int8 absChange);
    event TemperatureChange(
        uint256 indexed season,
        uint256 caseId,
        int8 absChange,
        uint256 fieldId
    );
    event PodListingCreated(
        address indexed account, 
        uint256 index, 
        uint256 start, 
        uint256 amount, 
        uint24 pricePerPod, 
        uint256 maxHarvestableIndex, 
        uint256 minFillAmount,
        bytes pricingFunction,
        LibTransfer.To mode,
        LibPolynomial.PriceType pricingType
    );
    event PodListingCreated(
        address indexed lister,
        uint256 fieldId,
        uint256 index,
        uint256 start,
        uint256 podAmount,
        uint24 pricePerPod,
        uint256 maxHarvestableIndex,
        uint256 minFillAmount,
        LibTransfer.To mode
    );
    event PodListingFilled(
        address indexed from,
        address indexed to,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event PodListingFilled(
        address indexed filler,
        address indexed lister,
        uint256 fieldId,
        uint256 index,
        uint256 start,
        uint256 podAmount,
        uint256 costInBeans
    );
    event PodListingCancelled(address indexed account, uint256 index);
    event PodListingCancelled(address indexed lister, uint256 fieldId, uint256 index);
    event PodOrderCreated(
        address indexed account,
        bytes32 id,
        uint256 amount,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount,
        bytes pricingFunction,
        LibPolynomial.PriceType priceType
    );
    event PodOrderCreated(
        address indexed orderer,
        bytes32 id,
        uint256 beanAmount,
        uint256 fieldId,
        uint24 pricePerPod,
        uint256 maxPlaceInLine,
        uint256 minFillAmount
    );
    event PodOrderFilled(
        address indexed from,
        address indexed to,
        bytes32 id,
        uint256 index,
        uint256 start,
        uint256 amount,
        uint256 costInBeans
    );
    event PodOrderFilled(
        address indexed filler,
        address indexed orderer,
        bytes32 id,
        uint256 fieldId,
        uint256 index,
        uint256 start,
        uint256 podAmount,
        uint256 costInBeans
    );
    event PodOrderCancelled(address indexed account, bytes32 id);
    event PodOrderCancelled(address indexed orderer, bytes32 id);
    event PlotTransfer(
        address indexed from,
        address indexed to,
        uint256 indexed id,
        uint256 pods
    );
    event PlotTransfer(
        address indexed from,
        address indexed to,
        uint256 fieldId,
        uint256 indexed index,
        uint256 amount
    );
    event PodApproval(
        address indexed owner,
        address indexed spender,
        uint256 pods
    );
    event PodApproval(
        address indexed owner,
        address indexed spender,
        uint256 fieldId,
        uint256 amount
    );
    event SeedsBalanceChanged(address indexed account, int256 delta);
    event RemoveWithdrawal(
        address indexed account,
        address indexed token,
        uint32 season,
        uint256 amount
    );
    event RemoveWithdrawals(
        address indexed account,
        address indexed token,
        uint32[] seasons,
        uint256 amount
    );
    event UpdateGaugeSettings(
        address indexed token,
        bytes4 gpSelector,
        bytes4 lwSelector,
        uint64 optimalPercentDepositedBdv
    );
    event Reward(
        uint32 indexed season,
        uint256 toField,
        uint256 toSilo,
        uint256 toFertilizer
    );
    event SeasonOfPlenty(uint256 indexed season, address well, address token, uint256 amount, uint256 toField);
    ,
    RemoveDeposit
    ,
    AddWithdrawal
    ,
    RemoveWithdrawals
    ,
    RemoveWithdrawal
    ,
    InternalBalanceChanged
    ,
    AddUnripeToken
    ,
    ChangeUnderlying
    ,
    Chop
    ,
    Pick
    ,
    WhitelistToken
    ,
    DewhitelistToken
    ,
    RemoveSeason
    ,
    PodOrderCancelled
    ,
    ClaimFertilizer
    ,
    MetapoolOracle
    ,
    MockConvert
    ,
    UpdateTWAPs
    ,
    DeltaB
    ,
    SupplyNeutral
    ,
    BeanDeposit
    ,
    BeanWithdraw
    ,
    LPWithdraw
    ,
    Deposit
    ,
    RemoveSeason
    ,
    Withdraw
    ,
    UpdateWhitelistStatus
    ,
    UpdatedEvaluationParameters
    ,
    Receipt
    ,
    Shipped
    ,
    SeasonOfPlentyWell
    ,
    SeasonOfPlentyField
    ,
    MigratedAccountStatus
    ,
    MigratedPlot
    ,
    InternalBalanceMigrated
    ,
    MigratedPodListing
    ,
    MigratedPodOrder
    ,
    AddMigratedDeposit
    ,
    FertilizerMigrated
    ,
    PodApproval
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    13058439
    Etherscanarrow-up-right
    BIP-0arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-1arrow-up-right
    Commitarrow-up-right
    13597738
    Etherscanarrow-up-right
    BIP-2arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Commitarrow-up-right
    BIP-3arrow-up-right
    13735230
    Etherscanarrow-up-right
    BIP-4arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-5arrow-up-right
    Etherscanarrow-up-right
    BIP-6arrow-up-right
    Commitarrow-up-right
    13800636
    Etherscanarrow-up-right
    BIP-7arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-8arrow-up-right
    Commitarrow-up-right
    13953949
    Etherscanarrow-up-right
    BIP-9arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-10arrow-up-right
    Commitarrow-up-right
    14148509
    Etherscanarrow-up-right
    BIP-11arrow-up-right
    Commitarrow-up-right
    14218934
    Etherscanarrow-up-right
    BIP-12arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-13arrow-up-right
    Commitarrow-up-right
    14498034
    Etherscanarrow-up-right
    Commitarrow-up-right
    14498058
    Etherscanarrow-up-right
    Commitarrow-up-right
    14498067
    Etherscanarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-14arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-15arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-16arrow-up-right
    Commitarrow-up-right
    BIP-17arrow-up-right
    Etherscanarrow-up-right
    BIP-18arrow-up-right
    BIP-19arrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    Etherscanarrow-up-right
    BFP-67arrow-up-right
    Etherscanarrow-up-right
    BIP-20arrow-up-right
    Etherscanarrow-up-right
    BIP-20arrow-up-right
    Etherscanarrow-up-right
    BIP-20arrow-up-right
    15277988
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277990
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277992
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277993
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277995
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277996
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277998
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15277999
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278001
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278004
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278006
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278008
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278009
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278010
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278011
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278013
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278015
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278017
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278019
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278021
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278023
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278024
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278026
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278027
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278028
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278029
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278032
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278034
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278038
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278041
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278042
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278043
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278044
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278046
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278047
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278049
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278051
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278053
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278054
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278055
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278057
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278058
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278059
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278060
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278061
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278064
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278066
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278067
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278070
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278071
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278072
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278073
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278076
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278077
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278079
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278082
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    15278963
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-21arrow-up-right
    Etherscanarrow-up-right
    EBIP-0arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-22arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-23arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-1arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-2arrow-up-right
    Commitarrow-up-right
    15685220
    Etherscanarrow-up-right
    BIP-24arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-25arrow-up-right
    Commitarrow-up-right
    BIP-26arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-27arrow-up-right
    Commitarrow-up-right
    15703994
    Etherscanarrow-up-right
    BIP-24 Event Emissionsarrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-3arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIR-1arrow-up-right
    Etherscanarrow-up-right
    BIR-1arrow-up-right
    BIP-28arrow-up-right
    15951072
    Etherscanarrow-up-right
    BIP-29arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-4arrow-up-right
    Etherscanarrow-up-right
    EBIP-5arrow-up-right
    Etherscanarrow-up-right
    EBIP-6arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIR-2arrow-up-right
    Etherscanarrow-up-right
    BIR-3arrow-up-right
    Etherscanarrow-up-right
    BIR-4arrow-up-right
    Etherscanarrow-up-right
    BIP-30arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-7arrow-up-right
    Commitarrow-up-right
    BIP-31arrow-up-right
    BIP-32arrow-up-right
    Etherscanarrow-up-right
    BIP-33arrow-up-right
    Commitarrow-up-right
    17188356
    Etherscanarrow-up-right
    BIP-34arrow-up-right
    Commitarrow-up-right
    BIP-35arrow-up-right
    Etherscanarrow-up-right
    EBIP-8arrow-up-right
    Commitarrow-up-right
    17671557
    Etherscanarrow-up-right
    BIP-36arrow-up-right
    Commitarrow-up-right
    18028591
    Etherscanarrow-up-right
    BIP-37arrow-up-right
    Commitarrow-up-right
    18392690
    Etherscanarrow-up-right
    BIP-38arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-9arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-10arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-11arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-12arrow-up-right
    Etherscanarrow-up-right
    EBIP-13arrow-up-right
    Commitarrow-up-right
    BIP-39arrow-up-right
    Etherscanarrow-up-right
    EBIP-14arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-40arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-41arrow-up-right
    Commitarrow-up-right
    BIP-42arrow-up-right
    BIP-43arrow-up-right
    BIP-44arrow-up-right
    19927634
    Etherscanarrow-up-right
    BIP-45arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-46arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-15arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-16arrow-up-right
    Commitarrow-up-right
    BIP-47arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    EBIP-17arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-48arrow-up-right
    Commitarrow-up-right
    Etherscanarrow-up-right
    BIP-49arrow-up-right
    Commitarrow-up-right
    20921738
    Etherscanarrow-up-right
    BIP-50arrow-up-right
    Commitarrow-up-right
    EBIP-18arrow-up-right
    Arbiscanarrow-up-right
    EBIP-19arrow-up-right
    Commitarrow-up-right