Ethereum準拠のトークン取引のためのP2PプロトコルAirSwap

概要

P2Pでのイーサリアムネット上でのERC20トークンの取引を行うプロトコルです。
オーダーブックの利用に制限をかけ、オフチェーンで交渉し、オンチェーンで決済できます。

その結果、分散型取引所のデメリットでもある発注のキャンセル料などを気にすることなく取引することができます。
プロトコルを設けることで資産の流動性が増し、イーサリアムのエコシステムを改善することができます。

紹介

分散型取引所でオーダーブック方式のデメリットとして、オーダーをキャンセルするとコストがかかってしまうことや、オーダーが増加してブロック増えると決済が遅くなることが挙げられます。

オーダーブック方式をやめて個人間の送金できます。
P2Pはスケーラビリティがあり、プライバシーが保護されており、サードパーティがいないので平等な取引が可能です。

AirSwapは、イーサリアムネット上でP2Pでトークン取引を行うプロトコルです。
取引相手とのマッチングと交渉を促す機能(API)もあります。

Peer Protocol

限られたメッセージのやり取りで早く、平等で、安全な取引を実現できます。
このホワイトペーパーでは、Makerがオーダーを提供する役割、Takerがオーダーにサインする役割で説明していきます。
AirSwapでは、ERC20準拠であれば全ての取引が可能です。

AirSwapでの取引

Order API

リモート手続き呼び出し(RPC)でオーダーができるAPIです。

getOrder

TakerがMakerへトークンの取引をリクエストする
getOrder(makerAmount, makerToken, takerToken, takerAddress)

例: BATと10GNOを交換したい
getOrder(10, ‘GNO’, ‘BAT’, <takerAddress>)

provideOrder

MakerがTakerに取引に必要なトークンを提示する
provideOrder(makerAddress, makerAmount, makerToken, takerAddress, takerAmount, takerToken, expiration, nonce, signature)

例: 10GNOは5BATと交換できる
provideOrder(<makerAddress>, 10, ‘GNO’, <takerAddress>, 5, ‘BAT’, <expiration>, <nonce>, <signature>)

Quote API

取引金額の確認に利用できるAPIです。
取引の実行はできません。

getQuote

TakerがMakerに特定のトークンの取引金額を確認する
getQuote(makerAmount, makerToken, takerTokens)

例: 10GNOは、BATではいくらと取引できるか?
getQuote(10, ‘GNO’, [‘BAT’])

provideQuote

getQuoteのレスポンス
provideQuote(makerAmount, makerToken, takerAmounts)

例: 5BATは10GNOと取引可能
provideQuote(10, ‘GNO’, { ‘BAT’: 5 })

Indexer Protocol

Indexerはユーザーが取引しやすいように特定のトークンを売買しようとしているMakerとTakerをマッチングするプロトコルです。
Makerが売りたいことを表明したときや、Takerがindexerに取引相手がいないか尋ねた時にマッチングする機能があります。

売買の同意が形成されたら、取引を実行することも可能です。
MakerとTakerとIndexerのやりとりは全てオフチェーンで、任意のコミュニケーションツール介して可能です。

また、Takerはオーダーの金額を分割して複数のMakerと取引することも可能です。

AirSwapでの取引

Indexer API

addIntent

トークンの取引要求を表明
addIntent(makerToken, takerTokens)

例: 手元のGNOとBATを取引したい
addIntent(‘GNO’, [‘BAT’])

removeIntent

トークンの取引要求を削除する
removeIntent(makerToken, takerTokens)

Example: GNOとBATの取引をしない
removeIntent(‘GNO’, [‘BAT’])

getIntent

表明したトークンの取引要求の一覧を表示する
getIntent(makerAddress)

例: makerAddressのトークンの取引要求一覧を表示する
getIntent(<makerAddress>)

findIntent

findIntent(makerToken, takerToken)
特定のトークンを取引したい人を探す

例: GNOとBATをトレードしたい人を探す
findIntent(‘GNO’, ‘BAT’)

foundIntent

foundIntent(makerAddress, intentList)
Indexerが取引したい誰かを見つけた時に使う

例: 10GNOとBATを取引したい人をみつけた
foundIntent(<makerAddress>, [{ makerAmount: 10, makerToken: 'GNO', takerTokens: ['BAT'] })

Oracle Protocol

MakerとTakerの取引金額の情報を表示するオフチェーンのサービスです。
MakerがTakerに価格を提示する前に合理的な金額をOracleに聞くことができます。
同様に、Takerもオーダーを受けた時にOracleに合理的な金額かどうか確認することができます。

Oracleは合理的な価格を開示し、取引をスムーズに完結を促します。

Oracle API

合理的な価格をMakerとTakerに提示できるAPIです。
価格の提示だけで取引実行はできません。

getPrice

MakerかTakerからOracleに価格を聞く
getPrice(makerToken, takerToken)

例: GNOとBATの直近の取引金額は?
getPrice(‘GNO’, ‘BAT’)

providePrice

Oracleによって呼び出される。価格を提供する
providePrice(makerToken, takerToken, price)

例: 直近の取引レートは、0.5GNO=1BAT
providePrice(‘GNO’, ‘BAT’, 0.5)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です