Перейти к содержимому


Фотография

Обмен BTC на LTC без участия третьей стороны (Atomic Swap)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 yandexkod

yandexkod

    МЕСТНЫЙ

  • 1 topics
  • Пользователи
  • PipPipPip
  • 125 сообщений

Отправлено 01 марта 2018 - 10:51

Для данной операции нам потребуются Bitcoin Core и Litecoin Core у каждого из участников обмена, а также вот эта чудесная вещь https://github.com/decred/atomicswap
Я использую линукс, но всё возможно провернуть и на винде и на маке (будут пляски с golang).

Устанавливаем golang:

Код:
sudo apt install golang

Клонируем репозиторий с гитхаба:

Устанавливаем зависимости:

Код:
cd ../go/src/github.com/
git clone https://github.com/decred/dcrd.git
go get github.com/btcsuite/btcwallet
go get github.com/ltcsuite/ltcwallet

Собираем нужные нам утилиты для BTC и LTC:

Код:
cd ~/atomicswap/cmd/btcatomicswap/
go build
cd ../ltcatomicswap/
go build

В директориях btcatomicswap и ltcatomicswap появятся исполняемые файлы программ.

Далее нужно запустить bitcoind и litecoind (можно и qt). Я использовал версии 0.17 в обоих случаях. С версией Bitcoin Core 0.18 работать не получится, нужно лезть в исходники btcatomicswap, не стал заморачиваться.

Код:
bitcoind --prune=550 --testnet --rpcuser=x --rpcpassword=y --addresstype=legacy --rpcport=18332 --rpcallowip=127.0.0.1 --rpcbind=127.0.0.1:18332 --deprecatedrpc=signrawtransaction
Код:
litecoind --prune=550 --testnet --rpcuser=x --rpcpassword=y --addresstype=legacy --rpcport=19332 --rpcallowip=127.0.0.1 --rpcbind=127.0.0.1:19332 --deprecatedrpc=signrawtransaction

Теперь пора разделиться на Алису и Боба.
Алиса хочет за 0.01 BTC купить у Боба 1 LTC.

Боб создает новый адрес BTC и передает его Алисе:

Код:
bitcoin-cli --testnet getnewaddress

Алиса создает новый адрес LTC и передает его Бобу:

Код:
litecoin-cli --testnet getnewaddress

Алиса отправляет 0.01 BTC на адрес контракта, в котором будет прописан адрес Боба (обратите внимание на самую первую строчку Secret, она будет использоваться в конце):

btcatomicswap --testnet --rpcuser=x --rpcpass=y initiate mvTWA342sHDv2Gw18Y3uCZvUyhCkWdidzx 0.01
Secret: e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2
Secret hash: 88625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b19

Contract fee: 0.00000146 BTC (0.00000646 BTC/kB)
Refund fee: 0.00000299 BTC (0.00001024 BTC/kB)

Contract (2N1zmStAMaKQBrv12L6d1gScqd7PdYA9bUx):
6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914a3e2d1dc5def46f4baeed4f5671267ff2aa78af367041b67015db17576a914d34d1863ebc34df2a5bcd69c5a6042e8b46d2d8b6888ac

Contract transaction (779e559e379c2bfd2584949a2566fb1c3c2da5dfe3898dd7f00c7f624f741c08):
020000000001015b83fbe2d5ac6897bbe0318480029a9b43fa5278028268badf68e2f970dcc0220100000000feffffff025e956300000000001976a914ee4fccdf22ae7550a51009fac1e63fbc4fd4c91688ac40420f000000000017a9145ffd27277bbb9bf093f105e2e712afdb11ab0bbb870247304402205aa7a1cb690d56e142d4a0699ba07607079cbbb47911e15fe0fcb79128e449bb02205b2adfdaac3b145dc3a5f12138cb2ed3542be735bca1880d1aa2a99b3d316d72012103df970267136ef360e3d01b82ee4b3c53df86935ae7d1da260d7cb810e31ef00e00000000

Refund transaction (c0ba4fc619948640d5ae1a0a9f72eacfb5c1ef3548ce49e5a5b731c24d4d3a13):
0200000001081c744f627f0cf0d78d89e3dfa52d3c1cfb66259a948425fd2b9c379e559e7701000000cf4830450221009f320652c305e04248fa83ad0ae681f44b34738a2847ecdc081e8f9d0f193b4502207f2a93c1c99bc47bbf28d37e3bfe755addd51463ba1e73f616e27a583568309101210245117a4b18fe8c5134551789d9b3861273d319728b767cf00392ed9327e72824004c616382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914a3e2d1dc5def46f4baeed4f5671267ff2aa78af367041b67015db17576a914d34d1863ebc34df2a5bcd69c5a6042e8b46d2d8b6888ac000000000115410f00000000001976a914aaab0a283d5f317cee0c0b85e176a1a37917e37988ac1b67015d

Publish contract transaction? [y/N] y
Published contract transaction (779e559e379c2bfd2584949a2566fb1c3c2da5dfe3898dd7f00c7f624f741c08)

https://chain.so/add...1gScqd7PdYA9bUx (смотрим первую транзакцию)
Алиса передает бобу детали транзакции, выделенные жёлтым и зелёным цветами.

По предоставленным данным Боб проверяет транзакцию BTC:

btcatomicswap --testnet auditcontract 6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914a3e2d1dc5def46f4baeed4f5671267ff2aa78af367041b67015db17576a914d34d1863ebc34df2a5bcd69c5a6042e8b46d2d8b6888ac 020000000001015b83fbe2d5ac6897bbe0318480029a9b43fa5278028268badf68e2f970dcc0220100000000feffffff025e956300000000001976a914ee4fccdf22ae7550a51009fac1e63fbc4fd4c91688ac40420f000000000017a9145ffd27277bbb9bf093f105e2e712afdb11ab0bbb870247304402205aa7a1cb690d56e142d4a0699ba07607079cbbb47911e15fe0fcb79128e449bb02205b2adfdaac3b145dc3a5f12138cb2ed3542be735bca1880d1aa2a99b3d316d72012103df970267136ef360e3d01b82ee4b3c53df86935ae7d1da260d7cb810e31ef00e00000000
Contract address: 2N1zmStAMaKQBrv12L6d1gScqd7PdYA9bUx
Contract value: 0.01 BTC
Recipient address: mvTWA342sHDv2Gw18Y3uCZvUyhCkWdidzx
Author's refund address: mznDECmwrNHTfpniUyKCALEj1KESruZGkX

Secret hash: 88625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b19

Locktime: 2019-06-12 20:56:59 +0000 UTC
Locktime reached in 47h50m9s

Итак, Боб видит, что в контракте прописан его адрес кошелька, предоставленный Алисе, правильная сумма, и то, что средства на контракте заблокированы на 48 часовSecret hash понадобится далее.

Теперь Бобу нужно отправить 1 LTC на контрактный адрес, в котором будет прописан кошелек Алисы, используя тот же Secret hash.

ltcatomicswap --testnet --rpcuser=x --rpcpass=y participate mxk3okLqWGd8Y9DDjbxdm8ri1ZaJmkkuR4 1.0 88625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b19
Contract fee: 0.00003378 BTC (0.00013566 LTC/kB)
Refund fee: 0.00005972 BTC (0.00020522 LTC/kB)

Contract (Qb8ybmFm11ugzwWPeh7jyoCim9V7sZRjQQ):
6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888ac

Contract transaction (c1fef84ef4d8cb4dc225bd04c3495fbb8fab83321703ef033a7d6919798a8e12):
02000000000101393314fc8c21938ca5488d1b542485085c3f0599eacbc79fd3a975542435d7fa010000001716001425a5b4f2cde04580eaeaa2933d72f752fb0a0607feffffff0200e1f5050000000017a9149f6e3b0fb71c85982bf33e65d187d6604d9d028e87cedba435000000001976a914fa9df5c9e8b6b637099a94950f667d76d84a6e3788ac024730440220613f097ffa86db044c40695420edb15deb5dc1a338402a32836ec299f80aa2d9022037ce68f3194dd793883b7451c0d3941b43d205895ebcfc6e8c6ba4314b834c720121031eabfa379db7e5e4bfc961b386dad39d8fb5bf38104da05d177039520b2e0a7c00000000

Refund transaction (27a6913dd8c5b46e9bb1df6d3060bf678e8799f1850e00505ff59aa0d0cc30ff):
0200000001128e8a7919697d3a03ef03173283ab8fbb5f49c304bd25c24dcbd8f44ef8fec100000000ce47304402203200f04ee3b12cb9e29e2b11f6fe6cf6ed6ead34558b06f31beb3f741ec992cc0220074fe0c938c0e92ec71b6c359599dab263c40405269123ddd3a0d008f2d5ecd40121022f9f3ed22f1313c6b618430c0034ddc91274b40d97f8ed2abd279687dfe556b2004c616382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888ac0000000001acc9f505000000001976a914328c21b8a5dd541430cc15b7a8a5992b8496db4788ac841a005d

Publish contract transaction? [y/N] y
Published contract transaction (c1fef84ef4d8cb4dc225bd04c3495fbb8fab83321703ef033a7d6919798a8e12)

https://chain.so/add...jyoCim9V7sZRjQQ (смотрим первую транзакцию)

Теперь Алиса проводит аудит контракта LTC:

ltcatomicswap --testnet auditcontract 6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888ac 02000000000101393314fc8c21938ca5488d1b542485085c3f0599eacbc79fd3a975542435d7fa010000001716001425a5b4f2cde04580eaeaa2933d72f752fb0a0607feffffff0200e1f5050000000017a9149f6e3b0fb71c85982bf33e65d187d6604d9d028e87cedba435000000001976a914fa9df5c9e8b6b637099a94950f667d76d84a6e3788ac024730440220613f097ffa86db044c40695420edb15deb5dc1a338402a32836ec299f80aa2d9022037ce68f3194dd793883b7451c0d3941b43d205895ebcfc6e8c6ba4314b834c720121031eabfa379db7e5e4bfc961b386dad39d8fb5bf38104da05d177039520b2e0a7c00000000
Contract address: Qb8ybmFm11ugzwWPeh7jyoCim9V7sZRjQQ
Contract value: 1 BTC
Recipient address: mxk3okLqWGd8Y9DDjbxdm8ri1ZaJmkkuR4
Author's refund address: mokWwyA5mE3fLFoZQCed2qfdvBWxw96jVE

Secret hash: 88625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b19

Locktime: 2019-06-11 21:17:56 +0000 UTC
Locktime reached in 23h57m31s

Алиса видит тот же Secret hash, нужную сумму (то, что в логе написано BTC вместо LTC, это косяк разработчиков, простим им это) и то, что средства заблокированы на 24 часа.

Теперь Алиса может получить LTC Боба используя Secret (до этого момента этот ключ находился только у нее)

ltcatomicswap --testnet --rpcuser=x --rpcpass=y redeem 6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888ac 02000000000101393314fc8c21938ca5488d1b542485085c3f0599eacbc79fd3a975542435d7fa010000001716001425a5b4f2cde04580eaeaa2933d72f752fb0a0607feffffff0200e1f5050000000017a9149f6e3b0fb71c85982bf33e65d187d6604d9d028e87cedba435000000001976a914fa9df5c9e8b6b637099a94950f667d76d84a6e3788ac024730440220613f097ffa86db044c40695420edb15deb5dc1a338402a32836ec299f80aa2d9022037ce68f3194dd793883b7451c0d3941b43d205895ebcfc6e8c6ba4314b834c720121031eabfa379db7e5e4bfc961b386dad39d8fb5bf38104da05d177039520b2e0a7c00000000 e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2
Redeem fee: 0.00006633 BTC (0.00020472 LTC/kB)

Redeem transaction (0fe4da015fe6f4febe88630fe714819b8a1f7594586bf0f9ec38e0ed4d76b3f1):
0200000001128e8a7919697d3a03ef03173283ab8fbb5f49c304bd25c24dcbd8f44ef8fec100000000ef47304402202479c8e74a170f3b4f66c87fed9362e68cc1001b7a251a761fd6e7630ebdb7a9022069cbb14155eab556ac770ab6a623dbf834df677fcaec0c61915c33623481e23201210297eba1a42a4646c5ba79b509f7d66f3d26f71132bf45352084d4ef453297156d20e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2514c616382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888acffffffff0117c7f505000000001976a91472792fc5053c26b2ce564a610fe9cc1c6329898288ac841a005d

Publish redeem transaction? [y/N] y
Published redeem transaction (0fe4da015fe6f4febe88630fe714819b8a1f7594586bf0f9ec38e0ed4d76b3f1)

Боб наблюдает за адресом контракта LTC в эксплорере, и когда с него уйдет транзакция Алисе, он должен найти в деталях транзакции tx_hex, из которого он теперь может получить Secret при помощи Secret hash.

btcatomicswap --testnet extractsecret 0200000001128e8a7919697d3a03ef03173283ab8fbb5f49c304bd25c24dcbd8f44ef8fec100000000ef47304402202479c8e74a170f3b4f66c87fed9362e68cc1001b7a251a761fd6e7630ebdb7a9022069cbb14155eab556ac770ab6a623dbf834df677fcaec0c61915c33623481e23201210297eba1a42a4646c5ba79b509f7d66f3d26f71132bf45352084d4ef453297156d20e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2514c616382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914bcf425a0d959c42374ebeb1a7a8b4d2386d60f166704841a005db17576a9145a51abf58bb5d2d553ac0f89b1fbcc34280428a66888acffffffff0117c7f505000000001976a91472792fc5053c26b2ce564a610fe9cc1c6329898288ac841a005d 88625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b19
Secret: e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2

Боб с помощью Secret теперь может получить BTC.

btcatomicswap --testnet --rpcuser=x --rpcpass=y redeem 6382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914a3e2d1dc5def46f4baeed4f5671267ff2aa78af367041b67015db17576a914d34d1863ebc34df2a5bcd69c5a6042e8b46d2d8b6888ac 020000000001015b83fbe2d5ac6897bbe0318480029a9b43fa5278028268badf68e2f970dcc0220100000000feffffff025e956300000000001976a914ee4fccdf22ae7550a51009fac1e63fbc4fd4c91688ac40420f000000000017a9145ffd27277bbb9bf093f105e2e712afdb11ab0bbb870247304402205aa7a1cb690d56e142d4a0699ba07607079cbbb47911e15fe0fcb79128e449bb02205b2adfdaac3b145dc3a5f12138cb2ed3542be735bca1880d1aa2a99b3d316d72012103df970267136ef360e3d01b82ee4b3c53df86935ae7d1da260d7cb810e31ef00e00000000 e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2
Redeem fee: 0.00000332 BTC (0.00001022 BTC/kB)

Redeem transaction (bd712bce73744782cab652c7071dd7e8d86eb2496f57a3ad559b7bca286c8ab1):
0200000001081c744f627f0cf0d78d89e3dfa52d3c1cfb66259a948425fd2b9c379e559e7701000000f04830450221008d820dd20b0a848bc3dcbeda8d1ed8dc9ed691f57436f74e2b4042945c13c9f002200c304f62d8e9fcd765ae655cfbc906e4769f5842bfa990bb51392d2e0c0aa7ad012103f5bb4906b98d358131bf6d0f8b826416f51a786490ca180dc02499c52a8ad4fb20e57f544db3cabb663402ef0d13e75d51aee260d60cc83113bd8d53890d6030e2514c616382012088a82088625f20adf4ee3c6cf4d4e94b4212c3b5166c29972c7f8f20ff482188999b198876a914a3e2d1dc5def46f4baeed4f5671267ff2aa78af367041b67015db17576a914d34d1863ebc34df2a5bcd69c5a6042e8b46d2d8b6888acffffffff01f4400f00000000001976a914a165f4d0b3774c1f43abfd1cfb408708bc34579588ac1b67015d

Publish redeem transaction? [y/N] y
Published redeem transaction (bd712bce73744782cab652c7071dd7e8d86eb2496f57a3ad559b7bca286c8ab1)

Обратите внимание, что адреса, передаваемые друг другу в самом начале, так и оказались незадействованными. Монеты пришли на другие адреса, но, разумеется, их приватные ключи находятся в bitcoin/litecoin core.
А еще Алиса и Боб могут использовать Refund transaction, если одна из сторон начнет филонить, как оно работает пока не проверял. Скам со стороны Алисы невозможен, так как средства на ее контракте BTC залочены на сутки дольше, чем у Боба.
Фух, всем спасибо за внимание, спать пошел

Прикрепленные файлы


  • 0

#2 Oleg Halfsun

Oleg Halfsun

    Новичок

  • 0 topics
  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 06 сентября 2018 - 06:33

Отлично!, спасибо за работу, а в обратную сторону возможен обмен?


  • 0

#3 ToravitchP

ToravitchP

    МЕСТНЫЙ

  • 0 topics
  • Пользователи
  • PipPipPip
  • 297 сообщений

Отправлено 30 сентября 2018 - 08:08

"Очень простой" метод... :) Да проще в Канаду слетать к покупателю/продавцу!


  • 0

#4 Kevincoash

Kevincoash

    Новичок

  • 0 topics
  • Пользователи
  • Pip
  • 28 сообщений

Отправлено 23 октября 2018 - 06:20

Слава богу что я тупой и ничего из прочитаного не понял))
За старания лайк.

  • 0

#5 uyahanovolaeq

uyahanovolaeq

    Пользователь

  • 1 topics
  • Пользователи
  • PipPip
  • 96 сообщений

Отправлено 15 марта 2021 - 05:50

не хакер но 24-48 часов ... и если "филонить" начнет специальный злой бот, такая сеть может встать...


  • 0

#6 Gorin

Gorin

    МЕСТНЫЙ

  • 0 topics
  • Пользователи
  • PipPipPip
  • 116 сообщений

Отправлено 05 апреля 2021 - 11:17

Обмен возможен в любых направлениях из списка https://github.com/d...atomic-swapping, если поискать по форкам, то можно и другие монеты найти, ну или самому по аналогии добавить


  • 0

#7 rostov

rostov

    МЕСТНЫЙ

  • 0 topics
  • Пользователи
  • PipPipPip
  • 140 сообщений

Отправлено 06 мая 2021 - 10:51

Проще некуда, ага. Ну разве если мозг в тонусе держать. Хотя у меня есть другое чем его занять.


  • 0

#8 Wadimoliver

Wadimoliver

    МЕСТНЫЙ

  • 1 topics
  • Пользователи
  • PipPipPip
  • 137 сообщений

Отправлено 01 июня 2021 - 02:43

Если биткоин и победит, то он вряд ли станет средством для платежей, скорее постоянно растущим золотом. А вот такие программы позволят обменивать его на какую-нибудь модную быструю монетку для текущих расходов. Очень круто, но не мешало бы запилить интерфейс, а то большинству не понятно, как этим пользоваться


  • 0

#9 aceseloopilia

aceseloopilia

    МЕСТНЫЙ

  • 0 topics
  • Пользователи
  • PipPipPip
  • 210 сообщений

Отправлено 12 июля 2021 - 10:19

децентрализованные биржи на этой основе пилятся, пилятся, никак недопилятся, или я о них не знаю


  • 0




Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных