Crates.io | p2panda-rs |
lib.rs | p2panda-rs |
version | 0.8.1 |
source | src |
created_at | 2021-01-28 23:37:23.871807 |
updated_at | 2023-11-19 18:27:11.978942 |
description | All the things a panda needs |
homepage | |
repository | https://github.com/p2panda/p2panda |
max_upload_size | |
id | 347812 |
size | 939,613 |
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.
cargo add p2panda-rs
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
You will need the following tools to start development:
# Run tests
cargo test
# Run WebAssembly tests
wasm-pack test --headless --firefox
GNU Affero General Public License v3.0 AGPL-3.0-or-later
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