KyberNetworkのネイティブ実装
Contents
こんにちは。iOSエンジニアの西川(@tatsuya73206018)です。 この記事ではKyberNetworkを使用した交換がGincoアプリ内でどのように行われているかを解説していきたいと思います。
交換の処理について
交換は以下の手順で行なっていきます。
- 通貨を選択
- 金額を入力して交換レートを取得
- 手数料を計算
- 交換を実行
- 交換実行後取引履歴に表示される
実際にこれらの手順を詳しくみていきましょう。
通貨の選択
交換可能通貨の取得は以下のようになります。
- Cloud Functionsの
getAvailableTokens()
関数を利用してKyberNetworkコントラクトから交換可能通貨availableTokens
を取得する。 availableTokens
からGinco内で対応している通貨を表示する。
availableTokens
はKyberNetworkのSupported Token Pairsから取得しています。
`
レートの取得
交換レートの取得は以下のようになります。
- テキストフィールドに交換したい金額を入力する。
- 入力金額をパラメータにCloud Functionsの
getExpectedRate()
関数を利用してKyberNetworkコントラクトから交換レートrate
を取得する。 rate
と入金金額をもとに受け取り金額を計算し表示する。
入力金額によって交換レートは変化します。また、大きすぎる値を入力すると交換レートが0で返ってきてしまいます。
手数料の計算
交換手数料の計算は以下のようになります。
ETHを交換
getGetPrice()
関数でgasPrice
を取得する。getEstimatedGas()
関数でtradeに使用するgas
を取得する。gasPrice
とtrade用のgas
を使って手数料を計算し表示する。
ERC20を交換
getGetPrice()
関数でgasPrice
を取得する。getEstimatedGas()
関数でapproveに使用するgas
を取得する。getEstimatedGas()
関数でtradeに使用するgas
を取得する。gasPrice
とapprove用のgas
とtrade用のgas
を使って手数料を計算し表示する。
ERC20に実装されているapprove()
関数については以前GincoのバックエンドとDEX KyberNetwork連携で解説されています。
また、いくらapproveされているかはERC20のallowance
関数で取得することができます。
交換
交換の処理の流れは以下のようになります。
ETHを交換
- Keychainに保存している
mnemonic
を取得する。 - Wallet Coreの
signTransaction()
関数にmnemonic
とtrade用のトランザクションパラメータtxParams
を与え、署名済みトランザクションtxData
を生成する。 - 生成した署名済みトランザクション
txData
をCloud FunctionsのsendTransaction()
関数を利用してFull Nodeにブロードキャストする。ブロードキャストに成功すればtxHash
が返る。
ERC20を交換
- Keychainに保存している
mnemonic
を取得する。 - Wallet Coreの
signTransaction()
関数にmnemonic
とapprove用のトランザクションパラメータtxParams
を与え、署名済みトランザクションtxData
を生成する。 - 生成した署名済みトランザクション
txData
をCloud FunctionsのsendTransaction()
関数を利用してFull Nodeにブロードキャストする。ブロードキャストに成功すればtxHash
が返る。 - approveが成功すれば同じようにWallet Coreの
signTransaction()
関数にmnemonic
とtrade用のトランザクションパラメータtxParams
を与え、署名済みトランザクションtxData
を生成する。 - 生成した署名済みトランザクション
txData
をCloud FunctionsのsendTransaction()
関数を利用してFull Nodeにブロードキャストする。ブロードキャストに成功すればtxHash
が返る。
履歴の表示
履歴の表示の処理の流れは以下のようになります。
- Blockchain ExplorerがFull Nodeを監視し、整形したトランザクションをCloud Firestoreの
txHistory
コレクションに格納する。 - クライアントからCloud Firestoreの
txHistory
コレクションを監視し、トランザクションの履歴を表示する。
分かりやすいようにKyberNetworkを使って交換された履歴にはKyberNetwork用のアイコンが付けられるようになっています。
まとめ
本記事ではKyberNetworkのネイティブ実装について書きました。 ネイティブアプリにDappsをインテグレーションするのはなかなかない経験だと思ったので今回記事にしてみました。 今後も積極的に情報発信を行なっていきたいと思います。
Tip us!
エンジニアチームがブログを書くモチベーションが上がります 💪
参考文献
Gincoでは、ブロックチェーンやFirebaseなどの最新技術をガンガン使ったサービスを作りたいエンジニアを募集しています。
「ブロックチェーンの開発をガッツリ行いたい」
「普通のWebサービスは飽きた。もっと気合の入る開発がしたい」
といった方、お気軽なご応募お待ちしております。
Author 西川 達哉
LastMod 2018-12-20