Skip to content

notareum/sdk

Repository files navigation

Notareum SDK

Official SDK ecosystem for the Notareum Protocol — decentralized resource verification on-chain.

Language SDKs

SDK Package Language Status
notareum-ts-sdk @notareum/sdk (npm) TypeScript Active
notareum-py-sdk notareum (PyPI) Python ≥ 3.10 Active
notareum-rs-sdk notareum-sdk (crates.io) Rust Active

All three SDKs expose the same surface area across the Notareum protocol:

  • .nota file builder, signer, parser, and verifier
  • Resource registry (registerResource, quorum queries, status)
  • Verification engine (request, fulfill, validator attestation)
  • Validator staking (stake, unstake, rewards, slashing)
  • Governance via veNOTA (lock, vote, delegate)
  • Fee manager and access manager helpers

Quick Start

TypeScript

import { Notareum } from "@notareum/sdk";

const ntm = Notareum({
  provider,   // ethers v6 Provider
  signer,     // ethers v6 Signer (optional, needed for write ops)
  contracts: {
    notaToken: "0x...",
    veNota: "0x...",
    validatorStaking: "0x...",
    notaRegistry: "0x...",
    verificationEngine: "0x...",
    slashingManager: "0x...",
    feeManager: "0x...",
    accessManager: "0x...",
  },
});

const nota = await ntm.nota
  .create({ type: "address", chainId: 1, chainName: "ethereum", identifier: "0x..." })
  .sign(signer);

await ntm.registry.registerResource(0, 1n, "0x...", "0x" + "00".repeat(32));
await ntm.verification.request(resourceId, 0); // 0 = BASIC
await ntm.staking.stake(10_000n * 10n ** 18n);
await ntm.governance.lock(1_000n * 10n ** 18n, 365n * 24n * 3600n);

See notareum-ts-sdk/ for full documentation.

Python

from notareum import Notareum

ntm = Notareum(
    provider=w3,           # web3.py Web3 instance
    account=account,       # eth_account LocalAccount (for write ops)
    contracts={
        "nota_token": "0x...",
        "ve_nota": "0x...",
        "validator_staking": "0x...",
        "nota_registry": "0x...",
        "verification_engine": "0x...",
        "slashing_manager": "0x...",
        "fee_manager": "0x...",
        "access_manager": "0x...",
    },
)

nota = ntm.nota.create(
    type="address", chain_id=1, chain_name="ethereum", identifier="0x..."
).sign(account)

ntm.registry.register_resource(0, 1, "0x...", b"\x00" * 32)
ntm.verification.request(resource_id, 0)
ntm.staking.stake(10_000 * 10**18)

See notareum-py-sdk/ for full documentation.

Rust

use notareum_sdk::{Notareum, Contracts};

let ntm = Notareum::new(provider, signer, Contracts {
    nota_token: "0x...".parse()?,
    ve_nota: "0x...".parse()?,
    validator_staking: "0x...".parse()?,
    nota_registry: "0x...".parse()?,
    verification_engine: "0x...".parse()?,
    slashing_manager: "0x...".parse()?,
    fee_manager: "0x...".parse()?,
    access_manager: "0x...".parse()?,
})?;

ntm.registry().register_resource(0, 1u64.into(), addr, [0u8; 32]).await?;
ntm.verification().request(resource_id, 0).await?;
ntm.staking().stake(U256::from(10_000u64) * U256::exp10(18)).await?;

See notareum-rs-sdk/ for full documentation.

Architecture

Each language SDK is a standalone repository maintained under the notareum GitHub org. This umbrella repository links them as git submodules for cross-language browsing and coordinated releases.

Shared design principles across SDKs:

  • Parity. Every SDK implements the same client modules (nota, registry, verification, staking, governance, fee).
  • ABI-driven. Contract bindings are generated from the canonical ABIs in each SDK's abi/ directory.
  • Deterministic .nota files. Hashing, signing, and serialization are bit-for-bit compatible across TypeScript, Python, and Rust.

License

MIT. See individual SDK repositories for details.

About

Official Notareum Developer SDKs for all Languages and Frameworks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors