2025-08-26 15:41:36 -04:00

5.6 KiB

title name category tags editor contributors
WAKU-APP-QAKU Waku App Qaku Standards Track waku
Jimmy Debe <jimmy@status.im>

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 title value, timestamp value, and the owner public 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_topic and 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_topic is created when a new Q&A board is created.
  • All questions and answer are pushed to the content_topic

Copyright and related rights waived via CC0.

References