IOTA:【メモ】周辺整理

　2018年になったということで、とりあえず今の時点でのIOTAを軽くメモ。ブラウザのお気に入りがぐちゃぐちゃになってきたので主に自分用メモが欲しかった。
　随時更新していきたい。
# Tangle
Tangleネットワーク統計：[Tangle metrics per minute](https://iota.dance/tangle)
Tx承認：[IOTA Transactions, Confirmation and Consensus](https://github.com/noneymous/iota-consensus-presentation/blob/master/README.md)
Double-Spend防止メカニズム：[Without the Coordinator, how will the network decide which double-spend succeeds?](https://iota.stackexchange.com/questions/1100/without-the-coordinator-how-will-the-network-decide-which-double-spend-succeeds)

# ライブラリ開発言語
**公式Github: https://github.com/iotaledger**
Javascript: https://github.com/iotaledger/iota.lib.js
Python(Pyota): https://github.com/iotaledger/iota.lib.py
Go: https://github.com/iotaledger/iota.lib.go
Java(Jota): https://github.com/iotaledger/iota.lib.java
Rust: https://github.com/iotaledger/iota.rs
## MAM
[3wi/mam.client.js](https://github.com/l3wi/mam.client.js)：Masked Authentication Messaging wrapper for Javascript (Browser and Node)
[iotawtf/IOTA-MAM.lib.js-PoC](https://github.com/iotawtf/IOTA-MAM.lib.js-PoC)：Working Proof of Concept of IOTA's MAM technology using Live Nodes to push and receive messages inside tangle
[Dutch IOTA Meetup](http://www.iotameetup.nl/)：mam.client.js.zip
[Data Integrity and Lineage by using IOTA](http://fenglu.me/2018/04/16/Data-integrity-and-data-lineage-by-using-IOTA/)：データの統合性・信頼性の具体的検証と考察。

## API
API概要：https://iota.readme.io/docs/getting-started
APIリクエストリスト：https://iota.readme.io/v1.2.0/reference

# ハッシュ関数
## Curl
[**iota.lib.js/lib/crypto/curl/curl.js**](https://github.com/iotaledger/iota.lib.js/blob/master/lib/crypto/curl/curl.js)
### 2017年夏の脆弱性指摘
>* 概要：[Cryptographic vulnerabilities in IOTA](https://medium.com/@neha/cryptographic-vulnerabilities-in-iota-9a6a9ddc4367) By Neha Narula
* 詳細レポート：[IOTA Vulnerability Report: Cryptanalysis of the Curl Hash Function Enabling Practical Signature Forgery Attacks on the IOTA Cryptocurrency](https://github.com/mit-dci/tangled-curl/blob/master/vuln-iota.md) By Ethan Heilman (Boston University, Paragon Foundation, Commonwealth Crypto), Neha Narula (MIT Media Lab), Thaddeus Dryja (MIT Media Lab, Lightning Network Dev), Madars Virza (MIT Media Lab, Zcash)


## Kerl
上記脆弱性指摘後導入された。
[**iota.lib.js/lib/crypto/kerl/kerl.js**](https://github.com/iotaledger/iota.lib.js/blob/master/lib/crypto/kerl/kerl.js)
###Kerlの用途
[Kerl Specification](https://github.com/iotaledger/kerl/blob/master/IOTA-Kerl-spec.md)から引用。

| Functionality |Curl-P-27 | Curl-P-81     | Kerl   |
| ------------- |:--------:|:--------:| :-----:|
|Address generation（アドレス生成） |   |      | V^ |
|Signature generation（署名生成）|   |     | V |
|Signature verification（署名承認）|   |   | V |
|Essence calculation (bundleHash)（Bundleハッシュ）| | | V |
|Proof of Work         |   | V |   |
|Transaction Hash      （トランザクションハッシュ）|   | V |   |
|Milestone verification（マイルストーン承認）| V |   |   |

_Curl-P-N: N number of rounds_（Nは繰り返し回数）

_^ CheckSums are calculated using the **last** 9 trytes._ （チェックサムは末尾9トライト。）

### Kerlの周辺
> keccak 384: [SHA-3](https://ja.wikipedia.org/wiki/SHA-3)

### Proof of Work
<a href="http://www.youtube.com/watch?feature=player_embedded&v=EEgpt2EsLh4
" target="_blank"><img src="http://img.youtube.com/vi/EEgpt2EsLh4/0.jpg" width="640" height="480" border="10" /></a>

## トライト表
<img width="184" alt="trytes.png" src="https://qiita-image-store.s3.amazonaws.com/0/187795/4466d509-4148-a77a-3862-39037bff6a54.png">


# Coordinator(Coo)
　ネットワーク安定まで稼働予定の中央管理者。

# フルノード
## IRI
Javaで運用中：https://github.com/iotaledger/iri
>* APIリクエストをさばくところ：[iri/src/main/java/com/iota/iri/service/API.java](https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/service/API.java)
* TangleのDBプロバイダー：[iri/src/main/java/com/iota/iri/storage/rocksDB/RocksDBPersistenceProvider.java](https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/storage/rocksDB/RocksDBPersistenceProvider.java)
* Node.java：[iri/src/main/java/com/iota/iri/network/Node.java](https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/network/Node.java)

### データベース
　Tangleの保管は[RocksDB](http://rocksdb.org/)を使用。RocksDBはNoSQLのKey-value storeの類。Facebookによってスケーラブルな分散型大規模データベース用に開発された。その元になったのはGoogleの研究者に設計された[LevelDB](http://leveldb.org/)。

#### RocksDBの周辺技術
>* Level DB: [LevelDB入門 (基本編)](http://yosuke-furukawa.hatenablog.com/entry/2014/05/05/095207)
* Level DB Python:[PythonでLevelDBを使ってみる(plyvel)](https://qiita.com/tomotaka_ito/items/60c65dd5261fdfc6e71a)
* Column Family: [Understand the Cassandra data model](https://pandaforme.gitbooks.io/introduction-to-cassandra/content/understand_the_cassandra_data_model.html)
* Log-structured merge-tree: [LSM-TreeとRocksDB、TiDB、CockroachDBが気になる](https://hnakamur.github.io/blog/2016/06/20/lsm-tree-and-rocksdb/)

### スナップショット
>* スナップショットを取る方法：https://github.com/iotaledger/Snapshot.ixi
* スナップショットコード：[iri/src/main/java/com/iota/iri/Snapshot.java](https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/Snapshot.java)

アドレス;残高（iota）のフォーマットで下のように保管される。ディレクトリは[iri/src/main/resources/](https://github.com/iotaledger/iri/tree/dev/src/main/resources)。ちなみに２ヶ月前のスナップショットで**5.72 MB**。

```Snapshot.txt
XGICMHKKFQUZJMNYMTXLZGUUONOZUVWUTQ9B9NEQPIANDDOQDNSEEZAZHSPBWGVATDBCDYAFYTDXOVHGC;1472999900
PMMAEIKPLMTPDF9JCFBFMMMJQNPMVVWFMZXJBPQGEO9OYNYTKQPVBUTYSQTLUUJR9YO9VCGBLYPAGPTTB;131000000
IOVWYIUITDXNXQGREKQZBQ9FLVRONPUBWNFOUDFKJISS9OBLUSQPXZBNGMUVZUSGGLJHVTFUHCNMAIIGA;7000000
OUO9GNUTUJSTLRIWVSYVIUUNNOVDKSNTZPQBNUOGLNCPXOPERDDFTIZPJBMBPPHVYNPXCWRJQZIVUHMSX;150000000
ADWJNAWPQCSNAJHDEZYLQWMXHBVXGGEJXBPMHQGXOVOXMEQRZQRGIRZLFNDOQIRFRGZAYZGYPDEYOPFNZ;1
AONDIAZHEOTRPNSXEGJRHDKPHZCOYEOFMHBNPVKCIWEDNRGNRI9QFGNCRLHQGIFOLBHKDANVKICXQDPI9;7000000000
9TFFYBJURARXQHEBMEYGAOKKZZM9JTYE9KXTFPJQPGEWOZXTCMLDDQYM9JJROWGSTFGEPNEEXCXAAJMIA;45685204
J9DYNRAHZUMYCMFREPR9GCSBZHRXGDRFKBQP9GDRKMOQSFRXMJPGFKCOFSZZVWJPRUYMXFARIGGJFBCLD;115856972
CILYEKPLKIEYMVTOZTMKUZBRQFXBNSUKMTORKYLHYINOJRJIKGNYHQCVLEB9IFJPTMIGZUTVWBEJG9MG9;1000
HI9JBBMTRVT9OTXCAVGDJM9MYBBZWYPFRSKGA9RUNCGKMYBJGNNZGMBCHSSJRJVCUINOIMJRXVQGDZJYD;21173391742
WDXQ9SAYCGZKRITKUQXDKPOLVFXENRSEDRDLSFNIUATGLGXKLS9KEJODS9COFXOAWMPSMMWJXDXTUYAUX;100
X9WNFSPHXNWXBHVWXEIP9NEUHSJVDMZPEDYWNSCIQLNCLURKA9JWJTIXMDI9GUFCPWCOHXCQB9UMKC9ZC;1706799205
FHRVYISIPQQJVFIJGAJLGXOEPOWIWRYXQHHVIMJ9KRWBIQZAIESWQQXRXQCIJKZBHSOHITOBEHAYZMTUC;107863143
FKWST9GTGI9KIABUWAJNQOOOHWVLUCFNPSUPYKOTBGCDRPRCKZVAPDKPJBGFCKLJALLICRVK9ZLFDDJSD;1350000000
HJXNAKARDUMSIUIIJNGVJWKXDBFKKYCVYLTOEPIIHI9RUDTCVGZCTF9QQYUAJ9XGLZCXEWWPZCJULEECY;1999600
KNLCDTRDWEQOILCENC9JCEFCYZFZHCKGIXJFEDCUPM9EXNIWWORIZAAY9IROYNLLITRZRXFXDOBFBAYCD;831595877
GFF9ZONCLXNEOBQMADFTLKPUKHGOSRIEVBNJDIVUZHRXAASFUWUVPZMFZIJ9QGCMPLMTVWZLLILANODSD;206399853
...
```

　また、スナップショット後に使用済みアドレスを検索できなくなるのを防ぐために、`previousEpochsSpentAddresses.txt`というファイルも用意されている。

## IXI
 IRIの後継機。C++で現在開発中。
## Nelson
IRIの外部モジュールとして開発された。Neighborを自動で探してP2Pを実現。初心者でも手軽にIOTAに参入できるよう最近リリースされた。
ダウンロードとチュートリアル：https://github.com/SemkoDev/nelson.cli
# ウォレット
## 公式デスクトップ用ウォレット
Javascriptで開発。https://github.com/iotaledger/wallet
## 公式モバイル用ウォレット
　Androidのみ: https://github.com/iotaledger/android-wallet-app
>* 送金ボタン押すところ: [android-wallet-app/app/src/main/java/org/iota/wallet/ui/fragment/NewTransferFragment.java](https://github.com/iotaledger/android-wallet-app/blob/master/app/src/main/java/org/iota/wallet/ui/fragment/NewTransferFragment.java#L190)

## UCL ウォレット（開発中）
　UCL(University College of London)が中心になって開発中のウォレット。正式名称は[Trinity Wallet](https://www.reddit.com/r/Iota/comments/7kku43/the_ucl_wallet_will_be_called_trinity_wallet/)。2018年上半期には開発終了することを目標に現在アルファ版テスト中。