Skip to content
Otorofi

The Otorofi platform.

Built on Canton, signed by the wallet, settled atomically. Here's how it actually works under the hood.

Foundation

Built on Canton.

Canton is a permissioned distributed ledger designed for regulated financial workflows. Its central architectural choice, that contracts are visible only to their signatories and observers, is the foundation that makes institutional bilateral lending viable on a shared ledger.

Contracts

The DAML contract model.

Otorofi's lending lifecycle is implemented as a small set of DAML contracts. Each one defines who can see it, who can sign it, and what state transitions are valid.

DAML contracts and their signatories and observers.
ContractPurposeSignatoriesObservers
BorrowRequestThe borrower's initial request. Directed or open-market.BorrowerTargeted lender (directed only)
BorrowRequestListingThe public marketplace pitch. Borrower controls visibility.BorrowerMarketplace
LenderOfferA lender's competitive bid on a listing.LenderBorrower
PendingAgreementBilateral negotiation checkpoint requiring both signatures.Borrower, LenderNone
LoanAgreementTermsImmutable record of the agreed terms.Borrower, LenderNone
LoanAgreementStateActive loan lifecycle state machine.Borrower, LenderNone
CollateralEscrowMulti-signatory custody contract for the locked collateral.Borrower, LenderNone
Privacy

Participant-scoped privacy.

Privacy on Canton is not a policy. It is a property of the data model. Each contract has signatories and observers, and Canton's participant nodes only store and replicate contracts to parties on that list. There is no private database to leak. There is no admin to accidentally over-share. The marketplace cannot aggregate borrower behavior across deals because it never sees the deals.

Visibility of each Otorofi DAML contract to borrower, lender, marketplace, and backend.
ContractBorrowerLenderMarketplaceBackend
BorrowRequest
BorrowRequestListing
LenderOffer
PendingAgreement
LoanAgreementTerms
LoanAgreementState
CollateralEscrow
SignatoryObserverBlind
Custody

Non-custodial by construction.

Otorofi's application backend holds no private keys. Every action that touches the ledger, including creating a request, accepting an offer, locking collateral, funding principal, and repaying, is prepared as an intent on the application side and executed on the wallet side. The wallet renders a transaction summary, the user reviews it, and the wallet signs. The application's role is to prepare the right intent and surface the right context. The signing authority lives with the user.

Settlement

Atomic settlement.

Canton settles transactions atomically. When a borrower locks collateral, that's one transaction. When a lender funds principal and the loan transitions to Active, that's one transaction. When a borrower repays and the collateral releases, that's one transaction. There is no two-phase commit, no escrow waiting period, no reconciliation step. The state machine moves all parties forward at once.

On the default path: past due triggers a 72-hour grace period, then a default notice opens a 24-hour window, then the lender can seize the collateral by accepting the locked transfer. Each transition is an explicit action; none are automatic.

Surface

The Workbench.

The Workbench is the user-facing surface for every party. It is a single inbox that lists every deal needing your action, whether you are a borrower or lender and whether the item is a request, offer, collateral event, or repayment. There are no hidden queues. There is no separate borrower view and lender view. There is your action inbox, and there is the deal.

  • 1

    Phase badge

    Where this deal sits in the lifecycle. Color matches semantic status.

  • 2

    Role badge

    Whether you act as borrower or lender on this deal.

  • 3

    Next action

    What the protocol expects next, from whom.

  • 4

    Deadline

    Time remaining before the next state transition.

Get started

Talk to the team.

We will walk you through the platform and discuss how Otorofi fits your workflow.

Request access