Announcing Libforesta

Announcing Libforesta
2023-08-01  8:02 ` Bastiaan van den Berg
  2023-08-03 14:03 ` leohaf
  
From: Davidson Souza @ 2023-07-31 17:47 UTC (permalink / raw)
  To: Bitcoin-dev

[-- Attachment #1: Type: text/plain, Size: 2056 bytes --]

Hi, list. My name is Davidson, and I’m thrilled to share `libfloresta` with the Bitcoin devs mailing list!

This is a derivate of a project I’ve been developing for a few months, called `Floresta` (Portuguese for forest). An Utreexo powered, Fully-Validating Bitcoin Full node with integrated watch-only wallet and Electrum Server, meant to be a compact, simple, and ready to use full node for end users.

After some feedbacks and thoughts, I’ve decided to turn it into a series of reusable libs that can be used in other applications in a straightforward way. The main goal here is low-power devices, like SBC and smartphones, but can be used in any environment. To achieve that, I’m writing the main logic in Rust and will generate bindings to the original code and compiling to WASM, allowing it to run virtually anywhere.


The project is in an early stage, but I’m using it on signet for a while now with no problems. Mainnet support is almost ready, but we need to solve some performance issues with bridge nodes and set some up, so you can have utreexo peers.


The project is available on [my GitHub](https://github.com/Davidson-Souza/Floresta) and I wrote an initial [blogpost](https://blog.dlsouza.lol/2023/07/07/libfloresta.html) explaining how to use it (in Rust). I’ll write more as the project matures, and I get it running on other platforms. Any feedback is welcome!


## Consensus


I know that alternative implementations is a spicy subject in Bitcoin land, but this project **does not** reimplement the Bitcoin Consensus machine from scratch. I’m using `libbitcoinconsenus` and plan to use the full `libbitcoinkernel` in the future. While this doesn’t guarantee consistency, it minimizes misimplementations leading to splits.


I’m also making an extra effort into cross-test against Bitcoin Core to find any inconsistencies before it causes any trouble.


## Acknowledges


A special thanks to [Vinteum](https://vinteum.org/) for supporting my work with utreexo and Floresta.

Best regards,
Davidson Souza.

[-- Attachment #2: Type: text/html, Size: 6639 bytes --]

 permalink raw reply	[|nested]
2023-07-31 17:47 [bitcoin-dev] Announcing Libforesta Davidson Souza

  2023-08-02 21:32   ` Davidson Souza
  2023-08-03 14:03 ` leohaf
  
From: Bastiaan van den Berg @ 2023-08-01  8:02 UTC (permalink / raw)
  To: Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 2781 bytes --]

Am i correct in the following interpretations?

- the utreexo bridge peers are the only real bitcoin nodes
- you cant use -only- libfloresta to be a node , you cant mine with it, you
cant do normal tx with it
- you are targetting webbrowsers (???? , i'm really confused about the why
of this)

On Mon, Jul 31, 2023 at 9:11 PM Davidson Souza via bitcoin-dev <
bitcoin-dev@lists•linuxfoundation.org> wrote:

> Hi, list. My name is Davidson, and I’m thrilled to share `libfloresta`
> with the Bitcoin devs mailing list!
>
> This is a derivate of a project I’ve been developing for a few months,
> called `Floresta` (Portuguese for forest). An Utreexo powered,
> Fully-Validating Bitcoin Full node with integrated watch-only wallet and
> Electrum Server, meant to be a compact, simple, and ready to use full node
> for end users.
>
> After some feedbacks and thoughts, I’ve decided to turn it into a series
> of reusable libs that can be used in other applications in a
> straightforward way. The main goal here is low-power devices, like SBC and
> smartphones, but can be used in any environment. To achieve that, I’m
> writing the main logic in Rust and will generate bindings to the original
> code and compiling to WASM, allowing it to run virtually anywhere.
>
> The project is in an early stage, but I’m using it on signet for a while
> now with no problems. Mainnet support is almost ready, but we need to solve
> some performance issues with bridge nodes and set some up, so you can have
> utreexo peers.
>
>
> The project is available on [my GitHub](
> https://github.com/Davidson-Souza/Floresta) and I wrote an initial
> [blogpost](https://blog.dlsouza.lol/2023/07/07/libfloresta.html)
> explaining how to use it (in Rust). I’ll write more as the project matures,
> and I get it running on other platforms. Any feedback is welcome!
>
> ## Consensus
>
>
> I know that alternative implementations is a spicy subject in Bitcoin
> land, but this project **does not** reimplement the Bitcoin Consensus
> machine from scratch. I’m using `libbitcoinconsenus` and plan to use the
> full `libbitcoinkernel` in the future. While this doesn’t guarantee
> consistency, it minimizes misimplementations leading to splits.
>
>
> I’m also making an extra effort into cross-test against Bitcoin Core to
> find any inconsistencies before it causes any trouble.
>
> ## Acknowledges
>
> A special thanks to [Vinteum](https://vinteum.org/) for supporting my
> work with utreexo and Floresta.
>
> Best regards,
> Davidson Souza.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
>

[-- Attachment #2: Type: text/html, Size: 7098 bytes --]

 permalink raw reply	[|nested]
2023-08-01  8:02 ` Bastiaan van den Berg

  
From: Davidson Souza @ 2023-08-02 21:32 UTC (permalink / raw)
  To: buzz, Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 5433 bytes --]

HI Bastiaan van den Berg, thanks for your reply.

>the utreexo bridge peers are the only real bitcoin nodes

I think this is not correct. Floresta is a Compact State Node (CSN), it keeps only the bare minimum to validate blocks and transactions, but it still performs everything a bridge or a regular node does. The difference being in the storage and I/O requirements. In fact, CSNs are the reason utreexo is relevant. In a bridge node, you need more​​ resources than a regular node. As stated in the post, I'm using Core's set of shared libs to implement the consensus parts, and we validate the chain from genesis as usual.

>you cant use -only- libfloresta to be a node

You can, bridge nodes are just peers that can prove things. You could, in theory, eliminate them. But this is a long-term thing. In fact, I have built Floresta, a drop-in replacement to a node + EPS. You just spin it up and after IBD, an electrum server is provided to connect your wallets.

>you cant mine with it

Technically, you can, you just have to build a block dispatcher. But I think this is out-of-scope for what I'm looking at. My main target is end-users, that don't want or can't use a node because of the elevated hardware requirements, even for pruned ones.

>you cant do normal tx with it

Yes, you can't build the tx, but the goal is not doing this. The goal is integrating the node and (if needed) the watch-only wallet in a wallet that implements this procedures. So imagine a BDK-based wallet with libfloresta as the chain backend, LDK makes the UTXO management and tx build/sign, libfloresta broadcasts with the p2p network, no ttp involved.
I'm using Floresta as my Electrum server for Electrum and Sparrow, for testing some things on signet, and works just fine!

>you are targetting webbrowsers (???? , i'm really confused about the why of this)

I think I could have made the explanation more clear. The goal is creating a fully validating node with a small footprint, such that, using things like assume-utxo or zero-sync, even browsers and smartphones can run an actual node.​​ Browsers are just one possible target, even big computers would benefit from a low-footprint node.

Hope this helps to clarify what this project is. If you have more questions, please let me know.
________________________________
De: bitcoin-dev <bitcoin-dev-bounces@lists•linuxfoundation.org> em nome de Bastiaan van den Berg via bitcoin-dev <bitcoin-dev@lists•linuxfoundation.org>
Enviado: terça-feira, 1 de agosto de 2023 05:32
Para: Bitcoin Protocol Discussion <bitcoin-dev@lists•linuxfoundation.org>
Assunto: Re: [bitcoin-dev] Announcing Libforesta

Am i correct in the following interpretations?

- the utreexo bridge peers are the only real bitcoin nodes
- you cant use -only- libfloresta to be a node , you cant mine with it, you cant do normal tx with it
- you are targetting webbrowsers (???? , i'm really confused about the why of this)

On Mon, Jul 31, 2023 at 9:11 PM Davidson Souza via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org<mailto:bitcoin-dev@lists•linuxfoundation.org>> wrote:

Hi, list. My name is Davidson, and I’m thrilled to share `libfloresta` with the Bitcoin devs mailing list!

This is a derivate of a project I’ve been developing for a few months, called `Floresta` (Portuguese for forest). An Utreexo powered, Fully-Validating Bitcoin Full node with integrated watch-only wallet and Electrum Server, meant to be a compact, simple, and ready to use full node for end users.

After some feedbacks and thoughts, I’ve decided to turn it into a series of reusable libs that can be used in other applications in a straightforward way. The main goal here is low-power devices, like SBC and smartphones, but can be used in any environment. To achieve that, I’m writing the main logic in Rust and will generate bindings to the original code and compiling to WASM, allowing it to run virtually anywhere.


The project is in an early stage, but I’m using it on signet for a while now with no problems. Mainnet support is almost ready, but we need to solve some performance issues with bridge nodes and set some up, so you can have utreexo peers.


The project is available on [my GitHub](https://github.com/Davidson-Souza/Floresta) and I wrote an initial [blogpost](https://blog.dlsouza.lol/2023/07/07/libfloresta.html) explaining how to use it (in Rust). I’ll write more as the project matures, and I get it running on other platforms. Any feedback is welcome!


## Consensus


I know that alternative implementations is a spicy subject in Bitcoin land, but this project **does not** reimplement the Bitcoin Consensus machine from scratch. I’m using `libbitcoinconsenus` and plan to use the full `libbitcoinkernel` in the future. While this doesn’t guarantee consistency, it minimizes misimplementations leading to splits.


I’m also making an extra effort into cross-test against Bitcoin Core to find any inconsistencies before it causes any trouble.


## Acknowledges


A special thanks to [Vinteum](https://vinteum.org/) for supporting my work with utreexo and Floresta.

Best regards,
Davidson Souza.
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org<mailto:bitcoin-dev@lists•linuxfoundation.org>
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

[-- Attachment #2: Type: text/html, Size: 15082 bytes --]

 permalink raw reply	[|nested]
2023-07-31 17:47 [bitcoin-dev] Announcing Libforesta Davidson Souza
  2023-08-01  8:02 ` Bastiaan van den Berg

  2023-08-03 20:34   ` Davidson Souza
  
From: leohaf @ 2023-08-03 14:03 UTC (permalink / raw)
  To: Davidson Souza, Bitcoin Protocol Discussion

[-- Attachment #1: Type: text/plain, Size: 2853 bytes --]

Hi, delighted to see an implementation of Utreexo.

I will just have a few questions about your implementation.

1) Is this implementation able to start other nodes whether they are on the reference implementation or on Floresta?

2) Is it possible to switch from Bitcoin Core to Floresta without causing a new IDB?

3) Is Floresta backward compatible with Bitcoin Core's RPC commands?

> Le 31 juil. 2023 à 19:47, Davidson Souza via bitcoin-dev <bitcoin-dev@lists•linuxfoundation.org> a écrit :
> 
> Hi, list. My name is Davidson, and I’m thrilled to share `libfloresta` with the Bitcoin devs mailing list!
> 
> This is a derivate of a project I’ve been developing for a few months, called `Floresta` (Portuguese for forest). An Utreexo powered, Fully-Validating Bitcoin Full node with integrated watch-only wallet and Electrum Server, meant to be a compact, simple, and ready to use full node for end users. 
> 
> After some feedbacks and thoughts, I’ve decided to turn it into a series of reusable libs that can be used in other applications in a straightforward way. The main goal here is low-power devices, like SBC and smartphones, but can be used in any environment. To achieve that, I’m writing the main logic in Rust and will generate bindings to the original code and compiling to WASM, allowing it to run virtually anywhere.
> 
> The project is in an early stage, but I’m using it on signet for a while now with no problems. Mainnet support is almost ready, but we need to solve some performance issues with bridge nodes and set some up, so you can have utreexo peers.
> 
> The project is available on [my GitHub](https://github.com/Davidson-Souza/Floresta) and I wrote an initial [blogpost](https://blog.dlsouza.lol/2023/07/07/libfloresta.html) explaining how to use it (in Rust). I’ll write more as the project matures, and I get it running on other platforms. Any feedback is welcome!
> 
> ## Consensus
> 
> I know that alternative implementations is a spicy subject in Bitcoin land, but this project **does not** reimplement the Bitcoin Consensus machine from scratch. I’m using `libbitcoinconsenus` and plan to use the full `libbitcoinkernel` in the future. While this doesn’t guarantee consistency, it minimizes misimplementations leading to splits.
> 
> I’m also making an extra effort into cross-test against Bitcoin Core to find any inconsistencies before it causes any trouble.
> 
> ## Acknowledges
> 
> A special thanks to [Vinteum](https://vinteum.org/) for supporting my work with utreexo and Floresta.
> 
> Best regards,
> Davidson Souza.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation.org <mailto:bitcoin-dev@lists•linuxfoundation.org>
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev


[-- Attachment #2: Type: text/html, Size: 16268 bytes --]

 permalink raw reply	[|nested]
2023-08-03 14:03 ` leohaf

  
From: Davidson Souza @ 2023-08-03 20:34 UTC ( / )
  To: Bitcoin Protocol Discussion




Hi leohaf.

>Is this implementation able to start other nodes whether they are on the reference implementation or on Floresta?

You mean serve blocks to others? If so, Floresta is a prune-first node, meant to be used with only outgoing connections, so no.

>Is it possible to switch from Bitcoin Core to Floresta without causing a new IDB?

Not trivially, I think. The easiest way I could think of is someone handing you the position of each leaf in the accumulator, you could reconstruct it locally. If the acc have exactly​​ the UTXOs you expected, and is valid, then you just prune off all leaves and keep the roots, becoming a bridge node. This is lighter that IBD, but still a bit costly, I guess.

>Is Floresta backward compatible with Bitcoin Core's RPC commands?

I'm trying to get the most important rpcs closer to core. I won't promisse all of them, but ones used in the watch-only wallet and pulling general chain data will have a very close interface.

________________________________
De: leohaf@orangepill•ovh <leohaf@orangepill•ovh>
Enviado: quinta-feira, 3 de agosto de 2023 11:33
Para: Davidson Souza <davidson.lucas.souza@outlook•com>; Bitcoin Protocol Discussion <bitcoin-dev@lists•linuxfoundation.org>
Assunto: Re: [bitcoin-dev] Announcing Libforesta

Hi, delighted to see an implementation of Utreexo.

I will just have a few questions about your implementation.

1) Is this implementation able to start other nodes whether they are on the reference implementation or on Floresta?

2) Is it possible to switch from Bitcoin Core to Floresta without causing a new IDB?

3) Is Floresta backward compatible with Bitcoin Core's RPC commands?

Le 31 juil. 2023 à 19:47, Davidson Souza via bitcoin-dev <bitcoin-dev@lists•linuxfoundation.org> a écrit :

Hi, list. My name is Davidson, and I’m thrilled to share `libfloresta` with the Bitcoin devs mailing list!

This is a derivate of a project I’ve been developing for a few months, called `Floresta` (Portuguese for forest). An Utreexo powered, Fully-Validating Bitcoin Full node with integrated watch-only wallet and Electrum Server, meant to be a compact, simple, and ready to use full node for end users.

After some feedbacks and thoughts, I’ve decided to turn it into a series of reusable libs that can be used in other applications in a straightforward way. The main goal here is low-power devices, like SBC and smartphones, but can be used in any environment. To achieve that, I’m writing the main logic in Rust and will generate bindings to the original code and compiling to WASM, allowing it to run virtually anywhere.

The project is in an early stage, but I’m using it on signet for a while now with no problems. Mainnet support is almost ready, but we need to solve some performance issues with bridge nodes and set some up, so you can have utreexo peers.

The project is available on [my GitHub](https://github.com/Davidson-Souza/Floresta) and I wrote an initial [blogpost](https://blog.dlsouza.lol/2023/07/07/libfloresta.html) explaining how to use it (in Rust). I’ll write more as the project matures, and I get it running on other platforms. Any feedback is welcome!

## Consensus

I know that alternative implementations is a spicy subject in Bitcoin land, but this project **does not** reimplement the Bitcoin Consensus machine from scratch. I’m using `libbitcoinconsenus` and plan to use the full `libbitcoinkernel` in the future. While this doesn’t guarantee consistency, it minimizes misimplementations leading to splits.

I’m also making an extra effort into cross-test against Bitcoin Core to find any inconsistencies before it causes any trouble.

## Acknowledges

A special thanks to [Vinteum](https://vinteum.org/) for supporting my work with utreexo and Floresta.

Best regards,
Davidson Souza.
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org<mailto:bitcoin-dev@lists•linuxfoundation.org>
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev