Fuel Going to Rocket: August Dev Update, Very Last One Prior to the Mainnet

atomic swap wallet update

IPFS-messaging improvement, no way for the null secret and multiple tabs…Atomic Swaps on EOS?

We would like to share with you our latest updates on the development progress that occured during this hot August. Like our previous development report, this one is dedicated mostly to the issues of stability and usability.


Since instant and reliable cross-chain transactions are one of the market problems we address, the stability of swaps is one of our ‘things’. Thus, we’re working hard to avoid all the malfunctions which can occur within the swap process. For example, we improved the process of IPFS-messaging. In our previous articles, we briefly described the usage of this technology in the Atomic Swaps process. “Now in case of IPFS-connection failure, the users are able to get reconnected very shortly. The system checks the correct IPFS-room and reconnects you automatically; as a result, now the lost progress of swap is not an option’, comments the improvement our lead developer Nikita Dementiev.

Also, the mechanism of swaps now considers whether the messages between a market maker and a market taker are finalized correctly or not. Remember our pesky Alice and Bob. Alice is sending a message to Bob. Now in Swap.Online, Mr. Bob should confirm the receipt of the Alicе’s message for the procedure continuation. If he doesn’t, for the bilateral security of traders, the message is requested one more time.

Moreover, now the Swap.Online IPFS-mechanism avoids the proceeding of null secrets. Finding the fact that some transaction secret is null, the mechanism also removes such transaction.

Finally, we prohibited the Swap.Online launch from the multiple tabs. As the processing machine sees the tab when the swap is launched, the six Swap.Online tabs can mislead the user (but not the Swap.Online). So, this limitation (used e.g. in Telegram Web) is introduced with the purpose to secure the stability of swaps.


As we work with the cryptocurrency remittance, we fully accept our user’s desire to know all the details about their swaps’ proceeding. To grant this request, we presented two visualization options. Firstly, now all the errors (e.g. gas insufficiency) are displayed in the swap monitor screen. You are not only unable to lose your money but even to miss a single thing about its status. Secondly, now the progress of the IPFS-connection loading is shown in the left bottom of the start page. You can trace when the connection will be reached and how many users (‘peers’) are online.

Also, now the user is able to copy the link on a given order to the clipboard and send it to a friend. As Nikita says, ‘In addition, you can see, which orders you have opened via the received links. Now, you can discuss it with your friends or post to social network boasting about your success in crypto trading’

atomic swap wallet

The orders you have received via the copied links are highlighted green

Finally, we implemented constant checking of users’ ETH balance. In case of its insufficiency, the user will be informed before the trade.

Moreover, we fixed some minor bugs, checked the SEO-optimization of our site and made Swap.Online operations much easier for low-performance computers with poor RAM. So our service will really be mass adopted.

And now we are getting closer to the good part.

Our team made a tremendous progress on the EOS implementation in our decentralized multi-chain wallet. Why it matters and how it was done – that deserves another single article. Stay tuned and exchange EOS on BTC and ERC-20 tokens in a decentralized way!

The Bridges That Should Be Built: Cross-chain Overview

cross chain swap

Swap.Online addresses the area of cross-chain technologies and continue the series of articles about the most acute issues of nowadays blockchain sphere. We would like to discuss the future of cross-chain, the thorny path to this level of blockchain interaction, and where we are now on this path.

How They Got There: Two Approaches to The Origin of Cross-Chain

Cross-chain as multi-purpose, decentralized, peer-to-peer, direct informational interaction between different blockchains is a complex phenomenon for both cryptocurrencies and the rest of blockchain implementation spheres. Thus, we can explain the origin of cross-chain in terms of at least two approaches.

In a broad sense, to say, ideologically, it is the expression of Web 3.0. inheriting from Web 1.0 with its author-generated content and from Web 2.0 with CMS, usability, etc. Web 3.0 is widely understood as the decentralized, peer-to-peer web. Real decentralization (both political and architectural, in terms of Vitalik Buterin) can be reached only in case of free interaction between different blockchains. Even single centralized element — proxy-token, main server, website administration, etc., should not be considered suitable for Web 3.0.

In a narrow or, if you will, applied sense, cross-chain is the marker of a new level of anonymous encrypted messages transfer. Let’s take the cryptocurrency exchanges (find more on that in our review). Being descendants of the non-blockchain digital currency exchanges, centralized exchanges allowed the interaction between two different chains, but only serving as the centralized point of exchange which resulted in the bulk of vulnerabilities. First decentralized exchanges either use proxy-token (e.g. Waves and NXT) or are pegged to one type of blockchain (EtherDelta and Stellar DEX). So, the launch of cross-chain exchanges using the Atomic Swap technology, e.g. Altcoin.io or Komodo’s BarterDEX (both of them are now in Beta testnet) is among the most anticipated milestones of the sphere evolution in the year of 2018.

Challenges and Responses

In terms of practice, cross-chain solves at least four problems of the blockchain. Firstly, it’s the scalability of network. We have already reviewed proprietary solutions for Bitcoin and Ethereum networks, but the fact is — every isolated blockchain has its bottlenecks making the transactions slow and high-cost. Secondly, it’s isolability: even with CEXs and proxy-token DEXs, different blockchains are still isolated from each other, so, the system based on ERC-20 token has very poor prospects in interaction with Bitcoin-based system. Thirdly, it’s developability: dApps really anticipate cross-chain technologies to adopt useful and interesting solutions. Finally, it is so called ‘shared security’ problem: two interacting blockchains can be much more secure than each of them individually.

Cross-chain can be applied in the spheres of interaction between digital and traditional economy. IoT, Big Data, ID verification, digital banking, money remittances, civil legal proceedings, insurance, copyright protection, crowdfunding, etc., remain a klondike for cross-chain solutions. For example, through the cross-chain solutions can be built a ‘triangle’ between investors, ICO team, and oracle body with no even slightest possibility for anyone to cheat on the whole system. The triangle of such kind can be formed between the shareholders, real estate developers, and supervisory governmental entity within the framework of mortgaged housing construction. And there are plenty of other examples like that.

Polkadot Project: The Infancy of The Pioneer

Polkadot is one of the most promising cross-chain project. It is being developed since 2017 by Parity Technologies (Great Britain), commissioned by Web3 Foundation (Switzerland). The idea of the project is to develop a protocol integrating different blockchains between each other. Structurally it will consist of ‘Parachains’ — the ordinary blockchains even if with different characteristics, ‘Relay chain’ that coordinates consensus and transaction delivery between chains, and ‘Bridges’ — links to blockchains with their own consensus such as Ethereum.

One doesn’t need to be an expert in blockchain to note that ‘Relay chain’ is a kind of very delicate balance. It is maintained by four types of actors in cooperation: validators, collators, nominators and fishermen.

  • Validators secure the Relay chain by their stakes of product tokens (DOTs, native Polkadot blockchain), validating proofs from collators and participating in consensus with other validators;
  • Nominators secure the Relay chain by selecting good validators and staking DOTs;
  • Collators maintain parachains by collecting parachain transactions from users and producing state transition proofs for validators. They also monitor the network and prove bad behaviour to validators;
  • Fishermen act as a kind of the final security frontier, they monitor the network and prove bad behaviour to validators.

In a word, this is a complicated system sharing PoS- and PoW-principles. This system is governed by sophisticated hierarchy of three types of ‘plebiscite’: council, referenda and public referenda. As a result, bad actors lose their stakes (DOTs) and eventually expelled from the network. Nobody has an option to get control over the full network. More on that here.

But the majority of this is still under development: a project is in its early days. Milestones of the project are called PoC (proof-of-concept), in July, 2018, the PoC-2 was released. What’s ready for today? You can download desktop testnet version of the Polkadot (‘Krumme Lanke’) and launch your own node as ‘parachain’: the list of nodes can be tracked online. Relay chain is close to its final image. It is backed by Parity’s Substrate technology written on Rust, however, the core functionality that comprises the state machine was written in WebAssembly (Wasm). Finally, first transaction of some DOTs between two chains was executed in Polkadot network.

By the way, there are a lot of uncertainties about Polkadot. The mainnet release called Polkadot Genesis is scheduled for the Q3, 2019. Developers say they have no idea how many PoCs will be released on the way to that day. Also, they warn that ‘Polkadot may not be successfully developed or may not function as intended and that the Polkadot genesis block may not be deployed as intended or at all. Finally, the project team is still not sure about the role of DOT holders and this token features. All this may seem like a pure overreaction. Nevertheless, the most professional part of crypto community highly appreciates all Polkadot updates.

Cross-chain for Swap.Online

atomic swap eos

Swap.Online includes plenty of cross-chain implementations. Firstly, basic solution for our wallet is cross-blockchain exchange of crypto. Now, the Atomic Swaps with the BTC, ERC-20, ETH, and EOS are already being executed, operations with USDT are successfully tested, NEM coins are to be added very soon. Cross-chain is also used in Cross Swap technology allowing to send crypto during the operation to different addresses. Finally, In the near term, Swap.Online plans to launch Swap.Button — a many-to-one transactional instrument for the acceptance of crypto investments to the blockchain projects with the cross-chain as the inevitable element.

Don’t forget, there are only five days left to mainnet release of Swap.Online cross-chain wallet.

Stay tuned!

Swap.Online Essential Links

Website: https://testnet.swap.online
GitHub: https://github.com/swaponline
Email: [email protected]
Telegram: https://t.me/swaponline
Facebook: https://www.facebook.com/Swaponline
Twitter: https://twitter.com/SwapOnlineTeam
Wiki: https://wiki.swap.online/
Bitcointalk: https://bitcointalk.org/index.php?topic=4636633

Atomic Swap между Bitcoin и Tether возможен

Протоколы второго уровня для сети Bitcoin: к истории вопроса

Пионером самой идеи использования сети Bitcoin как “уровня протокола” для “надстройки” над ней вышестоящих протоколов с новыми правилами выпуска и оборота токенов был Д.Р. Уиллет, автор современной схемы ICO. 6 января 2012 года в работе с несколько претенциозным названием The Second Bitcoin Whitepaper он заявил о целесообразности создания таких протоколов, которые по отношению к Bitcoin были бы тем же, чем стал HTTP (или e-mail) по отношению к TCP/IP. Спустя полтора года ему удалось собрать 500 тыс. долларов в биткоинах на реализацию проекта. Проект был назван Mastercoin, как и связанный с ним токен. Осенью 2013 года Виталик Бутерин выступил с подробным обзором Mastercoin, в котором предсказал большое будущее проекту и блестящие перспективы его коммерческому использованию. Уже в начале 2014 года Mastercoin был седьмой по капитализации криптовалютой мира. Год спустя был проведен ребрендинг проекта; сейчас он известен как Omni Layer и позиционируется командой как “протокол поверх сети Bitcoin, позволяющий проводить любые виды сделок с токенами, за которыми стоят любые виды активов”.

USD Tether – эквивалент доллара на Omni Layer

Описанное выше решение с протоколом “над” сетью Bitcoin дало жизнь едва ли не самому спорному криптовалютному проекту последних двух лет – Tether. Tether (символ Tether — ₮, тикер — USDT) – гибридная криптовалюта с привязкой курса к одному доллару США. Причем, по заверениям Tether Limited – эмитента данных токенов – “привязку” здесь стоит понимать буквально: каждому приобретенному токену USDT соответствует один доллар США в распоряжении компании.

В утилитарном смысле, токен USDT обладает массой преимуществ. Как известно, не все криптовалютные обменные сервисы принимают доллары США в силу правовых или операционных причин. С появлением Tether в этом, вроде бы, и нет нужды – то, что трейдер хотел купить за доллар, он отныне может купить за USDT, не теряя деньги на разнице курсов. Более того, даже крупнейшие обменные системы, долго и успешно принимающие фиатные деньги, берут за работу с ними большие комиссии. За переводы между кошельками Tether комиссия не взимается, а сама валюта может храниться в любом кошельке, поддерживающем Omni Layer (к примеру, Holytransaction и т.д.).

Если мы возьмем три крупнейших биржи по суточному обороту сделок на момент написания статьи (Binance, OKEx и HuObi), а затем отследим по пять наиболее популярных торговых пар для каждой, мы встретимся с USDT в 13 случаях из 15.

USDT – ассет с самой большой капитализацией в мире.

Всё это рождает большой интерес сообщества к более быстрым, безопасным и дешевым решениям для обмена Tether на другие валюты. Очевидно, что таким решением могли бы стать атомические свапы – мгновенные децентрализованные кросс-чейновые обмены. Хедлайнеры данной технологии, представившие её осенью 2017 года, лаборатория Komodo, отчиталась об успешном обмене KMD на USDT, совершенном на платформе BarterDEX – собственном обменнике Komodo.



Вместе с тем, по нашим данным, разработчики Komodo сделали свап на ERC20- разновидность Tether, которая доступна только только в 3 % случаев. Менять таким способом можно не больше 60 млн USDT из всего мирового оборота, что, очевидно, не может рассматриваться как решение проблемы. Яркие примеры несовершенства существующих решений можно найти даже на Etherscan.




Команда Swap Online готова представить атомический свап с Tether уже этой осенью. Вот как мы это сделали.


Как Omni проводит транзакции

Для проведения транзакции Omni нужно создать обычную биткоин транзакцию-перевод 546 сатошей(минимум) с дополнительным выходом – хранящим payload посредством оп-кода OP_RETURN, Пример такой транзакции. Payload – это обязательная часть любой Omni транзакции, является последовательностью байтов, содержащей всю информацию об транзакции.

Рассмотрим, какую информацию хранит в себе payload:

  1. transaction marker – 4 байта, обязательная часть любого Omni payload, всегда равна 0x6f6d6e69 – ASCII код omni. Если первые 4 байта последовательности не равны 0x6f6d6e69, то эта последовательность не является payload Omni.
  2. version – 2 байта, аналог версии транзакции в биткоине. Для работы описанного алгоритма, используется версия 0, или что то же самое 0x0000.
  3. transaction type – 2 байта, тип транзакции, для проведения atomic swap достатояно использовать только “Simple send” транзакции, simple send – это обычное отправление omni валюты со своего адреса на адрес получателя. simple send соответствует коду типа транзакции 0 то есть следующие 2 байта 0x0000. другие возможные типы транзакции существующие в омни.
  4. token identifier – 4 байта, идентификатор используемой валюты, Например TetherUS имеет идентификатор 31или 0x0000001f. Все созданные протоколом Omni на данный момент времени токены можно увидеть по следующей ссыки – https://www.omniexplorer.info/properties/production .
  5. amount – 8 байт, для транзакции типа Simple send, это количество отправляемой валюты.

Как можно заметить, payload не хранит в себе адреса отправителей и получателей транзакции, эти адреса протокол определяет по биткоиновой транзакции в которой был обнаружен выход с payload’ом. Omni протокол просматривая входы определяет кто производит перевод, найдя среди входов транзакции p2pkh выход соответствующего адресу отправите.

Таким образом для передачи от Алисы к Бобу, например 50,000,000 TetherUS, нужно создать биткоин транзакцию один из входов которой будет ссылаться на p2pkh выход соответствующий адресу Алисы, так же важно чтобы этот вход был первым в этой транзакции (индекс этого входа в полученной транзакции был бы минимален или вообще равен нулю). Один из выходов этой транзакции должен быть выход p2pkh на адрес Боба, и еще один из выходов был быть выход со следующей payload:

(картина из приватного репо, пока не могу загрузить отдельно)

Пример такой транзакции: https://www.blockchain.com/ru/btc/tx/1f359902f666249b73f7bf8a1ea778259fa4b4eb904538e9713c487e091d4756,

https://www.omniexplorer.info/search/1f359902f666249b73f7bf8a1ea778259fa4b4eb904538e9713c487e091d4756 .

Atomic Swap на Omni Layer

Предположим, что Алиса и Боб желают совершить межблокчейновый обмен криптовалют – Алиса хочет обменять aединиц какой-либо Omni валюты, например TetherUS (валюта имеет идентификатор валюты #31 в Mainnet, далее в тексте будем говорить только об этой валюте протокола Omni, так как она на данный момент она является самой популярной, но приведенный ниже алгоритм будет работать также для любой валюты протокола Omni) на b единиц криптовалюты работающей на другом блокчейне (Напомним, что Omni работает поверх блокчейна биткоина, конечно, по приведенному ниже алгоритму можно произвести обмен TetherUS на биткоины, но в силу их работы на одном блокчейне такой обмен может быть совершен другим, более эффективным способом).


A – блокчейн биткоина.

B – блокчейн той криптовалюты на которую производится обмен TetherUS.

a – сумма TetherUS, которую Алиса хочет обменять.

b – сумма криптовалюты исполюзующей блокчейн B, на которую Алиса хочет обменять свои a TetherUS.

Создание транзакции

1)Боб генерируетслучайное значение secret.

2)Боб высчитывает secretHash проведя следующую операцию: secretHash = RIPEMD160( secret )

3)Боб создает и передает в блокчейн B htlc-транзакцию, закрытую значением secretHash

4)Боб передает Алисе значение secretHash, и хэш созданной им в предыдущем пункте hrlc-транзакции, для того чтобы Алиса могла убедиться в том, что в блокчейне B действительно присуствует нужная htlc-транзакция.

5)Алиса получив от Боба secretHash и хэш созданной Бобом htlc-транзакции, убеждается в том, что такая транзакция действительно находится в блокчейне B, и в том, что это действительно htlc-транзакция закрытая значением secretHash.

6)Алиса используя полученный secretHash создает следующую транзакцию и транслирует её в блокчейн биткоина:

назовем такую транзакцию funding_tx по факту это почти обычная биткоиновая htlc-транзакция которая используется в atomic swap с той лишь разницей, что в поле amount 546 сатошей – это минимальное количество биткоинов которое может быть на выходе транзакции, ниже этого значение протокол биткоина считает транзакцию пылью(dust) и не проводит её.

7)Алиса создает транзакцию по следующей схеме:

Назовем такую транзакцию redeem_tx. Алиса создает такую транзакцию с двумя входами: первый – это вход ссылающиеся на выход funding_tx который содержит htlc скрипт этот вход Алиса не подписывает, то есть поле SigScript остается вообще пустым. второй вход – это вход ссылающиеся на любой непотраченый выход Алисы, главное условия чтобы на этом выходе было достаточное количество биткоинов для оплаты transaction fee, этот вход Алиса подписывает своим приватным ключом обязательно с типом подписи SIGHASH_ALL(то есть подписывает всю транзакцию кроме полей SigScript на входах транзакции, что делает эту транзакцию неизменяемой. выходы же транзакции представляют собой обыкновенный Simple Send a TetherUS от Алисы Бобу(подробнее о том, что такое Simple Send, payload и как это работает в другом разделе).

8)Алиса отправляет Бобу созданную в предыдущем пункте и подписанную собой redeem_tx.

9)Боб получив отправленную Алисой redeem_tx, проверяет её – просто просматривает входы, и выходы, убеждается в том, что это действительно транзакция которую должна была создать Алиса используя настоящий алгоритм. После чего Боб подписывает транзакцию своим приватным ключом и предоставляет значение secret в SigScript соответствующего входа redeem_tx.

10)Боб транслирует подписанную собоё транзакцию redeem_tx в блокчейн, тем самым производя перевод валюты TetherUS от Алисы себе. Примечание – перед проведением этого шага, еще нужно проверить, что на адресе Алисы действительно есть необходимая сумма TetherUS.

11)Алиса просматривая блокчейн A получает значение secret и используя его в блокчейне B переводит себе средства с созданной Бобом в пункте 3 htlc-транзакции. Обмен на этом завершается.

Очевидное примечание: естественно значение timelock используемое Бобом при создание htlc-транзакции должно быть значительно больше timelock который использует Алиса, так как её htlc-транзакция должна тратиться первее чем htlc созданный Бобом. Это необходимо для того, чтобы Боб не смог успеть потратить оба htlc



Таким образом подключение омни лейер к свап онлайн позволяет покрыть

Atomic Swap with Tether (USDT)

On the eve of the release on the mainnet, the team of the cross-chain wallet Swap Online is publishing a research study and the code of the atomic swap using USDT.

atomic swap wallet

USD Tether — the equivalent of the dollar on Omni Layer

The solution described above with the protocol “over” the Bitcoin network gave life to one of the most controversial cryptocurrency projects of the last two years — Tether. Tether (symbol Tether — ₮, ticker — USDT) is a hybrid cryptocurrency with a rate binding to one US dollar. Moreover, according to the assurances of Tether Limited, the issuer of the given tokens, the “binding” is to be understood literally, as each purchased token of USDT corresponds to one US dollar available at the disposal of the company.

If we take the three largest exchanges based on their daily turnover of transactions at the time of writing (Binance, OKEx and HuObi), and then track the five most popular trading pairs for each, we will encounter USDT in 13 out of 15 cases.

USDT — the token with the largest capitalization in the world.

All this generates great community interest in faster, safer and cheaper solutions for exchanging Tether into other currencies. Obviously, such a solution could be atomic swaps, which are instant, decentralized cross-chain exchanges. The Komodo laboratory, the main headliners of this technology, who presented it in the autumn of 2017, reported on the successful exchange of KMD to USDT carried out on the BarterDEX platform, Komodo’s own exchanger.At the same time, according to our data, the developers of Komodo made a swap on the ERC20-a version of Tether, which is only available in 3% of cases. Approximately 60 million USDT from global turnover can thus be exchanged using this method, which, obviously, cannot be considered as a solution to the problem. Striking examples of imperfections of existing solutions can be found even on Etherscan.

This fall, the team of https://swap.online is ready to present an atomic swap with Tether. And here’s how we did it.

How Omni conducts transactions

To carry out the Omni transaction, a user needs to create a regular Bitcoin transaction-transfer of 546 satoshi (minimum) with an additional output storing payload using the OP_RETURN op-code. An example of such a transaction. The payload is a mandatory part of any Omni transaction, as it is a sequence of bytes containing all the necessary information about the transaction.

(example on bitcoinjs.js https://gist.github.com/caffeinum/f64a51ce55d5ac9075bb2f5f2f439c0d )

Let us consider what information is stored in the payload itself

transaction marker — 4 bytes, the mandatory part of any Omni payload is always equal to 0x6f6d6e69 — ASCII code omni. If the first 4 bytes of the sequence are not equal to 0x6f6d6e69, then this sequence is not a payload of Omni.

version — 2 bytes, an analog version of the transaction in Bitcoin. For the described algorithm to work, version 0 is used, or that is the same as 0x0000.

transaction type — 2 bytes, transaction type, for an atomic swap it is sufficient to use only “Simple send” transactions, as simple send is the usual sending of omni currency from its address to the address of the recipient. Simple send corresponds to the transaction type code 0, that is, the next 2 bytes 0x0000. Other possible types of transactions exist in Omni.

token identifier — 4 bytes, identifier of the currency used. For example TetherUS has the identifier 31 or 0x0000001f. All tokens created by the Omni protocol at this time can be seen via the following link.

amount — 8 bytes, for a transaction of type Simple send, this is the amount of the sent currency.

As you can see, payload does not store the addresses of senders and recipients of the transactions, these addresses are determined by the Bitcoin transaction in which the payload output was detected. By scanning inputs, the Omni protocol determines who makes the transfer by finding the output of the corresponding address from among the inputs of the transaction p2pkh.

Thus, for a transfer from Alice to Bob of, for example, 50,000,000 TetherUS, we need to create a Bitcoin transaction where one of the inputs will refer to the p2pkh output corresponding to the Alice address. It is also important that this entry be the first in this transaction (the index of this entry in the received transaction would be is minimal or none at all). One of the outputs of this transaction should be the output of p2pkh to Bob’s address, and another output must have been one of the outputs with the following payload:



Atomic Swap on Omni Layer

Suppose that Alice and Bob are willing to make an inter-blockchain exchange of cryptocurrencies. Alice wants to exchange the units of any Omni currency, for example TetherUS (the given currency has the currency identifier # 31 in the Mainnet, then in the text we will only talk about this currency of the Omni protocol, since it is the most popular at the moment, but the algorithm below will work for any currency of the Omni protocol as well) for b units of a cryptocurrency working on another blockchain. (Omni works on top of the Bitcoin blockchain, of course, according to the algorithm below it is possible to exchange TetherUS for Bitcoins, but due to their work on one and the same blockchain, this exchange can be done in a different, more efficient way).


A — blockchain of Bitcoin.

B — the blockchain of the cryptocurrency for which TetherUS is being exchanged.

a — the sum of TetherUS, which Alice wants to exchange.

b — the sum of the cryptocurrency of the adjoining blockchain B, to which Alice wants to exchange her a TetherUS.

Creating a Transaction

1) Bob generates a random value secret.

2) Bob calculates the secretHash by performing the following operation: secretHash = RIPEMD160 (secret)

3) Bob creates and sends an htlc transaction sealed by secretHash

4) Bob sends Alice a secretHash value, and a hash of the hrlc transaction he created in the previous paragraph in order for Alice to make sure that the correct htlc transaction is actually present in the B blockchain.

5) Alice received from Bob the secretHash and hash of the htlc-transaction Bob created, and is convinced that such a transaction is really present in the B blockchain, and that this is indeed a htlc-transaction sealed by the secretHash value.

6) using the received secretHash, Alice creates the following transaction and translates it into the Bitcoin blockchain:

Let us call such a transaction financing_tx. In fact, it is almost an ordinary Bitcoin htlc transaction that is used in atomic swap with the only difference that in the amount field, 546 satoshi is the minimum number of Bitcoins that can be at the output of the transaction, below this value, Bitcoin counts the transaction as dust and does not conduct it.

7) Alice creates a transaction according to the following scheme:

atomic swap tether usdt

Let us call this transaction redeem_tx. Alice creates such a transaction with two inputs: the first is the input referencing the output of funding_tx, which contains the htlc script. Alice does not sign this script, that is, the SigScript field remains completely empty. The second input is the input referring to any unspent exits of Alice, the main condition is that at this output stage there are enough Bitcoins to pay the transaction fee, and this entry is signed by Alice with her private key with the signature type SIGHASH_ALL (that is, she signs the entire transaction except for SigScript fields on the inputs transaction, which makes this transaction immutable. The outputs of the same transaction are the elementary Simple Send and a TetherUS from Alice to Bob (details of what Simple Send, payload is and how it works can be found in another section).

8) Alice sends Bob the redeem_tx created in the previous paragraph and the one she signed herself.

9) Bob got the redeem_tx sent by Alice, checks it, just looks through the inputs and outputs, making sure that this is really a transaction that Alice should have created using the real algorithm. After that, Bob signs the transaction with his private key and provides the secret value in the SigScript of the corresponding redeem_tx entry.

10) Bob sends the signed redeem_tx transaction to the blockchain, thereby transferring the TetherUS currency from Alice to himself. Note — before carrying out this step, we still need to check that Alice’s address has the necessary amount of TetherUS.

11) Alice looks through blockchain A and gets the value secret and uses it in the B blockchain to transfer the funds using the htlc transaction Bob created in point 3. The exchange ends here.

Stating the obvious: naturally the timelock value used by Bob when creating the htlc-transaction must be significantly longer than the timelock that Alice uses, since her htlc transaction should be spent earlier than the htlc created by Bob. This is necessary so that Bob cannot manage to spend both htlc.


Thus, connecting Omni Layer to Swap Online allows users to cover transactions.

Full research you may find in our Github

C++ source code for creating TX

C++ source code for redeem TX


In next examples:
Alice’s Address – 1QCEnxXU9QAsnqfufArkiuangGNGqdE4in.
Bob’s – 1341545XP8GdCiL96osVr3NefXpHbjzoCs

Alice’s TetherUS balance:


Bob’s Tether balance:


Alice changing 1 TetherUS to 0.001 BTC. For make exhcnage they make this steps:

  1. Bob create SECRET –0x832f296f8f2cff3fe553dee413d8fc84def9102be547bd147c02c36b704ebafb
  2. secretHash=0xbd52a5a7d6d5b8367ddfa8417c271c5639f85322.
  3. Bob create transaction and sent to the blockchain  (funding_tx):


  1. Bob sent secretHash to Alice (via offchain messaging)
  2. Alice created and sent to the blochcain (funding_tx):


  1. Alice created redeem_tx, and signed by SIGHASH_ALL algorhytm:

and send it to the Bob for sign (for example via IPFS). note: one of the outputs no have SigScript.

7. Bob sign this transaction and add secret, then send to the blockchain this transaction (redeem transaction):


This transaction have output with “payload” – this transaction is “Omni” transaction:


  1. Alice can parsesecret from bob’s transaction, then she create and broadcast this transaction:


And take bitcoins:)

Alices TetherUS balance after swap:


Bob’s TetherUS balance after swap:


Swap.Online: cross-chain wallet provides zero-fee exchange between USDT, EOS, BTC, ETH, ERC20. https://swap.online/


About autor: Sergei Moiseev https://github.com/TyHDyK