---
# System prepended metadata

title: Atomic Swap

---

# Atomic Swap

[TOC]

## Ref

1. https://www.binance.vision/blockchain/atomic-swaps-explained


## Tech
Scenario:

Alice -> Bob: 1 BTC
Bob -> Alice: 9000 USDT

https://tinyurl.com/t7emy3a
```mermaid
sequenceDiagram

rect rgb(233, 249, 210)
    Alice ->> +Randomness/Blockchains: random()
    Randomness/Blockchains-->> -Alice: S = 5KtaLuhRmQD6ra5X
    Alice ->> Alice: H=Hash(S)
    Alice ->> Bob: [H, PublicKey(Alice)]
    Bob -->> Alice: PublickKey(Bob)
end
   
    Alice ->> Alice: Build TrxA: <br> [output-amount] = 1 BTC <br> [output-condition] = <br> (Hash(S) == H and Signautre(Bob)) or <br> (48hr and Siganture(Alice))
    Bob ->> Bob: Build TrxB: <br> [output-amount] = 9K USDT <br> [output-condition] = <br> (Hash(S) == H and Signautre(Alice)) or <br> (24hr and Siganture(Bob))
    Note left of Bob: If Bob broadcasts <br> his contract trx now, <br> Alice can take the $$ <br> and run away!

    Alice ->> Randomness/Blockchains: Broadcast trxA
    Bob ->> Bob: Create trxA by himself to verify <br> on-chain trxA
    Randomness/Blockchains -> Bob: trxA is confirmed
    Bob -->> Randomness/Blockchains: broadcast trxB
    Randomness/Blockchains -> Alice: trxB is confirmed

rect rgb(233, 249, 210)
    Alice ->> +Randomness/Blockchains: trxSwap(S): spends trxB
   Randomness/Blockchains -->> -Alice: Alice claims her 9K USDT
    Bob ->> +Randomness/Blockchains: trxSwap(S): spends trxA
    Randomness/Blockchains -->> -Bob: Bob claims his 1 BTC
end
```

![](https://i.imgur.com/BSCp5xM.png)
