###### tags: `Waku Objects`
# Waku Objects / Summary
## A Modular System For Transactional Chat Objects
### A Waku Object is a chat widget. Chat members interact through the Waku Object's GUI to execute a specific transactional cryptographic protocol.
### The curated store of Waku Objects grows over time as developers charge a fee for the use of their object.

## Project Breakdown
- Application layer visual system / framework (os agnostic)
- Theme / flavor / branding system
- Examples for web (wakuobjects.js), optionally ios (lib), android (lib) implementations in a basic chat app example
- Waku Objects Store: Curated repository

*Sketches on how to add a Waku Object to a chat conversation*
## Examples
In the examples we will build, a _best practice_ is presented in how to create or use a customisable Waku Object, in terms of UI theming, but also in functionality and configuration.
Following is a list of potential candidates for the first Waku Objects, these are just illustrations and are not to be taken as deliverables.
### Hello World
**Level 1: Beginner**
a simple ts chat app with using waku. Features Hello World object, which can be added to any 1 on 1 conversation by clicking a + button on the left side of the text input field and selecting "Hello World" from the popup menu. An object is added to the chat. For A it shows "waiting for other to accept". On the side B it shows "accept blablabla?" with a trust score to be found in the kurate feed for trusted objects. When B accepts, on screen A the user can enter a name and hit save / send. On screen B the object changes state to Hello World which looks like a boarding pass for a first class flight to Decentraland with user's name in it.
### Teller
**Level 2: Advanced**
https://github.com/status-im/status-teller-network
[](https://i.imgur.com/Y8Aw86s.jpg)
### Rides
**Level 3: Expert Level**
In this example a ridesharing scenario is described.
Antwerp Decentralised Taxi downloaded Waku Desktop. You need it in order to create and maintain a "business" chat persona. The business persona can have multiple users, who will be able to manage the conversations. The admin can setup auto-reply features, for instance a short welcoming text with a Waku Object.
In this case, the Admin added the ridesharing waku object.
When adding it the admin could set a fee and fee destination.
UX: Customer downloads the Antwerp Decentralised Taxi app and taps "request a ride".
BACKSTAGE: Customer becomes member of a semaphore group
UX: Customer enters chat conversation and sees a welcoming message.
"Hi there welcome to antwerp taxi, to continue please accept this object" (trust score for this object can be found in semaphore group of waku objects store)
Customer taps "accept" and the object changes into a "form"
Customer enters pickup and destination details, price is calculated, payment is in escrow, a fee is subtracted (goes to the developers / maintainers of this Waku Object), shows interface "connecting to driver".
### Other Objects
* **Simple receive payment:** Simple way to privately receive money. Specify a currency, an amount, wallet address.
* **Simple send payment:** Simple way to privately send money.
* **Advanced / split payments:** splitting a bill, or raising fund where there might be a total amount and multiple payments not necessarily equal.
* **Location-based services:** an object that guides you in each other's direction without ever revealing a user's location
* **Showing ZK proofs:** for instance my REP, or that I belong to a specific group, etc. This would be like a certificate.
* **Poll/Voting on options:** this could be a simple object where I can ask members of the group to vote on certain choices, this could be useful for deciding on a place or time to meet, or check the group opinion on any topic. We could also ensure that voting is anonymous and each member can only vote once. There might be interesting options to define the voting process (quadratic, etc.)
* **Games:** Simple games where players play in turns, it could be two or more players.
## Dependencies in the ecosystem / logos / status
- Waku introduces the concept of "pro" or "group" identities
- Waku Desktop App or Status Desktop App or a web interface on web.waku.eth > sign in w keycard screen to manage the group account (status desktop browser)
- Status messenger implements behaviour for Waku Objects
- Dark ZK-EVM / rollup
## Strategy
1. Research, product and project definition
2. Developing the system (documentation, libraries and store) by creating the first widget(s)
3. Have Kurate and Zkitter dogfood Waku Objects to start a feedback loop and make sure they are easily themed and integrated
## Glossary
**Objects**: A widget with functionalities and a GUI
**Transactional**: all objects are about transacting between 2 or more parties. We define 'transaction' as a state change in a shared reality.
**Chat Objects**: Chat is a very accessible way for people to interact. The second step is to start a more complex transaction by adding the suitable object, in the chat environment.
**Modular system**: Objects are built from a comprehensible abstraction layer architecture. This makes creating and maintaining Waku Objects optimized for decentralised and self-organising developer teams.
**Store**: A shop for Waku Objects: developers can easily add more objects and apps that use Waku chat can enable one or more Waku Objects in their chat. In the examples we need to show a best practice in how to offer a customisable Waku Object, in terms of UI theming, but also in functionality and configuration.

## Milestones
0) Define the initial concept
- Define outputs
- Protocol
- Example app / x amount of prototypes (working UI, not functional)
- CLI?
- UI?
2) Work on a protocol
- How could it fit inside Status?
- Can we simply use basic Waku messages with a specific content topic and payload, or do we need tighter integration into Waku?
- What would be considered protocol level?
- Would Waku Objects have some features "built in"?
- Handshake?
- Reputation?
3) Implement a simple example object