<style>
.reveal {
color: #CCC;
}
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
color:#EEE;
}
.reveal ul{
font-size: 34px;
font-family: "Times New Roman", Times, serif;
}
</style>
## An introduction to IOTA client PoCs on System on Chip

##### 陳志誠 (Sam Chen)
<!-- Put the link to this slide here so people can follow -->
###### https://hackmd.io/@iZnScZJWRUGWFCeL6mfFEA/H1VV5N0iI#/
Note:
senior software engineer from IOTA funcdation, based in Taiwan
---
## Agenda
- Node and Client Application
- Project: IOTA Wallet<!-- .element: class="fragment" data-fragment-index="1" -->
- Project: IOTA Cashier<!-- .element: class="fragment" data-fragment-index="2" -->
- PlatfromIO<!-- .element: class="fragment" data-fragment-index="3" -->
- What Next<!-- .element: class="fragment" data-fragment-index="4" -->
---
## IOTA Node
* The core of an IOTA network(the Tangle)
* Storing, broadcasting, and validating transactions
* Provides client APIs
* Applications:
* IRI: https://github.com/iotaledger/iri
* Hornet: https://github.com/gohornet/hornet
* Chronicle: https://github.com/iotaledger/chronicle.rs
* GoShimmer: https://github.com/iotaledger/goshimmer
* Bee: https://github.com/iotaledger/bee
Note:
implements consensus protocol/algorithm
keep the Tangle alive
recommend to use Hornet, IRI will be retired soon
chronicle sotres all transactions on it.
GoShimmer is still WIP by our reserch team, it implements a prototype of an IOTA network without the Coordinator
purpose of Coordinator is protect the Tangle from attacks
Bee: A framework for IOTA nodes, clients and applications in Rust
----
## IOTA Client
* An IOTA network user
* Holds a seed for address genration
* Sends transactions to the Tangle
* Libraries:
* iota.c: https://github.com/iotaledger/iota.c
* iota.go: https://github.com/iotaledger/iota.go
* iota-java: https://github.com/iotaledger/iota-java
* iota.js: https://github.com/iotaledger/iota.js
* iota.py: https://github.com/iotaledger/iota.py
* iota.rs: https://github.com/iotaledger/iota.rs
Note:
Seed: An unique password that is used to generate addresses, private keys, and signatures.
Seed should not public.
An address is like an account belongs to a seed and holds IOTA tokens.
----
## IOTA Documentation
#### https://docs.iota.org/

Note:
Getting start, Terminology
Run a node, write client applications
today I will focus on client application on System on Chip.
---
## IOTA Wallet
A text-based application that interacts with the Tangle

Note:
Command line interface application
----
## IOTA Wallet PoCs
- ESP32 Wallet
- https://github.com/oopsmonk/iota_esp32_wallet
- CLI Wallet (POSIX platfrom)
- https://github.com/oopsmonk/iota_cmder
Note:
----
## IOTA Wallet System Architecture

Note:
FreeRTOS runs on ESP32 and with mbedtls library
esp-wifi APIs for wifi scan and connection
SNTP client fetches data and time from a NTP(Network Time Protocol) server
Wallet console process user input and display results
----
## Support Commands
* _<span style="color:SteelBlue">node_info</span>_: shows node info.
* _<span style="color:SteelBlue">node_info_set</span>_: sets iota node endpoint.
* _<span style="color:SteelBlue">client_config</span>_: shows MWM, Depth, and Security Level.
* _<span style="color:SteelBlue">client_config_set</span>_: sets MWM, Depth, Security Level.
* _<span style="color:SteelBlue">seed</span>_: shows wallet seed.
* _<span style="color:SteelBlue">seed_set</span>_: sets wallet seed.
* _<span style="color:SteelBlue">account</span>_: shows addresses, balances, and unused address.
----
## Support Commands
* _<span style="color:SteelBlue">transactions</span>_: finds transactions by tag, addresses, or bundles
* _<span style="color:SteelBlue">balance</span>_: gets balance from addresses
* _<span style="color:SteelBlue">send</span>_: sends transaction
* _<span style="color:SteelBlue">get_addresses</span>_: gets addresses from given starting and ending index.
* _<span style="color:SteelBlue">get_bundle</span>_: gets a bundle transaction from a given tail hash.
* _<span style="color:SteelBlue">reattach</span>_: reattaches a bundle transaction to the Tangle.
Note:
this is a stateless wallet application
it means it doesn't store resules, such as the balance on addresses
imo, the storage implementation might vary depending on the design in the real world.
---
## IOTA Cashier
yet another way to pay

###### https://github.com/oopsmonk/iota_esp32_cashier
Note:
payment systems keep revolution over time,
notes/coins -> credit cards/cards -> Smartphones
EasyCard (悠遊卡), RFID technology, without physical contact
that's improtant during the current pandemic sutuation
----
## Wiring Diagram

----
## Flowchart

----
## Demo receive tokens
{%youtube Vp9J2ntikcc %}
----
## Demo withdraw tokens
{%youtube a_qEPlbzrig %}
---
## PlatformIO

----
### Client lib for PlatformIO
https://github.com/oopsmonk/iota_c_platformIO

----
### Use Client lib on PlatformIO

----
### VS Code + PlatformIO

----
### VS Code + PlatformIO

---
## What Next
- Learn IOTA from PoCs
- Proting client lib to other platfroms<!-- .element: class="fragment" data-fragment-index="1" -->
- Create your own PoCs<!-- .element: class="fragment" data-fragment-index="2" -->
Note:
for education purpose, having workshops
for developing, proting and creating
missing security
---
### Thank you!
</br>
###### https://discord.iota.org/
###### <span style="color:SteelBlue">Sam Chen#6934</span>
{"metaMigratedAt":"2023-06-15T08:53:40.403Z","metaMigratedFrom":"YAML","title":"An introduction to IOTA client PoCs on SoCs","breaks":"true","description":"View the slide with \"Slide Mode\".","contributors":"[{\"id\":\"8999d271-9256-4541-9614-278bea67c510\",\"add\":11564,\"del\":5003}]"}