diff --git a/standards/application/qaku.md b/standards/application/qaku.md index 8b5384c..8134c92 100644 --- a/standards/application/qaku.md +++ b/standards/application/qaku.md @@ -10,18 +10,22 @@ contributors: ## Abstract -The document describes the functions of a Waku Web application Qaku. -The use of Waku protocols in the Qaku questions and -answers web application allow for a secure , trustless environment. +The document describes the different components of the Qaku web application. +Qaku is a Waku web applications that utilizes some Waku protocols to provide a private and +censorship-resistent question and answer service. ## Background Waku is a family of robust, -censorship-resistant communication protocols designed to enable privacy-focused messaging for web3 apps. -Qaku is a questions and answers Waku web application. -It allows the user to create a Q&A board, -share a link and let users post questions. -Users can upvote questions which move to the top of the list on the board. +censorship-resistant communication protocols designed to enable privacy-focused messaging for the decentralized web. +Current Q&A platforms are controlled by centralized organizations who have the ability to remove, +block and censor content published by any user. +This could cause a user to not express their ideas or ask reall questions with fear of prosecution by a thrid party. + +Qaku aims to solve this by utilizing a few [10/WAKU]() protocols to create a Q&A forum. +The user can create a Q&A board with a wallet address, +send questions or answers directly to other peers without the need of storing and/or retrieving the content from a centralized server/domain. +Familiar features like upvoting, sharable links, and board moderation are also capable. ## Specification @@ -29,22 +33,59 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). -The Q&A board is created and maintained by an owner, -who SHOULD support an accessible interface for its users. + +### Control Message + +New Q&A boards are created by a client who SHOULD be identitfied as the `owner`. +At the time of creation, the `owner` creates a `ControlMessage` to configure the board. +This message contains all the settings of the board and is published to the Waku network. + +The `ControlMessage` is a JSON object: + +- It MUST include a title name +- It MAY include a list of admin identities. +- It SHOULD include the identity of the `owner`, idenities explianed [below](#Identity). +- It SHOULD include the start and end date for clients to publish a new post. +- + +```js +{ + "ControlMessage" : [ + title: string, + id: string, + enabled: boolean, + timestamp: number, // time the ControlMessage is created + owner: string, // the address of the owner + admins: string[], // a list of addresses + moderation: boolean, // + description: string, + updated: number, + startDate: number, + endDate?: number, + allowsParticipantsReplies: number, + delegationInfo?: DelegationInfo + ] +} + +``` + +`id`: +- SHOULD be generated from the `title` value, `timestamp` value, and the `owner` address value. + +The `ControlMessage` is the first message published on the `content-topic` of the Q&A board. +Only clients subscribed to the `content-topic` can view the `ControlMessage`. ### Identity -- Users and an owner MUST generate a private key -- The owner MUST generate a private key to before becoming the owner of the Q&A board. -- The owner address, derived from the public key, SHOULD be made public as the owner of Qaku. -- A `paasword` SHOULD be used to encrypt the private key - -The public key is used to sign and verify messages. -The owner MUST be able to enable and disable questions added to the board. +The `identity` of a client is a public address identifier in the form of a hexadecimal string. +Clients SHOULD generate a private key on a local machine and +MAY encrypt the keys with a password. +Public addresses are then generated with the private keys. +The address SHOULD be used to sign and verify messages. ### Node -The Qaku application SHOULD connect to the default Waku `pubsub_topic`. +The Qaku application SHOULD by default connect to The Waku Network. When a user accesses the Qaku app, the user joins a new session that SHOULD create a new `content_topic`. When the user exits the Qaku app, @@ -71,10 +112,9 @@ The following `message_type`s used in Qaku include: - Question Message - Answered Message -- Control Message - Upvote Message - Moderation Message -- Poll messag +- Poll Message #### Question Message @@ -112,28 +152,6 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board ``` -#### Control Message - -```js -{ - "ControlMessage" : [ - title: string, - id: string, - enabled: boolean, - timestamp: number, - owner: string, - admins: string[], - moderation: boolean, - description: string, - updated: number, - startDate: number, - endDate?: number, - allowsParticipantsReplies: number, - delegationInfo?: DelegationInfo - ] -} - -``` #### Upvote Message ```js @@ -148,6 +166,7 @@ The `AnswerMessage` type is generated by any sending an answer to the Qaku board } ``` +The owner MUST be able to enable and disable questions added to the board. When a new question is created, the interface SHOULD lis