Skip to content

Commit 6a51703

Browse files
committed
prettify and add dev meeting
1 parent 5d0404f commit 6a51703

File tree

18 files changed

+483
-460
lines changed

18 files changed

+483
-460
lines changed

hugo-site/content/donate/_index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ special interests.
1717
#### Donate via Cryptocurrency
1818

1919
Freenet is **not** a cryptocurrency, but we do accept cryptocurrency donations. For large donations
20-
(over \$5,000) please {{< email-protect "gro.teneerf@nai" "contact us" >}} before sending. For smaller
21-
donations, please use the following wallets:
20+
(over \$5,000) please {{< email-protect "gro.teneerf@nai" "contact us" >}} before sending. For
21+
smaller donations, please use the following wallets:
2222

2323
| Cryptocurrency | Address |
24-
|----------------|----------------------------------------------|
24+
| -------------- | -------------------------------------------- |
2525
| Bitcoin | `3M3fbA7RDYdvYeaoR69cDCtVJqEodo9vth` |
2626
| Zcash | `t1VHw1PHgzvMqEEd31ZBt3Vyy2UrG4J8utB` |
27-
| Ethereum | `0x79158A5Dbd9C0737CB27411817BD2759f5b9a9Ae` |
27+
| Ethereum | `0x79158A5Dbd9C0737CB27411817BD2759f5b9a9Ae` |
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
+++
2+
tags = ["dev-meeting", "front-page"]
3+
title = "Developer Meeting"
4+
date = 2025-04-10
5+
+++
6+
7+
**Attendees:** Ian Clarke, Ignacio Duart
8+
9+
In this week’s core team meeting, we made significant progress on two fronts:
10+
11+
1. **Update Propagation Over the Network**
12+
Updates are now successfully propagating across Freenet peers, a key milestone toward stable
13+
multi-node operation. Ignacio and Ector have been working together to finalize this, and although
14+
there may still be an edge case affecting update propagation through intermediary peers, once
15+
confirmed, we expect to release a new version shortly.
16+
17+
2. **Delegate API & River Integration**
18+
Ian and Ignacio explored a subtle bug in River’s delegate integration. The issue stems from
19+
ambiguity in how application messages are processed and returned. Specifically, marking a
20+
delegate message as `processed` prevents it from being delivered to the application, even when a
21+
reply is expected. This led to a deeper discussion about improving the delegate runtime API by
22+
distinguishing between:
23+
24+
- _Intermediate messages_ (e.g. `GetSecret`), which expect a reply from the node, and
25+
- _Terminal messages_, which are returned to the application.
26+
27+
The current approach, which relies on a `process` flag, is prone to confusion and bugs. Ignacio
28+
proposed a cleaner design that uses distinct message types for intermediate and terminal steps.
29+
This change would clarify delegate behavior and reduce potential developer error.
30+
31+
While this issue affects how delegate messages are handled internally, it **does not block** the
32+
ability to demonstrate **River working over the live Freenet network**. River already functions
33+
with a workaround, and delegates are primarily used for storing chat room metadata across
34+
refreshes.
35+
36+
3. **Executor Pool Refactor (Upcoming)**
37+
Ignacio also has an efficiency-focused PR in progress that addresses long-running contracts. Once
38+
complete, it will allow better isolation of failing contracts by replacing execution workers
39+
without crashing the process.
40+
41+
---
42+
43+
**Next Steps:**
44+
45+
- Finalize testing of update propagation across multi-hop peer paths.
46+
- Consider refactoring the delegate API to make message flow and processing states more explicit.
47+
- Continue preparing for a public demonstration of River running on the live network.

hugo-site/content/news/weekly-dev-meeting-2025-02-07.md

Lines changed: 65 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,68 @@ title = "Weekly Developer Meeting"
44
date = 2025-02-07
55
+++
66

7-
#### **Attendees**
8-
- Ian Clarke
9-
- Ignacio Duart
10-
11-
#### **Key Updates & Discussion Points**
12-
13-
1. **Network Connection Fixes**
14-
- Most issues preventing stable peer connections have been fixed.
15-
- The network can now maintain multiple connections, resolving a previous issue where only two peers could connect at a time.
16-
- The root cause was a combination of:
17-
- The gateway not waiting long enough before cleaning transient connections.
18-
- A logic bug in packet receipt handling that caused repeated transmission loops.
19-
- A fix was implemented to send receipts after a time threshold, even if the packet count limit wasn't met.
20-
21-
2. **Remaining Network Issue**
22-
- There is still a logical issue in peer filtering when forwarding new connection requests.
23-
- Some peers are mistakenly being filtered out, preventing them from establishing connections.
24-
- Ignacio believes the issue stems from unintended state mutations in transaction forwarding logic.
25-
26-
3. **Ping Contract Debugging**
27-
- The team was testing the ping contract using a single peer for writes and others for reads.
28-
- An issue was discovered where state updates are not propagating, likely caused by a previous efficiency optimization that prevented redundant updates.
29-
- The get function may also not be retrieving the contract correctly.
30-
31-
4. **Persistent Contract Updates for Demo**
32-
- To ensure the contract is continuously updated, the team will run the ping contract on a gateway to keep activity visible.
33-
34-
5. **Code & Technical Adjustments**
35-
- Discussed removing an outdated connection filtering rule preventing multiple nodes on the same local network from connecting.
36-
- Ensured that the network can support multiple peers with the same location, using historical response times for routing decisions.
37-
38-
6. **River Chat Integration & Serialization Issue**
39-
- Ian is working on integrating River with Freenet.
40-
- Encountering a serialization error when sending messages via WebSockets.
41-
- Ignacio suggested debugging the contract execution process by adding logging inside the contract functions.
42-
- Suspected issue: The contract is failing to deserialize state data inside the WASM execution layer.
43-
44-
#### **Next Steps**
45-
- **Ignacio** will continue debugging the contract issue and monitor network stability over the weekend.
46-
- **Ian** will investigate the serialization error in River and implement contract logging to pinpoint the deserialization issue.
47-
- **Both** will work toward a stable release early next week, with a recorded demo prepared by midweek.
48-
49-
#### **Closing Notes**
50-
- Ignacio mentioned a tool for creating realistic AI-generated demo videos with avatars; he will follow up with Ian on its name.
7+
#### **Attendees**
8+
9+
- Ian Clarke
10+
- Ignacio Duart
11+
12+
#### **Key Updates & Discussion Points**
13+
14+
1. **Network Connection Fixes**
15+
16+
- Most issues preventing stable peer connections have been fixed.
17+
- The network can now maintain multiple connections, resolving a previous issue where only two
18+
peers could connect at a time.
19+
- The root cause was a combination of:
20+
- The gateway not waiting long enough before cleaning transient connections.
21+
- A logic bug in packet receipt handling that caused repeated transmission loops.
22+
- A fix was implemented to send receipts after a time threshold, even if the packet count limit
23+
wasn't met.
24+
25+
2. **Remaining Network Issue**
26+
27+
- There is still a logical issue in peer filtering when forwarding new connection requests.
28+
- Some peers are mistakenly being filtered out, preventing them from establishing connections.
29+
- Ignacio believes the issue stems from unintended state mutations in transaction forwarding
30+
logic.
31+
32+
3. **Ping Contract Debugging**
33+
34+
- The team was testing the ping contract using a single peer for writes and others for reads.
35+
- An issue was discovered where state updates are not propagating, likely caused by a previous
36+
efficiency optimization that prevented redundant updates.
37+
- The get function may also not be retrieving the contract correctly.
38+
39+
4. **Persistent Contract Updates for Demo**
40+
41+
- To ensure the contract is continuously updated, the team will run the ping contract on a
42+
gateway to keep activity visible.
43+
44+
5. **Code & Technical Adjustments**
45+
46+
- Discussed removing an outdated connection filtering rule preventing multiple nodes on the same
47+
local network from connecting.
48+
- Ensured that the network can support multiple peers with the same location, using historical
49+
response times for routing decisions.
50+
51+
6. **River Chat Integration & Serialization Issue**
52+
- Ian is working on integrating River with Freenet.
53+
- Encountering a serialization error when sending messages via WebSockets.
54+
- Ignacio suggested debugging the contract execution process by adding logging inside the
55+
contract functions.
56+
- Suspected issue: The contract is failing to deserialize state data inside the WASM execution
57+
layer.
58+
59+
#### **Next Steps**
60+
61+
- **Ignacio** will continue debugging the contract issue and monitor network stability over the
62+
weekend.
63+
- **Ian** will investigate the serialization error in River and implement contract logging to
64+
pinpoint the deserialization issue.
65+
- **Both** will work toward a stable release early next week, with a recorded demo prepared by
66+
midweek.
67+
68+
#### **Closing Notes**
69+
70+
- Ignacio mentioned a tool for creating realistic AI-generated demo videos with avatars; he will
71+
follow up with Ian on its name.

hugo-site/content/resources/manual/architecture/irouting.md

Lines changed: 30 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,57 +5,48 @@ draft: false
55
weight: 2
66
---
77

8-
Freenet's request routing mechanism plays a crucial role in the efficiency of
9-
the network.
8+
Freenet's request routing mechanism plays a crucial role in the efficiency of the network.
109

11-
It is responsible for deciding which peer to route a request to when attempting
12-
to read, create, or modify a contract's state. The mechanism is designed to
13-
select the peer that can complete the request the fastest, which may not always
14-
be the peer closest to the contract's location - the traditional approach for
15-
routing in a small-world network, known as [greedy
16-
routing](https://en.wikipedia.org/wiki/Small-world_routing#Greedy_routing).
10+
It is responsible for deciding which peer to route a request to when attempting to read, create, or
11+
modify a contract's state. The mechanism is designed to select the peer that can complete the
12+
request the fastest, which may not always be the peer closest to the contract's location - the
13+
traditional approach for routing in a small-world network, known as
14+
[greedy routing](https://en.wikipedia.org/wiki/Small-world_routing#Greedy_routing).
1715

1816
### Isotonic Regression
1917

20-
Freenet uses [isotonic regression](https://github.com/sanity/pav.rs), a method
21-
for estimating a monotonically increasing or decreasing function given a set of
22-
data, to predict the response time from a peer based on its ring distance from
23-
the target location of the request.
18+
Freenet uses [isotonic regression](https://github.com/sanity/pav.rs), a method for estimating a
19+
monotonically increasing or decreasing function given a set of data, to predict the response time
20+
from a peer based on its ring distance from the target location of the request.
2421

25-
This estimation is then adjusted by the average difference between the isotonic
26-
regression estimate and the actual response time from previous interactions with
27-
the peer. This process enables a form of adaptive routing that selects the peer
28-
with the lowest estimated response time.
22+
This estimation is then adjusted by the average difference between the isotonic regression estimate
23+
and the actual response time from previous interactions with the peer. This process enables a form
24+
of adaptive routing that selects the peer with the lowest estimated response time.
2925

3026
### Router Initialization and Event Handling
3127

32-
When a new
33-
[Router](https://github.com/freenet/freenet-core/blob/main/crates/core/src/router.rs)
34-
is created, it's initialized with a history of routing events. These events are
35-
processed to generate the initial state of the isotonic estimators. For example,
36-
failure outcomes and success durations are computed for each event in the
37-
history and used to initialize the respective estimators. The average transfer
38-
size is also computed from the history.
28+
When a new [Router](https://github.com/freenet/freenet-core/blob/main/crates/core/src/router.rs) is
29+
created, it's initialized with a history of routing events. These events are processed to generate
30+
the initial state of the isotonic estimators. For example, failure outcomes and success durations
31+
are computed for each event in the history and used to initialize the respective estimators. The
32+
average transfer size is also computed from the history.
3933

40-
The Router can add new events to its history, updating its estimators in the
41-
process. When a successful routing event occurs, the Router updates its response
42-
start time estimator, failure estimator, and transfer rate estimator based on
43-
the details of the event. If a failure occurs, only the failure estimator is
44-
updated.
34+
The Router can add new events to its history, updating its estimators in the process. When a
35+
successful routing event occurs, the Router updates its response start time estimator, failure
36+
estimator, and transfer rate estimator based on the details of the event. If a failure occurs, only
37+
the failure estimator is updated.
4538

4639
### Peer Selection
4740

48-
To select a peer for routing a request, the Router first checks whether it has
49-
sufficient historical data. If not, it selects the peer with the minimum
50-
distance to the contract location. If it does have sufficient data, it predicts
51-
the outcome of routing the request to each available peer and selects the one
52-
with the best predicted outcome.
41+
To select a peer for routing a request, the Router first checks whether it has sufficient historical
42+
data. If not, it selects the peer with the minimum distance to the contract location. If it does
43+
have sufficient data, it predicts the outcome of routing the request to each available peer and
44+
selects the one with the best predicted outcome.
5345

5446
### Outcome Prediction
5547

56-
To predict the outcome of routing a request to a specific peer, the Router uses
57-
its isotonic estimators to predict the time to the start of the response, the
58-
chance of failure, and the transfer rate. These predictions are used to compute
59-
an expected total time for the request, with the cost of a failure being assumed
60-
as a multiple of the cost of success. The peer with the lowest expected total
61-
time is selected for routing the request.
48+
To predict the outcome of routing a request to a specific peer, the Router uses its isotonic
49+
estimators to predict the time to the start of the response, the chance of failure, and the transfer
50+
rate. These predictions are used to compute an expected total time for the request, with the cost of
51+
a failure being assumed as a multiple of the cost of success. The peer with the lowest expected
52+
total time is selected for routing the request.

hugo-site/content/resources/manual/architecture/p2p-network.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,32 @@ draft: false
88

99
## Small-World Network
1010

11-
Freenet is structured as a decentralized peer-to-peer network, based on the idea of
12-
a [small-world network](https://en.wikipedia.org/wiki/Small-world_network). This
13-
network topology is scalable and efficient, allowing contract state to be found
14-
quickly and without any reliance on a central authority.
11+
Freenet is structured as a decentralized peer-to-peer network, based on the idea of a
12+
[small-world network](https://en.wikipedia.org/wiki/Small-world_network). This network topology is
13+
scalable and efficient, allowing contract state to be found quickly and without any reliance on a
14+
central authority.
1515

1616
![Small World Network](/p2p-network.svg)
1717

1818
## Freenet Peers
1919

20-
In Freenet, a "peer" is any computer running the [Freenet
21-
Core](https://github.com/freenet/freenet-core) software. The peers are organized
22-
in a ring-like structure, with each peer assigned a specific numerical value
23-
between 0.0 and 1.0, indicating its location in the network's topology. This
24-
location is derived from the peer's IP address.
20+
In Freenet, a "peer" is any computer running the
21+
[Freenet Core](https://github.com/freenet/freenet-core) software. The peers are organized in a
22+
ring-like structure, with each peer assigned a specific numerical value between 0.0 and 1.0,
23+
indicating its location in the network's topology. This location is derived from the peer's IP
24+
address.
2525

2626
## Establishing Neighbor Connections
2727

28-
Every Freenet peer, also referred to as a node, forms two-way connections with a
29-
set of other peers, termed "neighbors." These connections utilize the User
30-
Datagram Protocol (UDP) and can do [Firewall hole punching](<https://en.wikipedia.org/wiki/Hole_punching_(networking)>) when necessary. Peers manage their resource usage —
31-
bandwidth, memory, CPU, and storage — based on limits set by the user.
28+
Every Freenet peer, also referred to as a node, forms two-way connections with a set of other peers,
29+
termed "neighbors." These connections utilize the User Datagram Protocol (UDP) and can do
30+
[Firewall hole punching](<https://en.wikipedia.org/wiki/Hole_punching_(networking)>) when necessary.
31+
Peers manage their resource usage — bandwidth, memory, CPU, and storage — based on limits set by the
32+
user.
3233

3334
## Adaptive behavior
3435

35-
Peers keep track of their neighbor's performance and learn to prefer faster
36-
connections over time.
36+
Peers keep track of their neighbor's performance and learn to prefer faster connections over time.
3737

38-
Peers can also identify bad behavior by other peers like excess resource usage and
39-
will disconnect from them.
38+
Peers can also identify bad behavior by other peers like excess resource usage and will disconnect
39+
from them.

0 commit comments

Comments
 (0)