# MOPCON 2018 Lottery 活動與檢討報告 ## Introduction 我們在 MOPCON 2018 中,以「人類」+「機器」合作的方式,對 Tangle accelerator 與 IOTA Full-node (MainNet) 進行壓力測試。 ## Architecture ![](https://i.imgur.com/hAVn8nz.png) [Cmment me ...](https://docs.google.com/drawings/d/1KJ6_NXNdAKgChTOg0KrZILW343YiZjCw5uoFiz19QtU/edit?usp=sharing) ## 活動辦法 攻擊方分為兩個角色,「人類」與「機器」。 人類方以抽獎活動為誘因,讓 MOPCON 會場內的所有群眾,以抽獎為名義,鼓勵群眾以掃描 QR CODE 的方式觸發機器發起帶有獎項的交易。 機器方實為大量產生 Transactions 的 Spammer,責任為補足攻擊方的算力。 ![](https://i.imgur.com/CloaMOT.png) [Comment me ...](https://docs.google.com/drawings/d/1Fj4QDxonjukaPG2iuWguUjThYBjd2SphfGm6WUdINGA/edit?usp=sharing) ## Spammer 設計 以 [Apache benchmarking tool](https://httpd.apache.org/docs/2.4/programs/ab.html) 作為 Spammer tool,執行的 command 如下: ```shell= ab -n 1000 -c 100 -v4 -T 'application/x-www-form-urlencoded' -p post.txt http://demokits.biilabs.io:5000/start > result_post_1000_100.txt ``` ## 預計造成的結果 * 檢討 DID-Auth 規範下的 verifiable claim (TangleID API (v1)) * 觀察 landing page、load balancing、acceleraotr 與 full-node 執行交易動作的 duraton * 對一個的 IOTA full-node 進行 (C )TPS 觀察。 ## 活動結果分析 #### DID-Auth: verifiable claim * Challenge issue * HTTP POST request: ``` json{"mid":""}``` * Claim content ```jsonld= { "status": "win", "transaction": "UTKPZ9DZJETUBKTEBZDTUUVYTOQNVNMSWPISIWIRYRONFEGTABKURIAJTTCZDAZMIKPBUAPGLGKG99999", "credentials": { "@context": [ "https://w3id.org/identity/v1", "https://w3id.org/security/v1" ], "id": "http://example.gov/credentials/3732", "type": ["Credential", "LotteryClaim"], "issuer": "https://biilabs.io", "issued": "2010-01-01", "claim": { "mid": "00001", "lottery": { "result": "win", "pid": "ABE", "prize": "first prize", "time": "2016-06-18T21:10:38Z" } }, "signature": { "type": "RsaSignature2018", "created": "2016-06-18T21:10:38Z", "creator": "https://biilabs.io/#key-1", "signatureValue": "g4j9UrpHM4/uu32NlTw0HDaSaYF2sykskfuByD7UbuqEcJIKa+IoLJLrLjqDnMz0adwpBCHWaqqpnd47r0NKZbnJarGYrBFcRTwPQSeqGwac8E2SqjylTBbSGwKZkprEXTywyV7gILlC8a+naA7lBRi4y29FtcUJBTFQq4R5XzI=" } } } ``` * `credentials` 內的才是 JSON-LD 的格式。 * Claim verifier * Check claim signature #### Logs: * Transactions * [THE LINUX PROGRAMMING INTERFACE](https://thetangle.org/transaction/9FRPDTEOWRCLOCNKMTJUTUDPGJNHRCDGSL9MDPVYINSAJBZCXSTLIURM9UGKDQWCRLSCQYJPUYGM99999) * [AS DEAD AS A DODO](https://thetangle.org/transaction/ABBMIS9TJFKPV9CXLVGOEPK9OGAEFGAFCCQCHRLHROWPPPXFSVQLVRJGNPWSXCOOLRRCOGXJRIBKZ9999) * [CODING INTERVIEW QUESTIONS](https://thetangle.org/transaction/LXFDEYYZVNGTMREMEOW9X9YXFHUJIJAMDIPJKTXBDJMQCGUJNABGGIQEJMARZUIA9XZXGOHRARDEA9999) * [LINUX KERNEL](https://thetangle.org/transaction/MW9X9BAKMQICUFINIUBVUNTWTHGOWCJFKZTEIECJGXI9ACFNFBLYCPTQHCTANH9IS9SEQGYHR9HVA9999) * [Delicious cookies](https://thetangle.org/tag/UI9EUJC) * load balancing * [access log](https://gist.github.com/yillkid/4c0662f2bd27ca335ed72e9bfcc1036a) * Request counts: 516 * Average request_time: 3.35 * Average upstream_response_time: 3.36 ## Issues #### Blowball ![](https://i.imgur.com/yEADnux.png) #### 504 Gateway Timeout Issue 1. 使用 Nginx Load Balancer 後,會發生 Timeout 的現象。 2. 移除 Load Balancer 後,會發生 Request Time 時間延長。 IRI Tip Selection 時會使用 synchroize ,導致大量的 Request 卡在 Tip Selection。 導致最後 IRI request 沒有平行處理。 Code section: ```java= private synchronized AbstractResponse getTransactionsToApproveStatement(int depth, Optional<Hash> reference) throws Exception { ... ignore ... ``` [Code Reference Link](https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/service/API.java#L622) ## Improvement #### Swarm Node TangleID API v1 抽離 Swarm Nodes 中的 TangleID v1 API extension ,變成獨立的 API Server。 考量的因素如下: 1. 目前 TangleID API v1 只做格式的處理,放在 Swarm Node 的優化有限。 2. 當 API 有變動時,所有部署的 Swarm Nodes 要更新,相當耗時。 3. 新版 C 語言所撰寫的 Swarm Nodes 就不用實作 TangleID API v1,只要處理 PoW 後送上 Full Node。 4. API 和 Swarm-Node 除錯變得更容易。 #### 更靈活地部署 Swarm Node 目前要部署 Swarm-Node 的流程相當繁瑣,用 docker 的方式進行部署。 ```shell $ docker run ender503/iota-swarm-node # Work In Progress $ docker run -e "port=8000" \ -e "host=https://node.deviceproof.org" \ ender503/iota-swarm-node ``` #### Random walk on Swarm node (or off-Tangle) ![](https://i.imgur.com/R98jtkk.png) ## Reference * [DID Auth](https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust-spring2018/blob/master/final-documents/did-auth.md) * [Verifiable Claims Data Model and Representations](https://www.w3.org/TR/verifiable-claims-data-model/) * [Verifiable Claims Use Cases 1.0](https://www.w3.org/2017/05/vc-use-cases/CGFR/2017-05-01/#finance)