## Tutorial ### Introduction This program is a small node implementation with an integrated Electrum Server. It behaves similarly to a Bitcoin Core + Electrum Personal Server setup, but with some key differences. - Node and Electrum Server are in the same binary, making the process simpler and less error-prone. - The full node uses a new technology called `Utreexo` to reduce resource consumption, allowing you to run the node with less than 1GB of disk and RAM. - Unlike EPS, this Electrum Server supports multiple simultaneous connections. ### Usage There are two ways to obtain the executable. You can compile from source code or download the pre-compiled binary from Github. For instructions on how to compile the source code, [see below](#compiling). Information on how to run it is [here](#running) ### Compiling To compile, you need the Rust toolchain and Cargo, more information [here](https://www.rust-lang.org/). You can obtain the source code by downloading from Github or cloning with ```bash git clone https://github.com/getfloresta/Floresta.git ``` Navigate into the folder with ```bash cd Floresta/ ``` compile with: ```bash cargo build --release ``` if everything is ok, it will compile the program and save the executable in `./target/release/`. ### Running Before running it for the first time, you need to extract the xpub from your wallet. In Electrum, just go to the "Wallet" menu and click on "Information", the xpub will appear in a large text box. Once you have the Extended Public Key in hand, copy the configuration file `config.toml.sample` to `config.toml` and edit it by inserting the xpub in the appropriate field. You can insert infinite xpubs. Loose addresses are also allowed. For multisig addresses, a wallet like Sparrow is recommended. Simply copy the "output descriptor" generated by it. See [below](#config_example) for an example of a valid file. ```bash floresta -c config.toml --network signet run ``` or ```bash ./target/release/floresta -c config.toml --network signet run ``` or ```bash cargo run --release -- -c config.toml --network signet ``` Where: - `network` is the network you're using, bitcoin means mainnet, other valid values are signet, regtest, and testnet. These are all test networks that are functionally identical to the main network (mainnet), but used only for testing, and their coins have no value. If everything goes right, it will start synchronization and show the progress on screen. From the moment you see > Server running on: 0.0.0.0:50001 you can already connect your wallet to the server, but the balance might take a while to appear. ### Configuration File Example ```toml [wallet] xpubs = [ "vpub5ZkWR4krsAzwFsmW8Yp3eHuANVLr7ZSWii6KmRnLRiN6ZXLbqs1f217jJM37oteQoyng82yw44XQU8PYJJBGgVzvJ96dQZEyZZcDiDmoJXw", "vpub5V5XF4ipcQ9tLp7NCFswnwZ23tm5Key81E9CCfqFXaGjzTpQ8jjiirf2hG7aXtqXbRDFxMvEhdGdeFcqQ3jUGUkq4mqo2VoGCDWCZvPQvUy", ] addresses = [ "tb1qjfplwf7a2dpjj04cx96rysqeastvycc0j50cch" ] descriptors = [ "wsh(sortedmulti(1,[54ff5a12/48h/1h/0h/2h]tpubDDw6pwZA3hYxcSN32q7a5ynsKmWr4BbkBNHydHPKkM4BZwUfiK7tQ26h7USm8kA1E2FvCy7f7Er7QXKF8RNptATywydARtzgrxuPDwyYv4x/<0;1>/*,[bcf969c0/48h/1h/0h/2h]tpubDEFdgZdCPgQBTNtGj4h6AehK79Jm4LH54JrYBJjAtHMLEAth7LuY87awx9ZMiCURFzFWhxToRJK6xp39aqeJWrG5nuW3eBnXeMJcvDeDxfp/<0;1>/*))#fuw35j0q" ] ``` ### Screenshot of Program Running ![A screenshot of logs from a Floresta instance running in a terminal on a GNU/Linux distribution](./assets/Screenshot_ibd.jpg)