Prepared by:
HALBORN
Last Updated 07/14/2026
Date of Engagement: June 16th, 2026 - July 1st, 2026
100% of all REPORTED Findings have been addressed
All findings
14
Critical
0
High
1
Medium
3
Low
10
Informational
0
Splyce engaged Halborn to perform a security assessment of Concord, its fixed-term peer-to-peer lending protocol built on Stellar/Soroban, beginning on June 16th, 2026 and ending on July 1st, 2026. The assessment was scoped to the code and components provided by the Splyce team. Commit hashes and the full list of reviewed components are available in the Scope section of this report.
Concord is a fixed-term, over-collateralized lending market. Borrowers post collateral and publish borrow requests describing the principal, term, and rate they are willing to pay; lenders fund a per-request ERC-4626-style lending vault and receive tradable share tokens representing their claim on the loan. When a request is matched, the borrower receives principal and the collateral is escrowed; at maturity the loan is repaid, or, if the borrower defaults or the position becomes unhealthy, the collateral is liquidated and distributed back to lenders. An optional SEP-0040 oracle enables price-based liquidation.
The review focused on the core on-chain components of the protocol: the offer_book request registry and whitelists, the settlement_engine that is the sole mover of collateral and the authority for loan and vault state transitions, the per-request lending_vault (share token plus vault accounting) and its lending_vault_factory, the loan_position and collateral_vault records and escrow, the optional request_router convenience wrapper, and the shared common crate covering oracle math, share-token metadata, and event helpers.
Halborn allocated time for this engagement and assigned full-time security engineers with strong backgrounds in smart contract security, decentralized finance, and Stellar/Soroban development.
The goals for this assessment were to:
Confirm that the lending lifecycle — request creation, matching, repayment, default, and liquidation — behaves the way it is meant to across every state transition.
Verify that collateral and lender funds are custodied, accounted for, and released safely throughout the life of each loan and vault.
Review the access-control model and the trust boundaries between the offer book, settlement engine, vaults, and their factory.
Check the correctness of the vault share accounting, interest-tier and fee math, and the oracle-based valuation and liquidation logic.
Identify anything that could affect the safety of the protocol or the assets it holds.
In summary, Halborn identified a number of areas where the security of the system can be further strengthened, ranging from a high-severity issue down to several low-severity observations. Each one is described in detail later in this report, together with clear and practical recommendations. The Splyce team was responsive and engaged throughout the engagement. All issues identified during the audit have since been addressed, further enhancing the robustness of an already well-designed solution.
| Security analysis | Risk level | Remediation |
|---|---|---|
| SettlementEngine::initialize is unprotected and front-runnable | High | Solved - 07/08/2026 |
| LendingVault::do_redeem burns shares before computing payout | Medium | Solved - 07/08/2026 |
| liquidator_settle_active_request force-sells healthy collateral with no distress condition or borrower consent | Medium | Solved - 07/08/2026 |
| liquidate_by_price relies on a single oracle spot price with no TWAP/deviation guard | Medium | Solved - 07/08/2026 |
| LoanPosition::create_loan stores an unvalidated non-positive oracle liquidation_price | Low | Solved - 07/08/2026 |
| finalize_offer_cancel bases the cancel penalty on the full request principal and pays the treasury with no lender exposure | Low | Solved - 07/08/2026 |
| OfferBook::create_request and set_oracle accept a non-positive liquidation_price | Low | Solved - 07/08/2026 |
| CollateralVault value-moving and terminal state transitions emit no events | Low | Solved - 07/08/2026 |
| RequestRouter and CollateralVault initialize write mandatory config without TTL maintenance | Low | Solved - 07/08/2026 |
| do_deposit and lock_collateral trust the nominal amount instead of the measured balance delta | Low | Solved - 07/08/2026 |
| is_valid_share_token_metadata performs no content validation, enabling share-token metadata spoofing | Low | Solved - 07/08/2026 |
| create_request does not cap interest_rate_schedule length, allowing unbounded persisted vectors | Low | Solved - 07/08/2026 |
| set_vault_wasm_hash changes vault code instantly, bypassing the 48-hour upgrade timelock | Low | Solved - 07/08/2026 |
| receive_default_collateral overwrites TotalAssets and is replayable, corrupting LP share accounting | Low | Solved - 07/08/2026 |
Halborn strongly recommends conducting a follow-up assessment of the project either within six months or immediately following any material changes to the codebase, whichever comes first. This approach is crucial for maintaining the project’s integrity and addressing potential vulnerabilities introduced by code modifications.
// Download the full report
concord (fixed-term peer-to-peer lending protocol)
* Use Google Chrome for best results
** Check "Background Graphics" in the print settings if needed