Атомарный обмен

В целом схема атомарного обмена в двух независимых блокчейнах выглядит следующим образом:

sequenceDiagram
    participant Alice
    participant Chain 1
    participant Chain 2
    participant Bob
    Note over Alice: secret = 'random'
    Note over Alice: hash = h(secret)
    Alice ->>  Chain 1: announces TX1(hash)
    Note over Chain 1: TX1 waits for secret
    Alice -->> Bob: tells hash
    Bob ->> Chain 2: announces TX2(hash)
    Note over Chain 2: TX2 waits for secret
    Alice ->>  Chain 2: announces TX3(secret, hash)
    Note over Chain 2: TX2 executes
    Note over Chain 2: secret becomes public
    Note over Chain 2: Alice receives funds
    Bob ->>  Chain 1: announces TX4(secret, hash)
    Note over Chain 1: TX1 executes
    Note over Chain 1: Bob receives funds

Транзакции в Nimera Blockchain

  • BeginSwap - Начать обмен (подписывается отправителем)

    • sender - отправитель

    • target - получатель

    • timestamp - время истечения срока действия

    • alg - алгоритм хеширования

    • hash - хеш

    • ?DATA (amount, color, etc) - данные о замораживаемых средствах

  • CommitSwap - Завершить обмен (не требует подписи)

    • hash - хеш секрета как идентификатор обмена

    • secret - секретная фраза

    • sender - инициатор обмена

    • target - получатель

  • RollbackSwap - Откатить обмен (не требует подписи)

    • hash - хеш секрета как идентификатор обмена

    • sender - инициатор обмена

  • CancelSwap - Отменить обмен (подписывает отправитель и получатель).

    • hash - хеш секрета как идентификатор обмена

    • sender - инициатор обмена

    • target - получатель

Как это работает

Диаграмма движения средств в рамках одной сети:

graph TD
  Alice((Alice)) -- BeginSwap --> swap
  swap -- CancelSwap --> Alice
  swap -- CommitSwap --> Bob((Bob))
  swap -. time .-> expired_swap
  expired_swap -- RollbackSwap --> Alice

  expired_swap -- CancelSwap --> Alice

BeginSwap начинает обмен, замораживая средства на счету отправителя. Для этого с аккаунта списываются монеты, а информация о операции (секрет, время жизни, списанная сумма и т.д.) записывается в аккаунте в специальное поле с незавершенными обменами.

CommitSwap позволяет разморозить средства и перевести их получателю. Для этого до истечения срока действия обмена предоставляется секрет, хеш которого мы указывали ранее. По факту операция добавляет сумму, которая указана в обмене к балансу получателя (при создании обмена она была списана с отправителя), после чего у аккаунта отправителя удаляется информация о незавершенной операции.

RollbackSwap используется для возврата средств на счет отправителя, если секрет не был своевременно предоставлен. Информация об операции удаляется из аккаунта отправителя.

CancelSwap используется для отмены операции по обоюдному согласию. Может выполняться в любой момент времени, в том числе и до истечения срока действия обмена. Опциональная операция.

Last updated