Go to file
2022-07-08 17:40:22 +04:00
.cargo ci: remove circle, update gh, add lints; remove warnings (#43) 2022-06-30 16:41:37 +04:00
.github ci: fix publish (#45) 2022-07-06 14:38:55 +04:00
admin aqua: update sig service (#39) 2022-02-05 03:17:07 +03:00
aqua fix bug get_all_certs_from, update example (#44) 2022-07-06 14:24:33 +04:00
builtin-package High-level Aqua API (#35) 2022-02-04 18:45:37 +03:00
example example: improved (#46) 2022-07-08 17:40:22 +04:00
keypair ci: remove circle, update gh, add lints; remove warnings (#43) 2022-06-30 16:41:37 +04:00
local-network High-level Aqua API (#35) 2022-02-04 18:45:37 +03:00
service fix bug get_all_certs_from, update example (#44) 2022-07-06 14:24:33 +04:00
src ci: remove circle, update gh, add lints; remove warnings (#43) 2022-06-30 16:41:37 +04:00
.gitignore Remove serde version lock (#15) 2022-01-13 19:37:23 +03:00
Cargo.lock Add memory leak temporary mitigation (#42) 2022-06-28 19:40:19 +04:00
Cargo.toml fluence-keypair 0.6.0 2022-01-28 18:18:22 +03:00
example_secret_key.ed25519 High-level Aqua API (#35) 2022-02-04 18:45:37 +03:00
README.md High-level Aqua API (#35) 2022-02-04 18:45:37 +03:00
rust-toolchain.toml libp2p-core 0.31.0 (from crates.io) (#37) 2022-01-28 16:15:20 +03:00

Trust Graph

Trust Graph is network-wide peer relationship layer. It's designed to be used to prioritize resources and control permissions in open networks. Being a decentralized graph of relationships, basically a Web of Trust, Trust Graph is distributed among all network peers.

Specifically, Trust Graph is used to prioritize connections from known peers to counteract Sybil attacks while still keeping network open by reserving resources for unknown peers.

At the same time, Trust Graph can be used at the application level in various ways such as prioritization of service execution on authorized peers or to define an interconnected subnetwork among peers of a single protocol.

How to Use it in TypeScript

See example:

API

High-level API is defined in the trust-graph-api.aqua module.

Directory structure

  • src is the main project with all trust graph logic

  • keypair directory is an abstracted cryptographical layer (key pairs, public keys, signatures, etc.)

  • service is a package that provides marine API and could be compiled to a Wasm file. It is uses SQLite as storage

  • example is a js script that shows how to use Trust Graph to label peers

  • builtin-package contains blueprint, configs and scripts for generation builtin package locally or via CI

  • admin is a js script used to generate builtin-package/on_start.json which contains certificates for Fluence Labs nodes

Learn Aqua

How to use in Aqua

import "@fluencelabs/trust-graph/trust-graph-api.aqua"
import "@fluencelabs/trust-graph/trust-graph.aqua"

func my_function(peer_id: string) -> u32:
    on HOST_PEER_ID:
        result <- get_weight(peer_id)
    <- result

How to use is js

  1. Add the following to your dependencies

    • @fluencelabs/trust-graph
    • @fluencelabs/aqua
    • @fluencelabs/aqua-lib
    • @fluencelabs/fluence
    • @fluencelabs/fluence-network-environment
  2. Import dependencies

    import * as tg from "./generated/export";
    import { Fluence, KeyPair } from "@fluencelabs/fluence";
    import { krasnodar, Node } from "@fluencelabs/fluence-network-environment";
    
  3. Create client (specify keypair if you are node owner link)

    await Fluence.start({ connectTo: relay /*, KeyPair: builtins_keypair*/});
    
  4. Add root and issue root trust.

    let peer_id = Fluence.getStatus().peerId;
    let relay = Fluence.getStatus().relayPeerId;
    assert(peer_id !== null);
    assert(relay !== null);
    let max_chain_len = 2;
    let far_future = tg.timestamp_sec() + 9999999999;
    let error = await tg.add_root_trust(relay, peer_id, max_chain_len, far_future);
    if (error !== null) {
     console.log(error);
    }
    
  5. For now, trusts/revocations can only be signed with the client's private key. Keypair specification will be available soon.

    // issue signed trust
    let error = await tg.issue_trust(relay, peer_id, issued_for_peer_id, expires_at_sec);
    if (error !== null) {
     console.log(error);
    }