Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: Enable libp2p to run via wasm32-unknown-unknown in the browser #2320

Merged
merged 24 commits into from Oct 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0fdb20e
remove wasm-timer depency (pending gossipsub)
wngr Aug 27, 2021
92b6bfc
make ws transport work with SharedArrayBuffer
wngr Aug 27, 2021
85970e7
add rand
wngr Sep 22, 2021
a3b5497
remove wasm-timer from rendezvous
wngr Sep 22, 2021
e57de9b
use upstream instant
wngr Sep 23, 2021
c3abeb3
Merge remote-tracking branch 'origin/master' into wasm-support
wngr Sep 27, 2021
c8e2b0e
protocols/gossipsup: get rid of `wasm-timer`
wngr Sep 27, 2021
c82735f
ci: add wasm32-unknown-unknown build
wngr Sep 27, 2021
9a3494e
protocols/rendezvous: replace usage of std::time::instant with libp2p…
wngr Sep 30, 2021
0aab228
protocols/gossipsub: replace leftovers
wngr Oct 1, 2021
2abcebd
Merge remote-tracking branch 'origin/master' into wasm-support
wngr Oct 10, 2021
eeb366a
PR comments - first round
wngr Oct 10, 2021
4e87d01
fix ci
wngr Oct 10, 2021
a25a080
Merge remote-tracking branch 'origin/master' into wasm-support
wngr Oct 16, 2021
bbd2329
dont re-export Instant in core
wngr Oct 16, 2021
76bdd42
replace SystemTime
wngr Oct 16, 2021
bfc7d7f
new instant release
wngr Oct 18, 2021
4ebe26e
Merge branch 'master' into wasm-support
wngr Oct 18, 2021
d792ce2
pr comments
wngr Oct 19, 2021
cc4321d
Merge branch 'master' into wasm-support
wngr Oct 21, 2021
075f4fc
Merge remote-tracking branch 'origin/master' into wasm-support
wngr Oct 22, 2021
19e4755
Merge branch 'wasm-support' of github.com:wngr/rust-libp2p into wasm-…
wngr Oct 22, 2021
0ee5dba
*: Bump versions and add changelog entries
mxinden Oct 30, 2021
8eca4f8
Merge branch 'libp2p/master' into wasm-support
mxinden Oct 30, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Expand Up @@ -41,6 +41,9 @@ jobs:
wasm32-unknown-emscripten,
wasm32-wasi
]
include:
- toolchain: wasm32-unknown-unknown
args: "--features wasm-bindgen"
container:
image: rust
env:
Expand Down Expand Up @@ -76,7 +79,7 @@ jobs:
- name: Build on ${{ matrix.toolchain }}
# TODO: also run `cargo test`
# TODO: ideally we would build `--workspace`, but not all crates compile for WASM
run: cargo build --target=${{ matrix.toolchain }}
run: cargo build --target=${{ matrix.toolchain }} ${{ matrix.args }}

check-rustdoc-links:
name: Check rustdoc intra-doc links
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -46,6 +46,7 @@

- Update individual crates.
- `libp2p-websocket`
- Forward `wasm-bindgen` feature to `futures-timer`, `instant`, `parking_lot`, `getrandom/js` and `rand/wasm-bindgen`.

## Version 0.40.0-rc.3 [2021-10-27]

Expand Down
9 changes: 6 additions & 3 deletions Cargo.toml
Expand Up @@ -53,7 +53,7 @@ rendezvous = ["libp2p-rendezvous"]
tcp-async-io = ["libp2p-tcp", "libp2p-tcp/async-io"]
tcp-tokio = ["libp2p-tcp", "libp2p-tcp/tokio"]
uds = ["libp2p-uds"]
wasm-bindgen = ["parking_lot/wasm-bindgen"]
wasm-bindgen = ["futures-timer/wasm-bindgen", "instant/wasm-bindgen", "parking_lot/wasm-bindgen", "getrandom/js", "rand/wasm-bindgen"]
wasm-ext = ["libp2p-wasm-ext"]
wasm-ext-websocket = ["wasm-ext", "libp2p-wasm-ext/websocket"]
websocket = ["libp2p-websocket"]
Expand All @@ -67,6 +67,9 @@ all-features = true
atomic = "0.5.0"
bytes = "1"
futures = "0.3.1"
futures-timer = "3.0.2" # Explicit dependency to be used in `wasm-bindgen` feature
getrandom = "0.2.3" # Explicit dependency to be used in `wasm-bindgen` feature
instant = "0.1.11" # Explicit dependency to be used in `wasm-bindgen` feature
lazy_static = "1.2"
libp2p-core = { version = "0.30.0-rc.2", path = "core", default-features = false }
libp2p-floodsub = { version = "0.31.0-rc.1", path = "protocols/floodsub", optional = true }
Expand All @@ -88,10 +91,10 @@ libp2p-uds = { version = "0.30.0-rc.1", path = "transports/uds", optional = true
libp2p-wasm-ext = { version = "0.30.0-rc.1", path = "transports/wasm-ext", default-features = false, optional = true }
libp2p-yamux = { version = "0.34.0-rc.1", path = "muxers/yamux", optional = true }
multiaddr = { version = "0.13.0-rc.1" }
parking_lot = "0.11.0"
parking_lot = "0.11.2" # Explicit dependency to be used in `wasm-bindgen` feature
pin-project = "1.0.0"
rand = "0.7.3" # Explicit dependency to be used in `wasm-bindgen` feature
smallvec = "1.6.1"
wasm-timer = "0.2.4"

[target.'cfg(not(any(target_os = "emscripten", target_os = "wasi", target_os = "unknown")))'.dependencies]
libp2p-deflate = { version = "0.30.0-rc.1", path = "transports/deflate", optional = true }
Expand Down
6 changes: 6 additions & 0 deletions core/CHANGELOG.md
@@ -1,3 +1,9 @@
# 0.30.1 [unreleased]

- Use `instant` instead of `wasm-timer` (see [PR 2245]).

[PR 2245]: https://github.com/libp2p/rust-libp2p/pull/2245

# 0.30.0-rc.2 [2021-10-27]

- Add `ConnectionLimit::with_max_established` (see [PR 2137]).
Expand Down
4 changes: 2 additions & 2 deletions core/Cargo.toml
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-core"
edition = "2018"
description = "Core traits and structs of libp2p"
version = "0.30.0-rc.2"
version = "0.30.1"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -17,6 +17,7 @@ either = "1.5"
fnv = "1.0"
futures = { version = "0.3.1", features = ["executor", "thread-pool"] }
futures-timer = "3"
instant = "0.1.11"
lazy_static = "1.2"
libsecp256k1 = { version = "0.7.0", optional = true }
log = "0.4"
Expand Down Expand Up @@ -48,7 +49,6 @@ libp2p-tcp = { path = "../transports/tcp" }
multihash = { version = "0.14", default-features = false, features = ["arb"] }
quickcheck = "0.9.0"
rand07 = { package = "rand", version = "0.7" }
wasm-timer = "0.2"

[build-dependencies]
prost-build = "0.9"
Expand Down
2 changes: 1 addition & 1 deletion core/src/peer_record.rs
Expand Up @@ -2,9 +2,9 @@ use crate::identity::error::SigningError;
use crate::identity::Keypair;
use crate::signed_envelope::SignedEnvelope;
use crate::{peer_record_proto, signed_envelope, Multiaddr, PeerId};
use instant::SystemTime;
use std::convert::TryInto;
use std::fmt;
use std::time::SystemTime;

const PAYLOAD_TYPE: &str = "/libp2p/routing-state-record";
const DOMAIN_SEP: &str = "libp2p-routing-state";
Expand Down
6 changes: 6 additions & 0 deletions protocols/gossipsub/CHANGELOG.md
@@ -1,3 +1,9 @@
# 0.33.1 [unreleased]

- Use `instant` and `futures-timer` instead of `wasm-timer` (see [PR 2245]).

[PR 2245]: https://github.com/libp2p/rust-libp2p/pull/2245

# 0.33.0-rc.1 [2021-10-15]

- Add an event to register peers that do not support the gossipsub protocol
Expand Down
6 changes: 4 additions & 2 deletions protocols/gossipsub/Cargo.toml
Expand Up @@ -2,7 +2,7 @@
name = "libp2p-gossipsub"
edition = "2018"
description = "Gossipsub protocol for libp2p"
version = "0.33.0-rc.1"
version = "0.33.1"
authors = ["Age Manning <Age@AgeManning.com>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -18,7 +18,6 @@ fnv = "1.0.7"
futures = "0.3.5"
rand = "0.7.3"
asynchronous-codec = "0.6"
wasm-timer = "0.2.4"
unsigned-varint = { version = "0.7.0", features = ["asynchronous_codec"] }
log = "0.4.11"
sha2 = "0.9.1"
Expand All @@ -27,6 +26,9 @@ smallvec = "1.6.1"
prost = "0.9"
hex_fmt = "0.3.0"
regex = "1.4.0"
futures-timer = "3.0.2"
pin-project = "1.0.8"
instant = "0.1.11"

[dev-dependencies]
async-std = "1.6.3"
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/backoff.rs
Expand Up @@ -20,13 +20,13 @@

//! Data structure for efficiently storing known back-off's when pruning peers.
use crate::topic::TopicHash;
use instant::Instant;
use libp2p_core::PeerId;
use std::collections::{
hash_map::{Entry, HashMap},
HashSet,
};
use std::time::Duration;
use wasm_timer::Instant;

#[derive(Copy, Clone)]
struct HeartbeatIndex(usize);
Expand Down
8 changes: 4 additions & 4 deletions protocols/gossipsub/src/behaviour.rs
Expand Up @@ -34,8 +34,8 @@ use futures::StreamExt;
use log::{debug, error, trace, warn};
use prost::Message;
use rand::{seq::SliceRandom, thread_rng};
use wasm_timer::{Instant, Interval};

use instant::Instant;
use libp2p_core::{
connection::ConnectionId, identity::Keypair, multiaddr::Protocol::Ip4,
multiaddr::Protocol::Ip6, ConnectedPoint, Multiaddr, PeerId,
Expand All @@ -45,7 +45,6 @@ use libp2p_swarm::{
NotifyHandler, PollParameters,
};

use crate::backoff::BackoffStorage;
use crate::config::{GossipsubConfig, ValidationMode};
use crate::error::{PublishError, SubscriptionError, ValidationError};
use crate::gossip_promises::GossipPromises;
Expand All @@ -62,6 +61,7 @@ use crate::types::{
GossipsubSubscriptionAction, MessageAcceptance, MessageId, PeerInfo, RawGossipsubMessage,
};
use crate::types::{GossipsubRpc, PeerConnections, PeerKind};
use crate::{backoff::BackoffStorage, interval::Interval};
use crate::{rpc_proto, TopicScoreParams};
use std::{cmp::Ordering::Equal, fmt::Debug};

Expand Down Expand Up @@ -406,8 +406,8 @@ where
config.backoff_slack(),
),
mcache: MessageCache::new(config.history_gossip(), config.history_length()),
heartbeat: Interval::new_at(
Instant::now() + config.heartbeat_initial_delay(),
heartbeat: Interval::new_initial(
config.heartbeat_initial_delay(),
config.heartbeat_interval(),
),
heartbeat_ticks: 0,
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/gossip_promises.rs
Expand Up @@ -21,12 +21,12 @@
use crate::error::ValidationError;
use crate::peer_score::RejectReason;
use crate::MessageId;
use instant::Instant;
use libp2p_core::PeerId;
use log::debug;
use rand::seq::SliceRandom;
use rand::thread_rng;
use std::collections::HashMap;
use wasm_timer::Instant;

/// Tracks recently sent `IWANT` messages and checks if peers respond to them
/// for each `IWANT` message we track one random requested message id.
Expand Down
2 changes: 1 addition & 1 deletion protocols/gossipsub/src/handler.rs
Expand Up @@ -25,6 +25,7 @@ use crate::types::{GossipsubRpc, PeerKind, RawGossipsubMessage};
use asynchronous_codec::Framed;
use futures::prelude::*;
use futures::StreamExt;
use instant::Instant;
use libp2p_core::upgrade::{InboundUpgrade, NegotiationError, OutboundUpgrade, UpgradeError};
use libp2p_swarm::protocols_handler::{
KeepAlive, ProtocolsHandler, ProtocolsHandlerEvent, ProtocolsHandlerUpgrErr, SubstreamProtocol,
Expand All @@ -39,7 +40,6 @@ use std::{
task::{Context, Poll},
time::Duration,
};
use wasm_timer::Instant;

/// The initial time (in seconds) we set the keep alive for protocol negotiations to occur.
const INITIAL_KEEP_ALIVE: u64 = 30;
Expand Down