mirror of
https://github.com/fluencelabs/trust-graph
synced 2024-12-04 07:10:21 +00:00
example: improved (#46)
This commit is contained in:
parent
edc7dc404f
commit
2a5e324dd5
@ -1,10 +1,44 @@
|
||||
## Description
|
||||
This example shows how to use Trust Graph to label peers. There are some `trusted_computation` which can only be executed
|
||||
on labeled peer. The label is determined by the presence of certificate from `%init_peer_id` to this peer.
|
||||
This example shows how to use Trust Graph for code execution only on trusted peers. There are some `trusted_computation` which can only be performed on a trusted peer. The label is determined by the presence of the certificate from `INIT_PEER_ID` to this peer. We use peer id from [`example_secret_key.ed25519`](../example_secret_key.ed25519) as `INIT_PEER_ID` since every node bundled with the certificate issued to this key, it should be used only for test purposes.
|
||||
|
||||
## Run example on network
|
||||
|
||||
1. Run `npm i`
|
||||
2. Run `npm run start`
|
||||
|
||||
## Run example locally
|
||||
|
||||
1. Go to `local-network`
|
||||
2. Run `docker compose up -d` to start Fluence node
|
||||
3. Go back to `../example`
|
||||
4. Run `npm i`
|
||||
5. Run `npm run start`
|
||||
3. It takes some time depending on your machine for node to start and builtin services deployed. Wait for this log line: `[2022-07-06T11:33:50.782054Z INFO particle_node] Fluence has been successfully started.`
|
||||
4. Go back to `../example`
|
||||
5. Run `npm i`
|
||||
6. Run `npm run start local`
|
||||
|
||||
## Expected output
|
||||
|
||||
After successful execution you will get this result:
|
||||
```
|
||||
In this example we try to execute some trusted computations based on trusts
|
||||
📘 Will connect to testNet
|
||||
📗 created a fluence peer 12D3KooWD2vAZva1u3TQgoxebBUBsaGMNawKjVkp57M6UcwNwXNv with relay 12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9
|
||||
|
||||
📕 Trusted computation on node 12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9 failed, error: there is no certs for this peer
|
||||
📕 Trusted computation on node 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz failed, error: there is no certs for this peer
|
||||
📕 Trusted computation on node 12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er failed, error: there is no certs for this peer
|
||||
|
||||
🌀 Issue trust to nodeB 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz and nodeC: 12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er
|
||||
Trust issued for 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz successfully added
|
||||
Trust issued for 12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er successfully added
|
||||
|
||||
📕 Trusted computation on node 12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9 failed, error: there is no certs for this peer
|
||||
📗 Trusted computation on node 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz successful, result is 5
|
||||
📗 Trusted computation on node 12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er successful, result is 5
|
||||
|
||||
🚫 Revoke trust to nodeB
|
||||
Trust issued for 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz revoked
|
||||
|
||||
📕 Trusted computation on node 12D3KooWEXNUbCXooUwHrHBbrmjsrpHXoEphPwbjQXEGyzbqKnE9 failed, error: there is no certs for this peer
|
||||
📕 Trusted computation on node 12D3KooWMhVpgfQxBLkQkJed8VFNvgN4iE6MD7xCybb1ZYWW2Gtz failed, error: there is no certs for this peer
|
||||
📗 Trusted computation on node 12D3KooWHk9BjDQBUqnavciRPhAYFvqKBe4ZiPPvde7vDaqgn5er successful, result is 5
|
||||
```
|
@ -39,22 +39,14 @@ let local: Node[] = [
|
||||
},
|
||||
];
|
||||
|
||||
async function revoke_all(relay: string, revoked_by: string) {
|
||||
for (var node of local) {
|
||||
async function revoke_all(relay: string, revoked_by: string, nodes: Node[]) {
|
||||
for (var node of nodes) {
|
||||
let error = await tg.revoke(relay, revoked_by, node.peerId);
|
||||
if (error !== null) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
async function add_root(relay: string, peer_id: string) {
|
||||
let current_time = await tg.timestamp_sec();
|
||||
let far_future = current_time + 9999999;
|
||||
let error = await tg.add_root_trust(relay, peer_id, 2, far_future);
|
||||
if (error !== null) {
|
||||
console.log(error)
|
||||
}
|
||||
}
|
||||
|
||||
async function add_new_trust_checked(relay: string, issuer: string, issued_for_peer_id: string, expires_at_sec: number) {
|
||||
let error = await tg.add_trust(relay, issuer, issued_for_peer_id, expires_at_sec);
|
||||
@ -84,14 +76,13 @@ async function exec_trusted_computation(node: string) {
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
console.log("In this example we try to execute some trusted computations based on trusts");
|
||||
console.log("📘 Will connect to local nodes");
|
||||
// key from local-network/builtins_secret_key.ed25519 to connect as builtins owner
|
||||
let sk = bs58.decode("5FwE32bDcphFzuMca7Y2qW1gdR64fTBYoRNvD4MLE1hecDGhCMQGKn8aseMr5wRo4Xo2CRFdrEAawUNLYkgQD78K").slice(0, 32); // first 32 bytes - secret key, second - public key
|
||||
async function main(nodes: Node[]) {
|
||||
// example_secret_key.ed25519
|
||||
let sk = bs58.decode("E5ay3731i4HN8XjJozouV92RDMGAn3qSnb9dKSnujiWv");
|
||||
|
||||
let builtins_keypair = await KeyPair.fromEd25519SK(sk);
|
||||
|
||||
let relay = local[0];
|
||||
let relay = nodes[0];
|
||||
await Fluence.start({ connectTo: relay, KeyPair: builtins_keypair });
|
||||
console.log(
|
||||
"📗 created a fluence peer %s with relay %s",
|
||||
@ -105,41 +96,55 @@ async function main() {
|
||||
let far_future = current_time + 9999999;
|
||||
|
||||
// clear all trusts from our peer id on relay
|
||||
await revoke_all(relay.peerId, local_peer_id);
|
||||
await revoke_all(relay.peerId, local_peer_id, nodes.slice(0, 3));
|
||||
|
||||
// wait to be sure that last revocation will be older than future trusts at least on 1 second (because timestamp in secs)
|
||||
await new Promise(f => setTimeout(f, 1000));
|
||||
|
||||
// set our peer id as root to our relay
|
||||
await add_root(relay.peerId, local_peer_id);
|
||||
|
||||
let nodeA = local[0].peerId
|
||||
let nodeB = local[1].peerId
|
||||
let nodeC = local[2].peerId
|
||||
let nodeA = nodes[0].peerId
|
||||
let nodeB = nodes[1].peerId
|
||||
let nodeC = nodes[2].peerId
|
||||
|
||||
console.log();
|
||||
// try to exec computation on every node, will fail
|
||||
await exec_trusted_computation(nodeA); // fail
|
||||
await exec_trusted_computation(nodeB); // fail
|
||||
await exec_trusted_computation(nodeC); // fail
|
||||
|
||||
console.log("🌀 Issue trust to nodeB: %s", nodeB);
|
||||
console.log();
|
||||
console.log("🌀 Issue trust to nodeB %s and nodeC: %s", nodeB, nodeC);
|
||||
await add_new_trust_checked(relay.peerId, local_peer_id, nodeB, far_future);
|
||||
await add_new_trust_checked(relay.peerId, local_peer_id, nodeC, far_future);
|
||||
|
||||
console.log();
|
||||
await exec_trusted_computation(nodeA); // fail
|
||||
await exec_trusted_computation(nodeB); // success
|
||||
await exec_trusted_computation(nodeC); // fail
|
||||
await exec_trusted_computation(nodeC); // success
|
||||
console.log();
|
||||
|
||||
await new Promise(f => setTimeout(f, 1000));
|
||||
console.log("🚫 Revoke trust to nodeB");
|
||||
await revoke_checked(relay.peerId, local_peer_id, nodeB);
|
||||
|
||||
console.log();
|
||||
await exec_trusted_computation(nodeA); // fail
|
||||
await exec_trusted_computation(nodeB); // fail
|
||||
await exec_trusted_computation(nodeC); // fail
|
||||
await exec_trusted_computation(nodeC); // success
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("In this example we try to execute some trusted computations based on trusts");
|
||||
let args = process.argv.slice(2);
|
||||
var environment: Node[];
|
||||
if (args.length >= 1 && args[0] == "local") {
|
||||
environment = local;
|
||||
console.log("📘 Will connect to local nodes");
|
||||
} else {
|
||||
environment = testNet;
|
||||
console.log("📘 Will connect to testNet");
|
||||
}
|
||||
|
||||
main()
|
||||
main(environment)
|
||||
.then(() => process.exit(0))
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
|
Loading…
Reference in New Issue
Block a user