
この記事は、 
karma.redが主催する
ハッカソンの第2ステージへの参加報告です。 ハッカソンの詳細については、 
特別ページをご覧ください 。
記事で
はなくコード、 
プロジェクトリポジトリを読みたい人のために。
ビデオ愛好家も気分を害することはありません:) 
このビデオでは、記事の簡単な内容を聞いて、交換がどのように実装されるかをステップごとに確認し、そのライブワークを確認できます。
ウラジオストクの別のハッカソン参加者
による記事 (ウラジク出身の3人とウランウデ出身の1人について、主催者はオンラインステージの結果に基づいてモスクワでのフライトと宿泊費を支払いました)。
記事の写真はVadim Frantsevによるもので、写真は私のものです。プロジェクトを守るためのホイップアップされたプレゼンテーションからです:)それでは、手続きは終わりです。
割り当て後、私は、分散型の取引所または仲裁裁判所のいずれかを選択しました。 裁判所での任務では、評判の高いシステムを作成し、シミュレーションをプログラムする必要があります。 それはあまりにも単純
で、最初の段階での私のプロジェクト
に少し似ているでしょう。
分散型交換の作業は、ブロックチェーン間での原子交換(スワップ)に基づいており、長らく理解したかったのですが、すべての手が届きませんでした。 研究に1時間を費やしました(理解できなかった場合、試用版を取り上げる必要があります)。 いくつかのブロックチェーン
の交換の実装に関するドキュメントを読んだ後、私はすべてが簡単であることに気付き、交換を始めました。
真の分散型取引所とは:
- エンジン 。 独自のブロックチェーンでも、別のブロックチェーンのスマートコントラクトでもかまいません。 責任には、購入/販売の注文の受け取り(注文、注文)、その比較(一致、一致)が含まれます。
 - 時間/秘密によるロック解除でコインをブロックするためのサポートを備えたブロックチェーン 。 イーサリアム、ビットコインとそのフォーク、EOSなど。
 - インターフェース(オプション) ガラスを表示するには、注文、通知などを送信します。
 

簡単にするために、交換は交換の通貨を介してのみ交換できます。 この場合、エクスチェンジはエクスチェンジブロックチェーンでアトミックエクスチェンジを開始できます。
なぜなら イーサリアム以外に、他のスマートコンタクトブロックチェーンは現在ありません。プロトタイピング用に選択しました。 証券取引所では、ガスの価格とその制限により、その使用は考えにくいようです。 この点で、EOSにはいくつかの希望があります。
原子交換
詳細なドキュメントは
こちらで読むことができ
ます 。 非常に簡単な改定:
- ダーシャにはビットコインが1つ、マーシャにはエーテルが10個あります。 彼らは誰もがお互いを欺くことができないようにそれらを交換したい
 - ダーシャはシークレットを生成し、シークレットからハッシュします
 - (初期化ステップ)ダーシャは1ビットコインをブロックするので、秘密を示すマーシャだけがそれを取得できるようになります。
 - ダーシャは、ロックとハッシュからのIDトランザクションをシークレットからマーシャに渡します
 - (参加ステップ)マーシャはダーシャの取引をチェックし、すべてが正しい場合、マーシャはスマート契約を使用して10個のエーテルをブロックし、ダーシャのみがそれらを受信できるようにします。
 - マーシャはIDブロッキングトランザクションをダーシャに転送します
 - (ステップ交換)ダーシャはトランザクションをチェックし、ブロックの量と日付が正しい場合、10個のエーテルを受け取り、シークレットを示します
 - (ステップ交換)マーシャは秘密を見つけて、ビットコインを取ります
 
すべてをまとめる
- Dashaは、ビットコインあたり10エーテルの価格で1ビットコインを販売する注文を送信します
 - マーシャは交換契約で20個のエーテルを預け入れます
 - マーシャは、ビットコインあたり10エーテルの価格で2つのビットコインを購入する注文を送信します
 - 交換は注文を一致させます
- Mashaが1ビットコインあたり10エーテルの価格で1ビットコインを購入するための注文が作成されます
 - アトミック交換が開始されます。 同時に、10のエーテルがマーシャのバランスから削除され、原子交換契約でブロックされます。 なぜなら 開始するには、シークレットとシークレットからのハッシュが必要です。次に、買い手(この場合はMasha)がエクスチェンジにシークレットのハッシュのストックを追加して、開始されたエクスチェンジごとに新しいハッシュが必要になります。
 
 - 次に、交換に関係なく、前のセクションで説明したすべてのアクションが発生します
 

私の実装
この実装をアトミックスワップコントラクトの基礎として採用しました: 
github.com/AltCoinExchange/ethatomicswap 。 この実装の特徴は、新しいアトミック交換では新しいコントラクトを展開する必要がないことです。 アトミック交換の特定のレジスターのように、すべてがそこで発生します。
この契約では、交換契約から交換を開始するときにそれらを示すために、開始者と2番目の交換参加者を手動で指定する機能を追加しました。 最終版は
こちらです。
以下は
、交換エンジンに実装され
ています。
- ハッシュストックを追加
 - 資金の入 出金
 - 売買の注文の提出。ただし、契約のプロトタイプと制限時間による制限があります。
- ガス制限のチェックはありません。サイクルは制限されていません。戦闘契約ではこれを行うことはできません
 - 注文を比較するために、反対注文は最良の価格ではなく、最初の価格で行われます
 - 小さいものと比較すると、提出されたアプリケーションのみが比較されます。 たとえば、10の航空の購入の申請があり、2倍の販売の申請を提出した場合、注文は失敗しません。
 
 - 原子交換登録契約における原子交換の開始
 
インターフェイスを作成しないように、 
smartz.ioプラットフォームの
コンストラクターでコントラクトをラップし、これらのデザイナーを介してコントラクトを展開し、コントラクトを管理するためのインターフェイスをすばやく取得しました。
エーテルのビットコインへの交換を実証するために、もう時間がないので、テストネットワークrinkebyからテストネットワークkovanの空気へのエーテルの交換を示しました。

いくつかの写真とリンク
私が後援した契約のコントロールパネルへのリンク(ブラウザーからイーサリアムブロックチェーンにアクセスするには、メタマスクブラウザー拡張機能をインストールする必要があります)。 必要に応じて、展開することができます
拡張機能をインストールしたくない人のための写真: