Code references
These links show the code behind How Precept works, Lending economics and Risks. They are pinned to 62c8e9b in Templar-Protocol/precept and to the deployed proxy oracle releases in Templar-Protocol/contracts (runtime v0.1.4, governance v0.1.5), so a link can differ from the latest code.
How Precept works
How Precept handles a shortfall
- pool/src/auctions/auction.rs:184-186
- backstop/src/contract.rs:173-195
- pool/src/auctions/auction.rs:109-111
- pool/src/pool/config.rs:27-29
- pool/src/pool/gulp.rs:11-30
- pool/src/pool/bad_debt.rs:54-118
An isolated position
- pool/src/pool/health_factor.rs:27-110
- pool/src/pool/actions.rs:253-322
- pool/src/pool/actions.rs:406-408
- pool/src/pool/actions.rs:467-515
- pool/src/pool/submit.rs:212-238
- pool-factory/src/pool_factory.rs:84-87
- pool/src/pool/actions.rs:433-457
- pool/src/auctions/user_liquidation_auction.rs:92-201
- pool/src/pool/submit.rs:36-77
- pool/src/pool/pool.rs:151-154
What a liquidation fills against
- pool/src/auctions/auction.rs:291-312
- pool/src/pool/actions.rs:313-322
- pool/src/auctions/auction.rs:150-155
- pool/src/pool/pool.rs:76-80
- pool/src/pool/pool.rs:146-154
- pool/src/auctions/auction.rs:126-138
When there is nothing left to bid
- pool/src/pool/bad_debt.rs:11-118
- pool/src/events.rs:188-198
- pool/src/pool/bad_debt.rs:96-116
- pool/src/events.rs:179-182
- pool/src/events.rs:201-204
- pool/src/events.rs:207-210
- pool/src/pool/bad_debt.rs:63-74
- pool/src/pool/bad_debt.rs:20-22
- pool/src/auctions/user_liquidation_auction.rs:218-220
Who runs the market, and which levers stay
- pool-factory/src/pool_factory.rs:59-107
- pool-factory/src/storage.rs:19-25
- pool/src/storage.rs:58-73
- pool/src/pool/config.rs:211-227
- pool/src/pool/config.rs:85-88
- pool/src/pool/config.rs:115-134
- pool/src/contract.rs:406-408
- pool/src/pool/status.rs:95-101
- pool/src/pool/status.rs:84-141
- pool/src/contract.rs:383-404
- pool/src/storage.rs:290-320
Lending economics
1. Reserves, lenders, borrowers
- pool/src/pool/actions.rs:349-351
- pool/src/pool/actions.rs:452-454
- pool/src/pool/config.rs:115-134
- pool/src/pool/config.rs:27-29
2. Health factor
- pool/src/pool/health_factor.rs:27-84
- pool/src/pool/actions.rs:406-408
- pool/src/pool/actions.rs:313-316
3. Liquidation auctions
Creating an auction
- pool/src/auctions/user_liquidation_auction.rs:12-77
- pool/src/auctions/user_liquidation_auction.rs:92-201
Dutch auction pricing
Filling
Stale auctions and the free-collateral window
- pool/src/auctions/user_liquidation_auction.rs:218-220
- pool/src/pool/bad_debt.rs:60-74
- pool/src/pool/actions.rs:313-322
- pool/src/auctions/auction.rs:150-155
- pool/src/pool/pool.rs:76-80
- pool/src/pool/pool.rs:146-154
- pool/src/auctions/auction.rs:126-138
5. When the collateral runs out: lenders take the loss
- pool/src/auctions/user_liquidation_auction.rs:218-219
- pool/src/pool/bad_debt.rs:54-118
- pool/src/events.rs:185-199
- pool/src/pool/user.rs:124-135
- pool/src/pool/user.rs:313-323
- pool/src/events.rs:179-183
- pool/src/pool/bad_debt.rs:96-116
- pool/src/events.rs:201-204
- pool/src/pool/user.rs:313-323
What the market checks
What stops when a price is stale
Oracle sources and refresh
- contracts: contract/proxy-oracle/soroban/common/src/lib.rs:159-166
- contracts: contract/proxy-oracle/soroban/contract/src/conversion.rs:132-143
- pool-oracle-adapter/src/lib.rs:51-134
- pool-oracle-adapter/src/lib.rs:194-197
- pool-oracle-adapter/src/lib.rs:112-114
Risks
What is not protecting a lender
- backstop/src/contract.rs:262-284
- backstop/src/contract.rs:173-195
- pool/src/auctions/auction.rs:109-111
- pool/src/pool/config.rs:27-29
- pool/src/pool/gulp.rs:11-30
- pool/src/pool/bad_debt.rs:86-102
- pool/src/pool/user.rs:124-135
What can cost a lender money
The oracle is the single point of failure
- pool/src/pool/submit.rs:214-219
- pool/src/pool/actions.rs:494-511
- pool/src/pool/actions.rs:467-484
- pool/src/pool/actions.rs:406-408
- pool/src/pool/actions.rs:253-262
- pool/src/pool/actions.rs:313-316
- pool/src/auctions/user_liquidation_auction.rs:218-220
- pool/src/pool/bad_debt.rs:63-74
- pool/src/pool/health_factor.rs:27-42
- pool/src/auctions/user_liquidation_auction.rs:47
- pool/src/pool/actions.rs:445-447
- pool/src/pool/pool.rs:123-143
- pool/src/pool/pool.rs:100-113
- pool/src/pool/health_factor.rs:35-42
- pool/src/pool/actions.rs:337-354
- pool-oracle-adapter/src/lib.rs:51-134
- pool-oracle-adapter/src/lib.rs:194-197
- contracts: contract/proxy-oracle/soroban/common/src/lib.rs:159-166
- contracts: contract/proxy-oracle/soroban/contract/src/conversion.rs:132-143
- contracts: contract/proxy-oracle/soroban/common/src/lib.rs:155-173
Market admin
- pool/src/contract.rs:383-404
- pool/src/storage.rs:290-320
- pool/src/pool/status.rs:84-141
- pool/src/pool/config.rs:94-98
- pool/src/pool/config.rs:110-112
- pool/src/contract.rs:420-428
- pool/src/contract.rs:430-437
- pool/src/pool/config.rs:85-88
- pool/src/pool/config.rs:115-134
- pool/src/pool/config.rs:85-98
- pool/src/contract.rs:406-408
- pool/src/pool/status.rs:95-101
- backstop/src/contract.rs:288-295
- backstop/src/backstop/fund_management.rs:10-20
Disabled assets
Pool factory
Backstop
- pool/src/pool/status.rs:16-79
- pool/src/contract.rs:171-189
- backstop/src/backstop/pool.rs:24-82
- backstop/src/backstop/pool.rs:106-116
- backstop/src/contract.rs:205-223
- backstop/src/constants.rs:13-14
- backstop/src/backstop/withdrawal.rs:52-90
Oracle governance
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:75-83
- contracts: contract/proxy-oracle/soroban/governance-common/src/lib.rs:170-197
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:84-89
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:194-205
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:90-145
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:146-160
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:208-219
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:138-163
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:161-188
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:407-413
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:189-199
- contracts: contract/proxy-oracle/soroban/governance-common/src/lib.rs:190-197
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:200-207
- contracts: contract/proxy-oracle/soroban/governance-contract/src/roles.rs:27-49
- contracts: contract/proxy-oracle/soroban/governance-contract/src/lib.rs:43-68
- contracts: contract/proxy-oracle/soroban/governance-contract/src/roles.rs:31-49
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:30-42
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:129-136
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:165-192
- contracts: contract/proxy-oracle/soroban/contract/src/lib.rs:327-360
- contracts: contract/proxy-oracle/soroban/governance-contract/src/engine.rs:44-59
- contracts: contract/proxy-oracle/soroban/governance-common/src/lib.rs:11-12
- contracts: contract/proxy-oracle/governance-kernel/src/lib.rs:452-477
- contracts: contract/proxy-oracle/soroban/governance-common/src/lib.rs:258-260
- contracts: contract/proxy-oracle/governance-kernel/src/lib.rs:44-46
- contracts: contract/proxy-oracle/soroban/governance-common/src/lib.rs:223-232
- contracts: contract/proxy-oracle/soroban/governance-contract/src/lib.rs:94-167