# Dapp 跨平台相容性解決方案 - Mars Peng {%hackmd dh921X26R26y_elFAEP5yg %} ###### tags: `jsdc2018` --- Dapp 不過就是個 WebApp ? > 是也不是,Dapp 的確是 WebApp 但是還做了很多不同的事 Web 3.0 除了不同螢幕、不同瀏覽器,還有不同的錢包 Dapp 的所處環境 ## Desktop Dapp 是在 Chrome 瀏覽器上執行透過 Extension 溝通跟區塊鏈溝通 ## Mobile 透過 Dapp Browser,其實 只是個 webView 但是外層有個 PKey Manager ,透過這個跟區塊鏈溝通,確保 web 不會取得 PKey ## Web3 & Ethereumjs-tx Web3 -> 打 JSON RPC API Ethereumjs-tx 用來 sign transaction * 用戶無法使用錢包的時候 ## Web3 & Provider 提供兩個方法 * Send * SendAsync 如果是在錢包的環境,Provider 會由錢包自動提供,錢包會做一個 Hook ,在 web 呼叫所有 RPC 方法,錢包才能監聽的到。 ## Wallet Web3 Provider Type 每個錢包都有自己的 Provider 大致上有三種模式: * psotMessage * customAPI * export PKey -> Edge wallet 用的方式 > PostMessage 是常規,Custom API 相對少見,Export PKey 是一把雙面刃 ## 錢包運作原理 Export PKey 會在 Dapp 中跳 confirm UI,程式會直接拿到 PKey,這很危險 雖然用戶不用安裝錢包,但是安全性方面會有問題 Im Token 自己有自己的 SDK,sendAsync 跟其他的人不一樣 web3 認為合法的 transaction 在 im token 可能不合法 Im Token 的 provider 不是原生的,是自己改的 > 為了解決這個問題,我們拓展了 web3 0.x 版本的 api > 如果是 im token 會載入額外的 extend ,將 im token provider 包成 web3 1.0 API > 相容問題 全是坑 * metamask 不支援 signTransaction * imtoken SDK 檢查不能沒有 to address * Trust gas 預估不準確 * chiper 吃 cookie * coinbase iOS 錯誤沒反應 * ....... > 決定另外拓展 extend imtoken 就仿造類似 Edge 的方法,由 dapp 自己 sign Transaction, 繞過錢包的 SDK -> 讓用戶自己填寫 PKey ## 我們喜歡 web socket 但不幸的目前幾乎市面上的錢包都是 HTTP ### WS Provider ## 手機網路不穩,會讓交易失敗 ### 三段式交易