# p2p-lending DNAs: - Holofuel (in the future maybe other MutualCredit transactors?) - p2p-lending ## User Stories Lender: el que hace el prestamo Borrower: el que recibe el prestamo - Any lender should be able to create a loan offer - A lender should be able to cancel their own loan offers - Any borrower should be able to browse loan offers - Any borrower should be able to request the lender to accept a loan offer - A lender should be able to accept a loan offer request and execute the loan - When the loan is executed: - A first transfer (or multiple transfers) of holofuel is made from the lender to the borrower - From that point on, every X days, a transfer back is going to be made, of the amount specified in the Repayment. - When the debt is repaid fully (taking into account the interest rate), no other transfers are to be made - The borrower should not be able to borrow any more money until his debts are up to date (?????) ## Structs ```rust struct Loan { loan_offer_address: Address, accept_loan_request: Address, accept_loan_request_signature: Signature, // This is the signature of the borrower when he made the accept loan request timestamp: u64, lender: Address, borrower: Address, amount: u64, interest_rate: u64, repayment: Repayment, holofuel_transactions_addresses: Vec<Address>, default_guarantee: Option<Address> } struct LoanRepayment { loan_address: Address, holofuel_transactions_addresses: Vec<Address>, repayment_complete: bool } struct LoanOffer { lender: Address, amount: u64, interest_rate: u64, repayment_method: RepaymentMethod } struct AcceptLoanRequest { loan_offer_address: Address, borrower_address: Address, holofuel_requests_addresses: Vec<Address> } struct RepaymentMethod { days_interval: u64, amount: u64 } ``` - Loan is valid only if both from and to addresses signed it ## Sequence diagrams - Alice creates loan offer ```mermaid sequenceDiagram participant AliceUI participant AliceLending AliceUI->>AliceLending: create_loan_offer(amount, interest_rate, repayment) ``` - Bob requests loan offer and makes holofuel request ```mermaid sequenceDiagram participant BobUI participant BobLending participant BobHolofuel participant AliceLending BobUI->>BobLending: request_loan(loan_offer_address) loop For every chunked of transaction BobLending->>BobHolofuel: request(alice_address) BobHolofuel-->>BobLending: request_address end BobLending->>BobLending: create_accept_loan_request(holofuel_requests_addresses) BobLending->>AliceLending: notify(accept_loan_request_address) ``` - Alice executes the loan ```mermaid sequenceDiagram participant AliceUI participant AliceLending participant AliceHolofuel participant BobLending AliceUI->>AliceLending: execute_loan(accept_loan_request_address) loop For every request AliceLending->>AliceHolofuel: execute(request_address) AliceHolofuel-->>AliceLending: transaction_address end AliceLending->>AliceLending: create_loan(transactions_addresses) AliceLending->>BobLending: notify(loan_address) ```