Flow of Funds
While there is nuance in how pools get allocated by Strategies, there are
generally four steps in the life cycle of a pool.
Each step is invoked on Allo.sol
, which calls the relevent
method on the strategy.
Creating a pool
The Allo core contract has two methods for creating a pool:
- The
createPool
(opens in a new tab) method - The
createPoolWithCustomStrategy
(opens in a new tab) method
This first method for creating a pool creates a new pool by
cloning an already deployed one. This makes it simple to make use of existing
on-chain strategies. If you're using a custom or newly developed strategy, then you
would deploy it to chain, and use the second method (createPoolWithCustomStrategy
).
Some things to note:
- Pools must be created by a Profile from the Registry
- Pools can be created with an initial balance of 0 and funded later
- By default, anyone can fund a pool
Funding a Pool
A pool can be funded when it is created and/or it can be funded afterwards. You can do either or you can do both. If funding the pool after creating it, then use
- The
fundPool
(opens in a new tab) method
Pools can be funded with either native Ether or an ERC20 token. Note though
that a pool can only distribute one token, which is determined when the pool is
created. Trying to call fundPool
with a token other than the one used when the
pool was created will cause the method to revert with an error. **Pools should
always be funded using the fundPool
method and you should never transfer funds
directly to Allo.sol
Once a pool has been funded, there is no way to withdraw funds from the pool
bypassing the terms defined by the strategy. Strategies will have a
withdraw
(opens in a new tab)
method, though conditions for its use will vary.
Some things to note:
- The address that creates the pool doesn't have to be the one that funds it
- Pools can only distribute one token (including native Ether)
- Never directly transfer funds to
Allo.sol
Allocating Funds
While strategies define the terms of allocation, the act of allocating is done
through Allo.sol
. This provides a consistent interface for use.
- The
allocate
(opens in a new tab) method
Some things to note:
- Allocate can probably only be called by pool managers
- Strategies can be simple or complex. You can read more about them here.
Distributing Funds
Again, strategies define the terms of distribution, but the method is invoked
through Allo.sol
. This provides a consistent interface for use.
- The
distribute
(opens in a new tab) method
Some things to note:
- Distribute can probably only be called by pool managers
- Allocation strategies are responsible for managing how a pool is distributed, not
Allo.sol