IOTA - python
===
###### tags: `區塊鏈`
```
主旨: Iota python 套件範例
更新日期: 2022-02-25
版本: V1
作者: Ya-Sheng Chen (Rock)
```
---
## IOTA簡介
`IOTA` 是第三代公開無權限(permissionless) 分散式帳本, 其網路所使用的為有向無環圖( Directed Acyclic Graph, 簡稱 ) , IOTA 稱呼此 DAG 為「`Tangle`」
### 開發理念
無需交易費、 速度更快、 更具擴充性的交易平台, 更在於加強物聯網( Internet of Things),紀錄和執行物聯網生態中不同設備間的資料傳輸, 提供一個人類和電腦可以交換資料的特殊網絡。
### IOTA不是區塊鏈
團隊運用分散式帳本技術, 針對物聯網打造了創新的 Tangle 網路, 與區塊鏈一樣意圖創立一個去中心化的世界,`Tangle`是`IOTA` 開發團隊基於有向無環圖(DAG) 技術所打造的去中心化網路系統, Tangle 並不是區
塊鏈, 因為 `Tangle` 的世界中既沒有鏈, 沒有區塊, 也沒有礦工。
### IOTA 特點
● 擴展性 (Scalability)
● 去中心化 (Decentralisation)
● 無交易手續費 (No transaction fees)
● 抵抗量子計算 (Quantum computing protection)
---
## 透過Python iota client 套件將資訊上鏈
### 安裝
1. 依自己Pyhton版本, 下載官方 [python-client](https://nightly.link/iotaledger/iota.rs/workflows/python_binding_publish/dev) 套件.zip檔案,並解壓縮至您的project 資料夾
2. 進入您需要安裝套件的python 環境
- `cd ./Document/project/iota_test`
- `source ./venv/bin/activite`
3. 安裝套件
- `pip install iota_client_python-0.2.0_alpha.3-cp38-abi3-linux_x86_64.whl`
4. 完成
- 檢視安裝套件是否完成 `pip list`
```
Package Version
-------------------------- -------
iota-client-python 0.2.0a3
```
### 使用
#### 載入套件
```
import iota_client
```
#### init 連線
##### 使用預設或自定義連線
```
# 預設
client = iota_client.Client()
# 自定義<option>
client = iota_client.Client(network='devnet',
nodes_name_password=[['https://api.lb-1.h.chrysalis-devnet.iota.cafe']])
```
- `net_type` = [deafult=`"devnet"`, `"mainnet"`] # 主網與測試網
- `node_addr`= 預設測試網址`https://api.lb-1.h.chrysalis-devnet.iota.cafe `進行算力並上傳交易使用的節點地址。
#### 取得節點資訊
```
client.get_info()
```
**response**
```
{
"nodeinfo":{
"name":"HORNET",
"version":"0.6.0-alpha",
"is_healthy":true,
"network_id":"testnet7",
"bech32_hrp":"atoi",
"min_pow_score":4000.0,
"messages_per_second":27.3,
"referenced_messages_per_second":34.5,
"referenced_rate":126.37362637362637,
"latest_milestone_timestamp":1618133322,
"latest_milestone_index":33602,
"confirmed_milestone_index":33602,
"pruning_index":16086,
"features":[
"PoW"
]
},
"url":"https://api.hornet-0.testnet.chrysalis2.com"
}
```
#### 節點是否正常運作
```
client.get_health()
>> True
```
#### 傳送zero_value_transaction 無費用交易
- index \<str> = 為你的資訊設定index名稱,之後可透過此index 於 區塊鏈瀏覽器查詢這筆資訊
- data_str \<str>= 需要上傳的資訊
```
idx_name = "Rock_1"
mssg = "hello world 1"
# sending message
result = client.message(index=idx_name, data_str=mssg)
```
#### 完成
- 可於 [iota tangle explorer](https://explorer.iota.org/mainnet) 查詢 透過切換 [`mainnet`,`devnet`] 查詢主網或測試網上的上鏈資訊
<img src="https://i.imgur.com/8jAgU5y.png">
<img src="https://i.imgur.com/K5NCakB.png">
#### 完整code
```
import iota_client
try:
# init connect
client = iota_client.Client()
# check node health
is_health = client.get_health()
if not is_health:
raise ValueError('node is not healthy, please check node is on, or change node address')
# prepare index and mssg
for i in range(2):
idx_name = f'Rock'
mssg = f'hello world {i}'
# send message
client.message(index=idx_name, data_str=mssg)
except ValueError as ve:
print(ve)
except Exception as e:
print(e)
```
---
## reference
### IOTA 介紹
- [gitbook](https://iotazh.gitbook.io/iota-guidebook/)
- [Tangle 白皮書.md](https://hackmd.io/@blockchain/rkpoORY4W/%2Fs%2FryriSgvAW?type=book#Tangle-%E7%99%BD%E7%9A%AE%E6%9B%B8)
- [IOTA 白皮書-簡體中文.pdf](https://www.iota.love/wp-content/uploads/2019/09/coordicide-whitebook-in-chinese.pdf)
- [IOTA 簡介筆記.md](https://hackmd.io/@VXrni9wISJq-vtB64ThjYw/Sy9ChM1If?type=view)
### develop resurce
- **IOTA 1.5** `Chrysalis`
- [IOTA REST API Doc](https://editor.swagger.io/?url=https://raw.githubusercontent.com/rufsam/protocol-rfcs/master/text/0026-rest-api/0026-rest-api.yaml)
- [iota-client](https://wiki.iota.org/chrysalis-docs/libraries/client)
- [iota-client-python-api-reference](https://wiki.iota.org/iota.rs/libraries/python/api_reference)
- [iota-client-python-example](https://wiki.iota.org/iota.rs/libraries/python/api_reference)
- [iota-client-python-send-address](https://wiki.iota.org/iota.rs/libraries/python/api_reference)
- [iota-client-python-github-param](https://github.com/iotaledger/iota.rs/tree/dev/bindings/python)
- ~~**IOTA 1.0**~~
- [~~legacy-python clien library get started~~](https://legacy.docs.iota.works/docs/core/1.0/getting-started/get-started-python)
- [~~Pyota github~~](https://github.com/iotaledger/iota.py)
- [~~Pyota Doc .pdf~~](https://buildmedia.readthedocs.org/media/pdf/pyota/latest/pyota.pdf)
- chronicle node
- [chronicls offical appi route](https://chrysalis-chronicle.iota.org/api/mainnet/info)
### infomation
- [networks intro](https://legacy.docs.iota.works/docs/getting-started/1.1/networks/overview)
- [tangel storage data](https://wiki.iota.org/blueprints/introduction)
- [iota IPFS Demo](https://ipfs.iota.org/)
- [iota IPFS 設計架構](https://wiki.iota.org/blueprints/tangle-data-storage/architecture)
- [IPFS 去中心化檔案儲存](https://ipfs.io/#why)
- [IOTA_Business_Ecosystem](https://files.iota.org/media/IOTA_Business_Ecosystem.pdf)
### node
- ~~**IOTA 1.0**~~
- [~~iri full node~~](https://iri-playbook.readthedocs.io/en/master/introduction.html)
- **hornet\<full node>**
- [iota hornet-wiki](https://wiki.iota.org/hornet/welcome)
- [安裝 hornet](https://wiki.iota.org/hornet/getting_started/using_docker)
- **Chronicle\<permanode>**
- [scylladb-for permanode](https://www.scylladb.com/2020/08/13/iota-using-scylla-for-distributed-storage-of-the-tangle/)
- [scylladb -install with docker](https://www.scylladb.com/download/?platform=docker#open-source)
- [IOTA use scylla distributed storage of the tangle](https://www.scylladb.com/2020/08/13/iota-using-scylla-for-distributed-storage-of-the-tangle/)
---