# Compound Action Client-server architecture client-string to the app-'server'-ring what do we write in the log? JSON-RPC 2.0 ```json= { "jsonrpc": "2.0", "method": "OUR_METHODS", "params": { "appId": "", "peerId": "", "metatx": "", "metatxSign": "", "record": "", // encoding of recordNode,EventNode,EncodedHeaderNode,EncodedBodyNode "body": "", // encoding of Message and (optionally) children "serviceKey": "", //PubKey "readkey": "", }, "id": "<id>" } ``` in a record_body we write (a) `message(s)` a. as a node I only have a service key, no read key; so I cannot decrypt the body; no messages are passed to the application layer b. as a node I have a service key and a read key, I can decode the body, and pass the cbor-encoded messages up to the application layer. as a user: root-avatar |L_n |L_n-1 |... |L_0 in L_i | | | app-avatar (k devices, m logs) |L_(k_m) | this app-avatar can be read by the ring (public) examples: - client pushes obj to ring member - IPLD_Node of the object; CID_obj - in metatx, `declareConstant` referencing CID_obj; tokenId and make ring spender - serialised_obj needs to be passed in (HTTP) request - write bodyNode with which references CID_obj ```json= { } ``` - text messaging - Alice messages Bob - Alice must open a cache in the ring caching for Bob (eg. 1KB for 24hrs) - Alice must pay for opening the cache upfront (mtx) - Alice must pay for each write to the cache (mtx) - Bob must pay to pull from the cache (payment channel) - ~~payments can be done over payment channel~~? - Alice puts a message to Bob in ```protobuf= message InterAvatarMessage { // A global address of a receiver's avatar. bytes globalAddressDestinationAvatar = 1; // Encrypted bytes of the string of the text message // with Bob's avatar public encryption key. bytes encryptedText = 2; } ``` metatransaction ```golang= type Text struct { Txt string } ``` ## stack rehash Application service ^ | Messages v Mosaic Node, handling logs and clocks/contracts |- HTTP service |- accept requests ## Notes NOTE: break ownership transfer of NDT into 2-step ownership transfer 1. acknowledge ownership; accountability 2. data transfer is not instantaneous; GET: get doc - GET requests can be grouped in a SWL record for the ring member POST: post (new) doc - idempotent - new (append-only) doc to server - each post creates a new SWL record for the ring member - in mtx tokenId of Constant to share public information with the ring processing it: eg. my tracing marker -> private: record only needs to be servicable/traversable (service key, not read key) -> public: if logic is executed in mtx, at block-confirmation time; HTTP response is: 1. check validity of compound action, signatures, (and simulated call); and respond good reception as a ring-member; 2. should ## Random reference ## Scratchpad