Protocol mechanics
Signal
Escrowing Coin to decide the split, in holder-led or manager-led mode.
Loading…
Protocol mechanics
Escrowing Coin to decide the split, in holder-led or manager-led mode.
Loading…
Protocol mechanics
Escrowing Coin to decide the split, in holder-led or manager-led mode.
Signaling is how holders steer the treasury. It decides which strategies receive the revenue stream, and so which assets the treasury pursues.
Signaling 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 == signal 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 a signal 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 signals double as a governance-ready weight for anything built on top.
The Resonance streams routed USDC 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.
Holder-led mode (communitySignaling == true). Any Coin holder may signal. The controller owner may set the signal reward share of each strategy sale anywhere from 0 to 2,000 basis points (0 to 20%); Launchpad launches set it at launch.
Manager-led mode (communitySignaling == false). The team 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 signal 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 signals. No function can restore manager-led signaling once a launch has been opened.
In manager-led mode, the owner may separately withdraw a revoked manager's full position from a selected strategy. Coin goes back to the signal holder, and earned rewards remain claimable. This does not allow the owner to redirect the Coin or use the action in holder-led mode.
Signalers are paid from what their strategy sells for, in that strategy's asset, through the strategy's Bribe. See Signal rewards. They are not paid from the USDC stream itself; that goes to the strategies to be auctioned.