5.6 KiB
| title | name | category | tags | editor | contributors | |
|---|---|---|---|---|---|---|
| WAKU-APP-QAKU | Waku App Qaku | Standards Track | waku |
|
Abstract
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 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
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
Clients publish questions to a content-topic address which is held by the Waku Network.
A collection of questions are owned by the content-topic,
while a collection of answers are owned by the questions.
All clients MUST have and identity recognized by the network to publish new content.
More on identity below.
Creating a New Board
A client creating a new Q&A board is identitied as the owner.
The owner MAY share the content-topic with other clients,
as the owneris the first client to know the content-topic for the new board.
At the time of creation, the owner SHOULD create a ControlMessage to configure a Q&A board
and publish to the Waku network.
Control Message
This message contains all initial Q&A board.
The ControlMessage is a JSON object:
- It MUST include a title name
- It MAY include a list of client public addresses identified as
admin. - It SHOULD include the public address of the
owner, identity explianed below. - It SHOULD include the start and end date for clients to publish a new post.
{
"ControlMessage" : [
title: string,
id: string,
enabled: boolean,
timestamp: number, // time the ControlMessage is created
owner: string, // the public 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:
- MAY be generated from the
titlevalue,timestampvalue, and theownerpublic address value. - MAY be hexadecimal characters of SHA-256***
Clients subscribed to the Q&A board content-topic, using the 12/WAKU2-FILTER,
MUST be able to view the ControlMessage.
Identity
All clients MUST have identity consisting of a public address identifier in the form of a hexadecimal string.
Clients generate cryptographic key pair, public and private keys, and
the private key MAY be encrypt a password.
Public addresses are derived from the public keys as a hexadecimal string.
This address SHOULD be recongized by the other clients in the network to idenitify clients.
Each identity SHOULD be stored locally.
The address SHOULD be used to sign and verify messages.
Messages
The Waku network processes real-time message updates, which enables new questions and answers to be acceisble quickly.
A conec ulti
Messages are sent to a content_topic that are identified as a message_type.
The 13/WAKU-STORE nodes provide historical storage of the Qaku messages.
The following message_types used in Qaku include:
- Question Message
- Answered Message
- Upvote Message
- Moderation Message
- Poll Message
Question Message
The QuestionMessage type is generated by any user asking a new question on a Qaku board.
{
"QuestionMessage" : [
"question": string,
"timestamp": number,
"author?": identity,
"delegationInfo?": delegationInfo
]
}
Answered Message
The AnswerMessage type is generated by any sending an answer to the Qaku board.
{
"AnswerMessage" : [
hash: string,
text: string,
timestamp: number,
delegationInfo?: delegationInfo
]
}
Upvote Message
{
"UpVoteMessage" : [
questionId: string,
hash: string,
type: UpvoteType,
timestamp: number,
delegationInfo?: DelegationInfo;
]
}
The owner MUST be able to enable and disable questions added to the board. When a new question is created, the interface SHOULD lis
Qaku uses the following 10/WAKU protocols:
- the 19/WAKU2-LIGHTPUSH to push a message type to the Waku network.
- the 12/WAKU2-FILTER to subscribe to Waku
content_topicand listen to messages published to that topic. - the 13/WAKU-STORE to query and load old messages from the Waku network for users.
- A new
content_topicis created when a new Q&A board is created. - All questions and answer are pushed to the content_topic
Copyright
Copyright and related rights waived via CC0.