Summary
Pool creation is currently self-authorized by the caller, while the repayment contract initializer stores an administrator without requiring that administrator's authorization. This leaves deployment and global pool-ID ownership without a canonical trust boundary.
Repository evidence
contracts/repayment/src/lib.rs initializes and stores the admin without calling admin.require_auth().
contracts/chainmove-pool/src/lib.rs lets any caller self-authorize as owner and create a globally keyed DataKey::Pool(pool_id).
Scope
- Introduce an authenticated bootstrap/factory authority for initialization and pool creation.
- Bind pool IDs to the canonical registry/factory and emit authority/version metadata in creation events.
- Define a one-time initialization path that cannot be replayed or taken over.
Acceptance criteria
Tests
Non-goals
- Redesigning pool economics or the repayment schedule.
Summary
Pool creation is currently self-authorized by the caller, while the repayment contract initializer stores an administrator without requiring that administrator's authorization. This leaves deployment and global pool-ID ownership without a canonical trust boundary.
Repository evidence
contracts/repayment/src/lib.rsinitializes and stores the admin without callingadmin.require_auth().contracts/chainmove-pool/src/lib.rslets any caller self-authorize asownerand create a globally keyedDataKey::Pool(pool_id).Scope
Acceptance criteria
Tests
Non-goals