fn repay(
env: soroban_sdk::Env,
borrower: soroban_sdk::Address,
loan_id: u64,
) -> Result<(), SettlementError>
fn bump_ttl(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn is_paused(env: soroban_sdk::Env) -> bool
fn set_admin(
env: soroban_sdk::Env,
current_admin: soroban_sdk::Address,
new_admin: soroban_sdk::Address,
) -> Result<(), ProtocolError>
Wire the cross-contract references. One-shot; callable only by the admin bound
at construction. Front-running is impossible because the admin is fixed by the
__constructor and this call requires that admin's authorization.
fn initialize(
env: soroban_sdk::Env,
offer_book: soroban_sdk::Address,
loan_position: soroban_sdk::Address,
collateral_vault: soroban_sdk::Address,
lending_vault_factory: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn set_paused(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
paused: bool,
) -> Result<(), ProtocolError>
fn is_processor(env: soroban_sdk::Env, address: soroban_sdk::Address) -> bool
Bind the admin to the deploying identity atomically with deployment.
__constructor runs in the same operation as deploy, so there is no
deploy→configure window an attacker could front-run. The admin is fixed here
and cannot be reassigned by a later initialize call (which only wires the
cross-contract references and is gated on this admin's auth). This closes the
unprotected-initializer front-running / admin-capture vector (HAL-01).
fn __constructor(env: soroban_sdk::Env, admin: soroban_sdk::Address)
fn add_processor(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
processor: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn claim_default(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
loan_id: u64,
) -> Result<(), SettlementError>
fn is_liquidator(env: soroban_sdk::Env, address: soroban_sdk::Address) -> bool
Match after borrower has pledged collateral. Matcher (caller) supplies principal: token
transfer(from=caller, to=settlement_engine) then full principal to borrower (no match fee).
Matcher: admin, or (if whitelist empty) any address, or a whitelisted address.
principal_amount is the size of the loan being created. Validation:
[request.min_principal_amount, request.principal_amount]. Any value in that band is
accepted; the lending vault enforces who may pick a sub-hard-cap value.request.principal_amount (full-fund-only).fn match_request(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
request_id: u64,
principal_amount: i128,
) -> Result
fn add_liquidator(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
liquidator: soroban_sdk::Address,
) -> Result<(), ProtocolError>
Cancel a pending upgrade proposal.
fn cancel_upgrade(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), ProtocolError>
Execute a previously proposed upgrade once the timelock has elapsed.
fn execute_upgrade(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), ProtocolError>
Stage an upgrade to be executed after the timelock period (48 h).
fn propose_upgrade(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
new_wasm_hash: soroban_sdk::BytesN<32>,
) -> Result<(), ProtocolError>
fn remove_processor(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
processor: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn liquidator_buyout(
env: soroban_sdk::Env,
liquidator: soroban_sdk::Address,
loan_id: u64,
usdc_amount: i128,
collateral_recipient: Option,
) -> Result<(), SettlementError>
Lock borrow collateral for an active request (required before match_request).
fn pledge_collateral(
env: soroban_sdk::Env,
borrower: soroban_sdk::Address,
request_id: u64,
) -> Result<(), SettlementError>
fn protocol_treasury(env: soroban_sdk::Env) -> soroban_sdk::Address
fn remove_liquidator(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
liquidator: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn cancel_penalty_bps(env: soroban_sdk::Env) -> u32
fn liquidate_by_price(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
loan_id: u64,
) -> Result<(), SettlementError>
fn force_vault_default(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
loan_id: u64,
) -> Result<(), SettlementError>
Read-only: whether address is the configured settlement engine admin (for vault execute_match auth).
fn is_settlement_admin(env: soroban_sdk::Env, address: soroban_sdk::Address) -> bool
fn cancel_borrower_offer(
env: soroban_sdk::Env,
borrower: soroban_sdk::Address,
request_id: u64,
) -> Result<(), SettlementError>
Anyone: past funding deadline, vault has zero principal deposits, no LP funds stuck. Wind down an unmatched borrow request after its funding window has closed.
Permitted at any deposit level — including soft-cap-met-but-never-matched vaults — so LPs
aren't stranded when the borrower fails to call execute_match before the deadline.
mark_cancelled flips the per-request vault to Closed, which unblocks LP redeem
(LPs receive their principal token deposits pro-rata at par; no loan was ever created).
Pledged collateral, if any, is released back to the borrower.
fn expire_unfunded_offer(
env: soroban_sdk::Env,
request_id: u64,
) -> Result<(), SettlementError>
fn fee_liq_principal_bps(env: soroban_sdk::Env) -> u32
fn set_proc_cancel_grace(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
seconds: u64,
) -> Result<(), ProtocolError>
fn set_protocol_treasury(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
treasury: soroban_sdk::Address,
) -> Result<(), ProtocolError>
fn fee_repay_interest_bps(env: soroban_sdk::Env) -> u32
fn liquidator_surplus_bps(env: soroban_sdk::Env) -> u32
Same economics as borrower cancel; requires processor role and funding deadline + grace elapsed. Borrower must also authorize (penalty transfer).
fn processor_cancel_offer(
env: soroban_sdk::Env,
processor: soroban_sdk::Address,
borrower: soroban_sdk::Address,
request_id: u64,
) -> Result<(), SettlementError>
fn set_cancel_penalty_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn min_collateral_ratio_bps(env: soroban_sdk::Env) -> u32
fn proc_cancel_grace_seconds(env: soroban_sdk::Env) -> u64
fn set_fee_liq_principal_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn fee_default_collateral_bps(env: soroban_sdk::Env) -> u32
fn set_fee_repay_interest_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn set_liquidator_surplus_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn cancel_penalty_protocol_bps(env: soroban_sdk::Env) -> u32
0 disables the check. Requires oracle_address on the request when above zero.
fn set_min_collateral_ratio_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn set_fee_default_collateral_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
fn set_cancel_penalty_protocol_bps(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
bps: u32,
) -> Result<(), ProtocolError>
Pre-match liquidation: ACTIVE request with pledged collateral, pooled vault with LP shares,
LiquidatorBuyout policy, and the collateral price has breached liquidation_price on a
whitelisted oracle (HAL-03). Liquidator pays the oracle-fair anchor (less LiquidatorSurplusBps
fn liquidator_settle_active_request(
env: soroban_sdk::Env,
liquidator: soroban_sdk::Address,
request_id: u64,
usdc_amount: i128,
) -> Result<(), SettlementError>