Summary
This vote updates the twocrypto Factory implementation slots for donation-enabled pools following the merge of the latest implementation work in twocrypto-ng.
The main change is to register the updated fx50 implementation, while clearing the yb and fx25 implementation ids. This keeps the Factory state aligned with the implementation that is ready for new deployments, while avoiding stale or superseded implementation references.
The implementation continues the donation-enabled twocrypto work from the previous posts, with additional simplification, hardening, and audit-driven changes. The external interfaces remain compatible with the previous donation-enabled design.
Vote link: Curve.finance
Background
Previous related governance posts:
- Initial implementation additions: Add new pool implementation contracts to TwoCrypto factory
- Follow-up update: Update TwoCrypto implementations (donations / yb) in the Factory
Relevant implementation work:
The reserve_profit_fraction work is grounded in the YB pool analysis and follow-up improvements described here:
Motivation
Donation-enabled twocrypto pools are intended to support FX-like and yield-basis-style markets where pool re-centering may need an explicit budget, instead of relying only on swap fees or external arbitrage.
The latest implementation improves this design in several ways:
- Adds future-proof fee hooks, making it easier to support additional fee logic without changing the pool architecture.
- Adds
reserve_profit_fraction, following the YB pool analysis linked above, allowing the pool to reserve part of the profit budget for controlled re-centering instead of exposing all of it immediately to arbitrage. - Simplifies and hardens the donation / profit accounting.
- Reworks the admin-fee structure so the implementation can support the intended fee policy more cleanly.
- Unifies the implementation path for yb and FX-style pools, reducing fragmentation between closely related variants.
Security
The updated implementation has been audited. There are no open findings left.
The audit report is expected to be published soon.
The review covered the donation-enabled accounting, fee handling, and rebalancing-related changes. Several hardening changes were incorporated during the process, and the final merged implementation reflects the resolved audit feedback.
Specification
Factory:
0x98EE851a00abeE0d95D08cF4CA2BdCE32aeaAF7F
Updated implementation:
TwoCrypto fx50
- Implementation:
0x94D8e42c786C090bC5378D205C5C531D6247BC3D - id:
keccak256("fx50")
Cleared implementation ids:
yb: set to0x0000000000000000000000000000000000000000fx25: set to0x0000000000000000000000000000000000000000
Existing pools are unaffected. This only changes which implementation contracts the Factory serves for future deployments under these ids.
DAO actions
set_pool0_impl = (
FACTORY,
"set_pool_implementation",
"0x0000000000000000000000000000000000000000",
int(keccak(text="yb").hex(), 16),
)
set_pool25_impl = (
FACTORY,
"set_pool_implementation",
"0x0000000000000000000000000000000000000000",
int(keccak(text="fx25").hex(), 16),
)
set_pool50_impl = (
FACTORY,
"set_pool_implementation",
"0x94D8e42c786C090bC5378D205C5C531D6247BC3D",
int(keccak(text="fx50").hex(), 16),
)
If passed, the Factory will serve the updated fx50 implementation for new pools, while the yb and fx25 slots will be cleared.