Protocol mechanics
Allocation
Escrowing Coin to decide the split, in community-led or manager-led mode.
Loading…
Browse documentation
Protocol mechanics
Escrowing Coin to decide the split, in community-led or manager-led mode.
Loading…
Protocol mechanics
Escrowing Coin to decide the split, in community-led or manager-led mode.
Allocation is how holders steer the treasury. It decides which strategies receive the revenue stream, and so which assets the treasury pursues.
Allocating deposits Coin into the SignalCoin contract, which mints an equal amount of sCoin, a non-transferable receipt, and assigns that amount as weight to one or more strategies. Everything is one-for-one in raw units:
Coin deposited == sCoin minted == allocation weight assignedaddSignal(strategy, amount) does this for one strategy. addSignalMany([(strategy, amount), ...]) deposits once and assigns the total across several live strategies atomically; any failure reverts the whole batch. The caller must have approved the Coin first.
Removing an allocation is the mirror: removeSignal(strategy, amount) and removeSignalMany burn the receipt and return the Coin. There is no cooldown, no epoch lock and no removal fee, and removal keeps working after a strategy is killed. Direct Coin donations to the contract are not part of anyone's entitlement.
Any transfer of sCoin between accounts reverts. It is also an ERC20Votes token with checkpointed voting units, and the first deposit self-delegates if the account has no delegate, so allocations double as a governance-ready weight for anything built on top.
The Resonance streams routed USDG to live strategies in proportion to their weight:
strategy share = strategyWeight / totalSignalWeightEvery add or remove first checkpoints the affected strategy's revenue at its old weight and the Bribe's rewards at the account's old weight, so entitlement only ever accrues for time actually held. Killed strategies keep their existing weight recorded for exits but are excluded from totalSignalWeight, so the stream flows only to live ones.
A launch is in one of two modes, chosen by the communitySignaling boolean at launch.
Community mode (communitySignaling == true). Any Coin holder may allocate. The controller owner may set the allocation reward share of each strategy sale anywhere from 0 to 2,000 basis points (0 to 20%); Launchpad launches set it at launch.
Manager-directed mode (communitySignaling == false). The creator starts as the first approved manager. The controller owner can add or remove managers without moving their existing positions. Each manager uses its own Coin. Launchpad launches set the allocation reward share at launch, and the owner can change it from 0 to 2,000 basis points independently of membership. Removing all managers keeps additions restricted. openToCommunity() permanently opens additions to all holders without changing the reward split.
In either mode, and after any manager change, every existing holder keeps the ability to claim rewards and remove allocations. No function can restore manager-directed allocation once a launch has been opened.
In managed mode, the owner may separately withdraw a revoked manager's full position from a selected strategy. Coin goes back to the allocation holder, and earned rewards remain claimable. This does not allow the owner to redirect the Coin or use the action in community mode.
Allocators are paid from what their strategy sells for, in that strategy's asset, through the strategy's Bribe. See Allocation rewards. They are not paid from the USDG stream itself; that goes to the strategies to be auctioned.