---
tags: tooling, deku
---
# Deku as a plugin of Taqueria
## Deku workflow
- Tickets:
Deku works with bytes ticket's. So if your metadata is some other type besides bytes, you'd have to create a "proxy" ticket using PACK to convert your arbitrary Michelson type into bytes.
- Deposit:
You deposit tickets with the deposit endpoint. You can see it on [better-call.dev](https://better-call.dev/).
+ Once you deposit the tickets to Deku, they're locked inside the **Deku contract's vault**. Deku uses `tezos-client` to deposit (more in the example of deposit dummy ticket).
+ Once finality on that block is reached, the Deku nodes will mint tickets with identical contents on the Deku chain. These can be transferred/sent to smart contracts running on Deku/etc.
- Withdraw:
The withdraw process is a bit more complicated.
+ Users can withdraw from Deku using the `deku-cli withdraw` command, which burns the tickets on Deku's side.
+ Once the withdraw is finalized in a block, you can ask a Deku node for a withdraw proof.
+ After the next state root update from the Deku nodes' to Tezos, you can use the withdraw proof to unlock the tickets that were burned from Deku's vault on Tezos.
+ Then, the contract specified in the withdraw can collect the tickets by calling the withdraw endpoint of the Deku contract.
## Deku configurations
- Currently, Deku has 3 nodes: one is a producer, and two nodes are validators. In localhost mode, the node information is stored in the folder `data`.
Deku has an [alphanet chain](https://www.marigold.dev/deku). The information of 3 nodes on alphanet is:
```
https://peer-0.deku.marigold.dev
https://peer-1.deku.marigold.dev
https://peer-2.deku.marigold.dev
```
- Deku uses this secret key to sign Tezos operations:
```
SECRET_KEY="edsk3QoqBuvdamxouPhin7swCvkQNgq4jP5KZPbwWNnwdZpSpJiEbq"
```
- Deku bootstrapper:
Deku uses this secret key to bootstrap the chain:
```
DEKU_BOOTSTRAPPER_SECRET="edsk3CRD8RNhoTPV74p8t9pEvW3zEH2ZZzVD8zns2dyZyY49nbjoiG"
```
or if you want to create a new one, you can run the command:
```
deku-bootstrapper setup-identity
```
- Deku uses the `tezos-client` from Flextesa run by docker:
The information of docker setting can be found at `docker-compose.yml`
```
flextesa:
container_name: deku_flextesa
restart: always
image: oxheadalpha/flextesa:20220510
command: jakartabox start
environment:
- block_time=4
ports:
- "20000:20000"
expose:
- 20000/tcp
```
The `RPC_NODE` setting in Deku:
```
if [ $mode = "docker" ]; then
RPC_NODE=http://flextesa:20000
else
RPC_NODE=http://localhost:20000
fi
```
Deku uses `tezos-client` to deploy contracts: discovery and consensus written in mligo
- Deku smart contracts:
- Deku has two main contracts: discovery and consensus and one dummy contract (for testing: `deku-sandbox`)
- [consensus.mligo](https://github.com/marigold-dev/deku/blob/main/src/tezos_interop/consensus.mligo): contain 3 entrypoints: `update_root_hash`, `deposit` and `withdraw`, where the storare contains the `root_hash` and the `vault`.
- [discovery.mligo](https://github.com/marigold-dev/deku/blob/main/src/tezos_interop/discovery.mligo): contain one entrypoint: `uri_update` and the storage is a big_map of a pair `(key_hash, (nonce, uri))`.
- [dummy_ticket.mligo](https://github.com/marigold-dev/deku/blob/main/dummy_ticket.mligo): This smart contract is a testing contract. It has 3 entrypoint: `mint_to_deku`, `withdraw_from_deku` and `burn_callback`.
- Deploy smart contracts:
+ Using Ligo to convert `mligo` to `tz`
+ Then use `tezos-client --endpoint $RPC_NODE originate contract ...` to originate the contracts. Where the sender of this origination is the Deku wallet.
- The smart contracts address originated on Deku alphanet:
```
- Bridge: KT1JXWdpCDSep84PyqbJYZmuzNWuP8F6FCjo
- Discovery: KT1GqDjZkS4q73ynADAQ61dwECc6RSt2c657
```
- Tezos accounts
Deku uses two accounts: alice and bob from Flextesa
- Deku has these CLIs
This info can be found in the folder `bin` in the source code
```
deku-node
deku-cli
deku-bootstrapper
deku-sandbox
```
- `deku-node`: the deku nodes store the secret of the node for instance: bootstrapper secret key, identity, tezos information (consesus contract address, discovery contract address, etc.), etc. You can run in localhost, or the node on the alphanet:
```
docker compose up -d
./sandbox.sh setup
```
And the folder `data/i` is generated with all the information of the Deku nodes.
- `deku-node` supports:
- `deku-node add-trusted-validator`
- `deku-node remove-trusted-validator`
- `deku-node produce-block`
- `deku-node sign-block`
- `deku-node self`
- `deku-node setup-identity`: create a validator identity, this setup identity which uri the node is running on, for instance: `deku-node setup-identity <node_folder> --uri "http://localhost:4440"`
- `deku-node setup-tezos`: setup tezos identity. The information of this setup on localhost is stored in `data/tezos.json`
- `deku-node start`
- `deku-cli` you can get the `deku-cli` by cloning the [Deku-Canonical (Deku-C)](https://github.com/marigold-dev/deku) and then compile this source code, this cli supports:
- `deku-cli create-transaction`
- `deku-cli create-wallet`
- `deku-cli get-balance`
- `deku-cli originate-contract`
- `deku-cli self`
- `deku-cli withdraw`
- `deku-cli withdraw-proof`
- `deku-bootstrapper` supports:
- `deku-bootstrapper bootstrap`
- `deku-bootstrapper derive-key`
- `deku-bootstrapper setup-identity`
- `deku-sandbox` supports:
- `deku-sandbox setup`
- `deku-sandbox start`
- `deku-sandbox tear-down`
- `deku-sandbox deploy-dummy-ticket`
- `deku-sandbox deposit-dummy-ticket`
- `deku-sandbox deposit-withdraw-test`
- `deku-sandbox smoke-test`
## Deku as a plugin on Taqueria
First idea:
What Deku needs:
- Ligo plugin: compile, createContract of ligo
- Flextesa plugin
- Smart contracts
- template files contain the discovery, consensus and dummy smart contracts of Deku
- index: contains tasks for deku plugin
## References
- Taq-deku: https://github.com/lykimq/ocaml_ex/blob/main/src/bin/deku_taq
- Deku-C: https://github.com/marigold-dev/deku
- Sandbox configure: https://github.com/marigold-dev/deku/blob/main/sandbox.sh
- Deku alphnet: https://www.marigold.dev/deku
- TezPortal: https://hackmd.io/WdxZjSWKRoey7s8wMQlPiQ?view
- Transaction on Deku: https://hackmd.io/pnkkM0w6Q7ONYxFYPGIuXg?view