11 releases (7 breaking)
0.8.1 | Nov 19, 2023 |
---|---|
0.7.1 | Jul 27, 2023 |
0.7.0 | Mar 6, 2023 |
0.6.0 | Sep 7, 2022 |
0.1.0 | Jan 28, 2021 |
#83 in WebAssembly
217 downloads per month
Used in 2 crates
1MB
16K
SLoC
p2panda-rs
Docs | Releases | Contribute | Website
This library provides all tools required to write a client, node or even your
own protocol implementation for the p2panda
network. It is shipped both as
a Rust crate p2panda-rs
with WebAssembly bindings and a NPM package
p2panda-js
with TypeScript definitions running in NodeJS or any modern web
browser.
The core p2panda
specification
is fully functional but still under review so please be prepared for breaking API changes until we reachv1.0
. Currently no p2panda implementation has recieved a security audit.
Installation
cargo add p2panda-rs
Example
use p2panda_rs::entry::encode::encode_entry;
use p2panda_rs::entry::EntryBuilder;
use p2panda_rs::identity::KeyPair;
use p2panda_rs::operation::encode::encode_operation;
use p2panda_rs::operation::OperationBuilder;
// Id of the schema which describes the data we want to publish. This should
// already be known to the node we are publishing to.
pub const SCHEMA_ID: &str =
"profile_0020c65567ae37efea293e34a9c7d13f8f2bf23dbdc3b5c7b9ab46293111c48fc78b";
// Generate new Ed25519 key pair.
let key_pair = KeyPair::new();
// Add field data to "create" operation.
let operation = OperationBuilder::new(&SCHEMA_ID.parse()?)
.fields(&[("username", "panda".into())])
.build()?;
// Encode operation into bytes.
let encoded_operation = encode_operation(&operation)?;
// Create Bamboo entry (append-only log data type) with operation as payload.
let entry = EntryBuilder::new().sign(&encoded_operation, &key_pair)?;
// Encode entry into bytes.
let encoded_entry = encode_entry(&entry)?;
println!("{} {}", encoded_entry, encoded_operation);
Run this code from the examples
folder:
cargo run --example=create_operation
Development
You will need the following tools to start development:
# Run tests
cargo test
# Run WebAssembly tests
wasm-pack test --headless --firefox
License
GNU Affero General Public License v3.0 AGPL-3.0-or-later
Supported by
This project has received funding from the European Union’s Horizon 2020 research and innovation programme within the framework of the NGI-POINTER Project funded under grant agreement No 871528 and NGI-ASSURE No 957073
Dependencies
~8–18MB
~255K SLoC