All Projects → sgeisler → btcbc-rs

sgeisler / btcbc-rs

Licence: MIT License
Rust Nym Bitcoin Transaction Broadcaster

Programming Languages

rust
11053 projects

Nym Bitcoin Broadcaster

This repository implement an anonymous Bitcoin transaction broadcasting tool on top of Nym, a mixnet still under heavy development. So while the technology looks promising any anonymity claims are to be taken with a grain of salt. This project is provided as-is, it might work as expected or not, please don't rely on it without vetting it yourself.

There are two parts:

  • Client: connects to a nym native-client and sends a transaction to a specified server (aka service provider)
  • Server: listens for incoming nym packets from its nym native-client. If they are valid client requests containing a transaction it is broadcasted to its respective network using blockstream.info.

Usage

Nym Native Client

To use either one you have to initialize and run a Nym client:

nym-client init --id client
nym-client run --id client

If you want to run both client and server on one machine it's advisable to run two nym clients on different ports:

nym-client init --id client # default port = 1977
nym-client init --id server --port 1978

nym-client run --id client
nym-client run --id server

BTC-BC Client

btcbc 0.1.0

USAGE:
    client [OPTIONS] <transaction>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -n, --network <network>                      one of 'bitcoin', 'testnet' or 'liquid' [default: bitcoin]
    -s, --service-provider <service-provider>
             [default:
            7GAmWTUr3wude4LkRBJ78UmD2QMCgQvr8RCRJHW1fUYf.DHhHL8ZcnEEFq3UKuD7E31aWdnzuWdeJv1wRicj9n6tU@AmoRv85ak8UrYkqd43NZpQJFQjn8rtgMfViBgAFaPDRh]
    -w, --websocket <websocket>                   [default: ws://127.0.0.1:1977]

ARGS:
    <transaction>    

If you cloned this repo, have Rust installed and initialized your nym client as shown above you can run the following to transmit a hex-encoded Bitcoin <transaction> through a service provider at <address>:

cargo run --bin client -- -s <address> <transaction>

There is a default service provider at 7GAmWTUr3wude4LkRBJ78UmD2QMCgQvr8RCRJHW1fUYf.DHhHL8ZcnEEFq3UKuD7E31aWdnzuWdeJv1wRicj9n6tU@AmoRv85ak8UrYkqd43NZpQJFQjn8rtgMfViBgAFaPDRh which I run on a best-effort basis and which is chosen if the -s flag isn't provided. Please don't rely on it for anything critical.

If you want to transmit it to another <network> (supported networks: bitcoin, testnet, liquid), just specify the network flag:

cargo run --bin client -- --network <network> -s <address> <transaction>

BTC-BC Server

btcbc 0.1.0

USAGE:
    server [OPTIONS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -w, --websocket <websocket>     [default: ws://127.0.0.1:1977]

If you cloned this repo, have Rust installed and initialized your nym client as shown above you can run the following to start the server:

cargo run --bin server -- --websocket ws://127.0.0.1:1978

It will output a log message telling you its nym address:

Feb 13 15:07:20.291  INFO server: Listening on 2DS4Cwf3x95A4KusRDSo9g8sJaJ4Z5xqNrftPprFHbkS.8Uj4NJjUeJE15bWE6K3aazXaaWbUDk28z5ZBo52GNKHm@DiYR9o8KgeQ81woKPYVAu4LNaAEg8SWkiufDCahNnPov

This address has to be given as an argument to the client when sending transactions.

Debugging

If something isn't working as expected you can use the RUST_LOG environment variable to enable more verbose logging (e.g. RUST_LOG=debug).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].