クロスチェーンスワップ

A cross-chain swap enables trading tokens across different blockchains without using an intermediary party (e.g. an exchange service) in the process.

../_images/cross-chain-swap.png

パブリックとプライベート間のアトミッククロスチェイン交換

Symbol follows the Hashed TimeLock Contract (HTLC) protocol to create a trustless environment for the decentralized exchange of assets. The protocol guarantees that if all participants agree, the swap will take place. On the other hand, if some of them decide not to conclude the process, each participant should receive their locked funds back.

HTLC uses hashlocks and timelocks to reduce the counterparty risk. Every participant in the exchange of tokens needs to present proof (hashlock) to complete it. Failing to do so, the locked assets are released back to each original owner after the timelock expires.

プロトコルの詳細な説明は Bitcoin Wiki を参照してください。

プロトコル

Alice and Bob want to exchange 10 alice.tokens for 10 bob.tokens.

The problem is that they are not in the same network: alice.token is defined in Symbol’s public chain whereas bob.token is only present in a private chain using Symbol tech.

Trading tokens directly from one blockchain to the other is not possible, due to the technological differences between them.

In the case of Symbol public and private chain, the same mosaic name could have a different definition and distribution or even not exist. Between Bitcoin and Symbol, the difference is even more evident, as each blockchain uses an entirely different technology.

Instead of transferring tokens between different chains literally, the trade will be performed inside each chain.

The cross chan swap protocol will ensure that the token swap occurs atomically.

sequenceDiagram participant Alice participant Private Chain participant Public Chain participant Bob Note over Alice: proof = 'random' Note over Alice: h = sha_256() Note over Alice: secret = h(proof) Alice ->> Private Chain: announces TX1(secret) Note right of Alice: TX1 waits for proof Alice -->> Bob: tells secret Bob ->> Public Chain: announces TX2(secret) Note left of Bob: TX2 waits for proof Alice ->> Public Chain: announces TX3(proof, secret) Note left of Public Chain: proof becomes public Note left of Bob: TX2 executes Note left of Bob: Alice receives funds Bob ->> Private Chain: announces TX4(proof, secret) Note right of Alice: TX1 executes Note right of Alice: Bob receives funds

Atomic cross-chain swap sequence diagram

Before starting with the swap, all participants involved int the swap must own at least one account in each blockchain.

  1. Alice generates a random set of bytes called proof. The proof should have a size between 10 and 1000 bytes.
  2. Alice は得られた proof を 利用可能なアルゴリズム の1つでハッシュ化して secret を生成します。
  3. Alice は SecretLockTransaction TX1 を定義します:
TX1 Property Value
タイプ SecretLockTransaction
Mosaic 10 alice.token
Recipient Bob’s address (Private Chain)
Algorithm h
Duration 96 h
Secret h(proof)
Network Private Chain

Once announced, this transaction will remain locked until someone discovers the proof that matches the secret. If no one unlocks it before the duration set is reached, the locked funds will be returned back to Alice.

  1. Alice は TX1 をプライベートネットワークへアナウンスBob とシークレットを共有 します。

注釈

Bob should retrieve the secret from the chain. It is Bob’s responsibility to verify the secret correctness.

  1. Bob は以下の SecretLockTransaction TX2パブリックネットワーク へアナウンスします。
TX2 Property Value
タイプ SecretLockTransaction
Mosaic 10 bob.token
Recipient Alice’s address (Public Chain)
Algorithm h
Duration 84 h
Secret h(proof)
Network Public Chain
  1. Alice announces the SecretProofTransaction TX3 to the public network. This transaction defines the encrypting algorithm used, the original proof and the secret:
TX3 Property Value
タイプ SecretProofTransaction
Recipient Alice’s address (Public Chain)
Algorithm h
Secret h(proof)
Proof proof
Network Public Chain
  1. Once TX3 is confirmed, the proof is revealed. TX2 transaction is unlocked, and Alice receives the locked funds.
  2. Bob は proof を手に入れて SecretProofTransaction TX4プライベートネットワーク へアナウンスし、ロックされた資産を TX1 から受け取ります。
TX4 Property Value
タイプ SecretProofTransaction
Recipient Bob’s address (Private Chain)
Algorithm h
Secret h(proof)
Proof proof
Network Private Chain

The process is atomic, but should be completed with lots of time before the deadlines:

  • TX1’s duration should be significantly bigger than TX2’s to guarantee that the second participant will have time to unlock TX1 after the first one reveals the proof.
  • Each participant must wait for at least maxRollBackBlocks between announcements to prevent experiencing transaction rollbacks.

ガイド

トランザクションスキーマ

SecretLockTransaction

2 つのアカウント間でモザイクを転送するにはSecretLockTransactionを使用します。特定のモザイクは妥当な SecretProofTransaction がそれらをアンロックするまで、ロックされたままになります。

ロックできるブロックの最大数は 30日間 です。このパラメータは ネットワークごとに設定可能 です。トランザクションが証明されずに期間に到達した場合、ロックされた総量はSecretLockTransactionを開始したアカウントへ戻ります。

バージョン: 0x01

EntityType: 0x4152

インライン

プロパティ タイプ 説明
secret Hash256 ハッシュ化された証明
mosaic UnresolvedMosaic ロックされたモザイク
duration BlockDuration ロックを有効にするブロックの数。期間は 30 日までが許可されています。
hashAlgorithm LockHashAlgorithm proof に使用されているハッシュアルゴリズム
recipientAddress UnresolvedAddress ロック解除後、ファンドを受け取るアドレス

SecretProofTransaction

SecretProofTransactionは SecretLockTransactions のアンロックに使用します。

トランザクションはモザイクをアンロックするための proof を証明しなければなりません。

バージョン: 0x01

EntityType: 0x4252

インライン

プロパティ タイプ 説明
secret Hash256 ハッシュ化された証明
proofSize uint16 バイト換算のプルーフサイズ
hashAlgorithm LockHashAlgorithm proof に使用されているハッシュアルゴリズム
recipientAddress UnresolvedAddress ロック解除後、ファンドを受け取るアドレス
proof array(byte, proofSize) 元のランダムなバイト列

LockHashAlgorithm

サポートされているハッシュアルゴリズムのリスト

Enumeration: uint8

Id 説明
0 (Op_Sha3_256) SHA3-256 によってハッシュ化された proof
1 (Op_Keccak_256) Keccak によってハッシュ化された proof (ETH 互換)
2 (Op_Hash_160) 最初に SHA-256 を、その後 RIPEMD-160 によって2回のハッシュ化された proof (bitcoin’s OP_HASH160)
3 (Op_Hash_256) SHA-256 によって2回のハッシュ化されたproof (bitcoin’s OP_HASH256)

次へ: 暗号手法