This commit is contained in:
Jimmy Debe 2025-08-21 18:36:12 -04:00 committed by GitHub
parent 4ed8bf79e1
commit d578604fed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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