atomic-swap

module
v0.4.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 14, 2023 License: LGPL-3.0

README

ETH-XMR Atomic Swaps

This is an implementation of ETH-XMR atomic swaps, currently in beta. It currently consists of swapd and swapcli binaries, the swap daemon and swap CLI tool respectively, which allow for nodes to discover each other over the p2p network, to query nodes for their current available offers, and the ability to make and take swap offers and perform the swap protocol. The swapd program has a JSON-RPC endpoint which the user can use to interact with it. swapcli is a command-line utility that interacts with swapd by performing RPC calls.

Swap instructions

Trying it on mainnet

To try the swap on Ethereum and Monero mainnet, follow the instructions here.

Trying it on Monero's stagenet and Ethereum's Sepolia testnet

To try the swap on Stagenet/Sepolia, follow the instructions here.

Trying it locally

To try the swap locally with two nodes (maker and taker) on a development environment, follow the instructions here.

Protocol

Please see the protocol documentation for how it works.

Additional documentation

Developer instructions

Please see the developer docs.

RPC API

The swap process comes with a HTTP JSON-RPC API as well as a Websockets API. You can find the documentation here.

Contributions

If you'd like to contribute, feel free to fork the repo and make a pull request. Please make sure the CI is passing - you can run make build, make lint, and make test to make sure the checks pass locally. Please note that any contributions you make will be licensed under LGPLv3.

Contact

Donations

The work on this project has been funded previously by community grants. It is currently not funded; if you'd like to donate, you can do so at the following address:

  • XMR 8AYdE4Tzq3rQYh7QNHfHz8HqcgT9kcTcHMcRHL1LhVtqYwah27zwPYGdesBgK5PATvGBAd4BC1t2NfrqKQqDguybQrC1tZb
  • ETH 0x39D3b8cc9D08fD83360dDaCFe054b7D6e7f2cA08

GPLv3 Disclaimer

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Directories

Path Synopsis
Package bootnode is responsible for assembling, running and cleanly shutting down a swap bootnode.
Package bootnode is responsible for assembling, running and cleanly shutting down a swap bootnode.
Package cliutil provides utility functions intended for sharing by the main packages of multiple executables.
Package cliutil provides utility functions intended for sharing by the main packages of multiple executables.
cmd
bootnode
Package main provides the entrypoint of the bootnode executable, a node that is only used to bootstrap the p2p network and does not run any swap services.
Package main provides the entrypoint of the bootnode executable, a node that is only used to bootstrap the p2p network and does not run any swap services.
swapcli
Package main provides the entrypoint of swapcli, an executable for interacting with a local swapd instance from the command line.
Package main provides the entrypoint of swapcli, an executable for interacting with a local swapd instance from the command line.
swapd
Package main provides the entrypoint of the swapd executable, a daemon that manages atomic swaps between monero and ethereum assets.
Package main provides the entrypoint of the swapd executable, a daemon that manages atomic swaps between monero and ethereum assets.
Package coins provides types, conversions and exchange calculations for dealing with cryptocurrency coin and ERC20 token representations.
Package coins provides types, conversions and exchange calculations for dealing with cryptocurrency coin and ERC20 token representations.
Package common is for miscellaneous constants, types and interfaces used by many packages.
Package common is for miscellaneous constants, types and interfaces used by many packages.
rpctypes
Package rpctypes provides the serialized types for queries and responses shared by swapd's JSON-RPC server and client-side libraries.
Package rpctypes provides the serialized types for queries and responses shared by swapd's JSON-RPC server and client-side libraries.
types
Package types is for types that are shared by multiple packages
Package types is for types that are shared by multiple packages
Package crypto is for cryptographic code used by both Monero and Ethereum.
Package crypto is for cryptographic code used by both Monero and Ethereum.
monero
Package mcrypto is for types and libraries that deal with Monero keys, addresses and signing.
Package mcrypto is for types and libraries that deal with Monero keys, addresses and signing.
secp256k1
Package secp256k1 contains methods and types for working with Ethereum and possibly other cryptocurrency keys that use the secp256k1 elliptic curve.
Package secp256k1 contains methods and types for working with Ethereum and possibly other cryptocurrency keys that use the secp256k1 elliptic curve.
Package daemon is responsible for assembling, running and cleanly shutting down the swap daemon (swapd) and its numerous subcomponents.
Package daemon is responsible for assembling, running and cleanly shutting down the swap daemon (swapd) and its numerous subcomponents.
Package db implements the APIs for interacting with our disk persisted key-value store.
Package db implements the APIs for interacting with our disk persisted key-value store.
Package dleq provides a sub-api built on top of the go-dleq package for our atomic swaps.
Package dleq provides a sub-api built on top of the go-dleq package for our atomic swaps.
Package contracts is for go bindings generated from Solidity contracts as well as some utility functions for working with the contracts.
Package contracts is for go bindings generated from Solidity contracts as well as some utility functions for working with the contracts.
block
Package block contains ethereum helper methods that center around blocks, like waiting for a certain block timestamp, waiting for a transaction to be mined in a block, and extracting an error for a transaction from the block that mined it.
Package block contains ethereum helper methods that center around blocks, like waiting for a certain block timestamp, waiting for a transaction to be mined in a block, and extracting an error for a transaction from the block that mined it.
extethclient
Package extethclient provides libraries for interacting with an ethereum node using a specific private key.
Package extethclient provides libraries for interacting with an ethereum node using a specific private key.
watcher
Package watcher provides tools to track events emitted from ethereum contracts.
Package watcher provides tools to track events emitted from ethereum contracts.
Package monero provides client libraries for working with wallet files and interacting with a monero node.
Package monero provides client libraries for working with wallet files and interacting with a monero node.
net
Package net adds swap-specific functionality to go-p2p-net/Host, in particular the swap messages for querying and initiation.
Package net adds swap-specific functionality to go-p2p-net/Host, in particular the swap messages for querying and initiation.
message
Package message provides the types for messages that are sent between swapd instances.
Package message provides the types for messages that are sent between swapd instances.
Package pricefeed implements routines to retrieve on-chain price feeds from chainlink's decentralized oracle network.
Package pricefeed implements routines to retrieve on-chain price feeds from chainlink's decentralized oracle network.
Package protocol has functions that are used by both the maker and taker during execution of the swap.
Package protocol has functions that are used by both the maker and taker during execution of the swap.
backend
Package backend provides the portion of top-level swapd instance management that is shared by both the maker and the taker.
Package backend provides the portion of top-level swapd instance management that is shared by both the maker and the taker.
swap
Package swap is a generated GoMock package.
Package swap is a generated GoMock package.
txsender
Package txsender provides a common Sender interface for swapd instances.
Package txsender provides a common Sender interface for swapd instances.
xmrmaker
Package xmrmaker manages the swap state of individual swaps where the local swapd instance is offering Monero and accepting Ethereum assets in return.
Package xmrmaker manages the swap state of individual swaps where the local swapd instance is offering Monero and accepting Ethereum assets in return.
xmrmaker/offers
Package offers is a generated GoMock package.
Package offers is a generated GoMock package.
xmrtaker
Package xmrtaker manages the swap state of individual swaps where the local swapd instance is offering Ethereum assets and accepting Monero in return.
Package xmrtaker manages the swap state of individual swaps where the local swapd instance is offering Ethereum assets and accepting Monero in return.
Package relayer provides libraries for creating and validating relay requests and responses.
Package relayer provides libraries for creating and validating relay requests and responses.
Package rpc provides the HTTP server for incoming JSON-RPC and websocket requests to swapd from the local host.
Package rpc provides the HTTP server for incoming JSON-RPC and websocket requests to swapd from the local host.
Package rpcclient provides client libraries for interacting with a local swapd instance using the JSON-RPC remote procedure call protocol and websockets.
Package rpcclient provides client libraries for interacting with a local swapd instance using the JSON-RPC remote procedure call protocol and websockets.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL