# Mutual-credit zome ## Assumptions - Transactor zomes - Every transaction is public in the DHT - This zome can be used in many different contexts -> scales (networks of 10 to 1000 nodes) ## Entries ```rust #[hdk_entry(visibility = "public")] struct Transaction { spender_balance: isize recipient_balance: isize amount: usize timestamp: Timestamp recipient: AgentPubKey spender: AgentPubKey spender_last_transaction: EntryHash recipient_last_transaction: EntryHash } ``` Roberto->Hedayat: EntryHash3 Hedayat->Guillem: EntryHash1 Roberto->Thomas: EntryHash2 Guillem->Roberto: { spender_last_transaction: EntryHash1 recipient_last_transaction: EntryHash2 } ```mermaid graph TD subgraph paths end ``` ## ZomeFunctions Request Credits ```mermaid sequenceDiagram participant receiver_UI participant receiver_transactor participant sender_transactor receiver_UI->>receiver_transactor: request_credits(amount, sender) receiver_transactor-->>receiver_transactor: create entry with signature in DHT receiver_transactor-->>receiver_transactor: create_link from sender_pub_key receiver_transactor-->>receiver_transactor: create_link from receiver_pub_key receiver_transactor-->>sender_transactor: remote_signal(request_hash) ``` Accept Request ```mermaid sequenceDiagram participant sender_UI participant sender_transactor participant receiver_transactor sender_UI->>sender_transactor: accept_request(request_hash) sender_transactor-->>sender_transactor: create transaction and publish it (with the receiver signature inside the request) sender_transactor-->>sender_transactor: create_link from sender_pub_key sender_transactor-->>sender_transactor: create_link from receiver_pub_key sender_transactor-->>sender_transactor: remote_signal(receiver) ``` Reject Request ```mermaid sequenceDiagram participant sender_UI participant sender_transactor participant receiver_transactor sender_UI->>sender_transactor: reject_request(request_hash) sender_transactor-->>sender_transactor: deletes request sender_transactor-->>sender_transactor: deletes link from receiver sender_transactor-->>sender_transactor: deletes link from sender sender_transactor-->>sender_transactor: remote_signal(sender) ``` ## MVP features - Core flow (request, accept, reject) - Balance transaction - UI + Notifications? - ## 3rd horizon (Ideas to revisit downstream) - exchange proposals - others paying for your credit (accepting) => Gift? -
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up