From fbc6aca61bb1f2a54c786c7f8a57bd44be1b2bbf Mon Sep 17 00:00:00 2001 From: Alexey Proshutinskiy Date: Wed, 26 Jan 2022 16:34:55 +0300 Subject: [PATCH] pr_fixes --- .github/workflows/release.yml | 2 +- README.md | 25 ++++++++++++++++-- admin/index.ts | 2 +- aqua/trust-graph-api.aqua | 50 ++++++++++++----------------------- builtin-package/on_start.json | 2 +- 5 files changed, 43 insertions(+), 38 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7cdecd4..436b8e1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -141,7 +141,7 @@ jobs: with: workflow: update_service repo: fluencelabs/node-distro - ref: 'main' + ref: 'tg-hl-api' token: ${{ secrets.PERSONAL_TOKEN }} inputs: '{ "name": "trust-graph", diff --git a/README.md b/README.md index 4960f24..079f8e6 100644 --- a/README.md +++ b/README.md @@ -62,5 +62,26 @@ func my_function(peer_id: string) -> u32: import { Fluence, KeyPair } from "@fluencelabs/fluence"; import { krasnodar, Node } from "@fluencelabs/fluence-network-environment"; ``` -3. Add root and issue root trust. -4. For now, trusts/revocations can only be signed by client's private key. \ No newline at end of file +3. Create client (specify keypair if you are node owner +[link](https://github.com/fluencelabs/node-distro/blob/main/fluence/Config.default.toml#L9)) + + ```typescript + await Fluence.start({ connectTo: relay /*, KeyPair: builtins_keypair*/}); + ``` +4. Add root and issue root trust. + ```typescript + 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); + assert(error == null) + ``` +5. For now, trusts/revocations can only be signed with the client's private key. + Keypair specification will be available soon. + ```typescript + // issue signed trust + let error = await tg.issue_trust(relay, peer_id, issued_for_peer_id, expires_at_sec); + ``` diff --git a/admin/index.ts b/admin/index.ts index 4246b3f..6f8749f 100644 --- a/admin/index.ts +++ b/admin/index.ts @@ -69,7 +69,7 @@ async function main(environment: Node[]) { common_chain.push(await issue_trust_helper(node, root_kp, root_kp.Libp2pPeerId.toB58String(), issuer_kp.Libp2pPeerId.toB58String(), expires_at, cur_time)); // from root to example let trust = await issue_trust_helper(node, root_kp, root_kp.Libp2pPeerId.toB58String(), example_kp.Libp2pPeerId.toB58String(), expires_at, cur_time); - let cert = {chain: [...common_chain, trust]}; + let cert = {chain: [common_chain[0], trust]}; certificates.push(cert); for (let i = 0; i < krasnodar.length; i++) { diff --git a/aqua/trust-graph-api.aqua b/aqua/trust-graph-api.aqua index fbcfbd1..d653c49 100644 --- a/aqua/trust-graph-api.aqua +++ b/aqua/trust-graph-api.aqua @@ -13,9 +13,9 @@ func set_root(peer_id: PeerId, max_chain_len: u32) -> SetRootResult: result <- TrustGraph.set_root(peer_id, max_chain_len) <- result --- Create and sign trust with private key from 'sig_id' service --- If `sig_id` is nil, default Sig service will be used with %init_peer_id% private key -func issue_trust(issued_for: PeerId, expires_at_sec: u64, sig_id: ?string) -> ?Trust, ?Error: +-- Create and sign trust +-- If `issuer` is not %init_peer_id%, Sig service with `issuer` peer id as service id should be defined +func issue_trust(issuer: PeerId, issued_for: PeerId, expires_at_sec: u64) -> ?Trust, ?Error: on HOST_PEER_ID: issued_at_sec <- Peer.timestamp_sec() bytes <- TrustGraph.get_trust_bytes(issued_for, expires_at_sec, issued_at_sec) @@ -23,13 +23,11 @@ func issue_trust(issued_for: PeerId, expires_at_sec: u64, sig_id: ?string) -> ?T result: ?Trust error: ?string if bytes.success: - sig_service: ?string - if sig_id != nil: - sig_service <<- sig_id! + if issuer != %init_peer_id%: + Sig issuer else: - sig_service <<- "sig" + Sig "sig" - Sig sig_service! signature <- Sig.sign(bytes.result) on HOST_PEER_ID: @@ -52,13 +50,9 @@ func import_trust(trust: Trust, issuer: PeerId) -> ?Error: <- error -- Issue trust and add to TG instance on `node` --- If `issuer` != %init_peer_id%, Sig service should be registered with issuer's peer id as a service id. +-- If `issuer` is not %init_peer_id%, Sig service with `issuer` peer id as service id should be defined func add_trust(node: PeerId, issuer: PeerId, issued_for: PeerId, expires_at_sec: u64) -> ?Error: - sig_service: ?string - if issuer != %init_peer_id%: - sig_service <<- issuer - - trust, issue_error <- issue_trust(issued_for, expires_at_sec, sig_service) + trust, issue_error <- issue_trust(issuer, issued_for, expires_at_sec) error: *?Error if trust == nil: @@ -70,13 +64,9 @@ func add_trust(node: PeerId, issuer: PeerId, issued_for: PeerId, expires_at_sec: <- error! -- Set `peer_id` as a root and add self-signed trust to TG instance on `node` --- If `peer_id` != %init_peer_id%, Sig service should be registered with this peer id as a service id. +-- If `peer_id` is not %init_peer_id%, Sig service with `peer_id` as service id should be defined func add_root_trust(node: PeerId, peer_id: PeerId, max_chain_len: u32, expires_at_sec: u64) -> ?Error: - sig_service: ?string - if peer_id != %init_peer_id%: - sig_service <<- peer_id - - trust, issue_error <- issue_trust(peer_id, expires_at_sec, sig_service) + trust, issue_error <- issue_trust(peer_id, peer_id, expires_at_sec) error: *?Error if trust == nil: @@ -114,8 +104,8 @@ func get_weight_from(peer_id: PeerId, issuer: PeerId) -> WeightResult: <- result -- Create revocation signed by %init_peer_id% --- If `sig_id` is nil, default Sig service will be used with %init_peer_id% private key -func issue_revocation(revoked_by: PeerId, revoked: PeerId, sig_id: ?string) -> ?Revocation, ?Error: +-- If `revoked_by` is not %init_peer_id%, Sig service with `revoked_by` peer id as service id should be defined +func issue_revocation(revoked_by: PeerId, revoked: PeerId) -> ?Revocation, ?Error: on HOST_PEER_ID: issued_at_sec <- Peer.timestamp_sec() bytes <- TrustGraph.get_revocation_bytes(revoked, issued_at_sec) @@ -123,13 +113,11 @@ func issue_revocation(revoked_by: PeerId, revoked: PeerId, sig_id: ?string) -> ? result: ?Revocation error: ?string if bytes.success: - sig_service: ?string - if sig_id != nil: - sig_service <<- sig_id! + if revoked_by != %init_peer_id%: + Sig revoked_by else: - sig_service <<- "sig" + Sig "sig" - Sig sig_service! signature <- Sig.sign(bytes.result) on HOST_PEER_ID: @@ -154,13 +142,9 @@ func import_revocation(revocation: Revocation) -> ?Error: -- Revoke all certificates on `node` TG instance -- which contain path from %init_peer_id% to `revoked_peer_id` --- If `revoked_by` != %init_peer_id%, Sig service should be registered with this peer id as a service id. +-- If `revoked_by` is not %init_peer_id%, Sig service with `revoked_by` peer id as service id should be defined func revoke(node: PeerId, revoked_by: PeerId, revoked: PeerId) -> ?Error: - sig_service: ?string - if revoked_by != %init_peer_id%: - sig_service <<- revoked_by - - revocation, issue_error <- issue_revocation(revoked_by, revoked, sig_service) + revocation, issue_error <- issue_revocation(revoked_by, revoked) error: *?string if revocation == nil: diff --git a/builtin-package/on_start.json b/builtin-package/on_start.json index 39abc25..2d6d658 100644 --- a/builtin-package/on_start.json +++ b/builtin-package/on_start.json @@ -1 +1 @@ -{"certs":[{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWD2vAZva1u3TQgoxebBUBsaGMNawKjVkp57M6UcwNwXNv","sig_type":"ed25519","signature":"3h8cYGTwU1KbuvbfrLz1TNjZb7Cm2F7AD9yHnLURqR53iWVt6HuJeovb4SvfTYVZaVjX56bPX1cpUMLGsXpmBn3A"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e","sig_type":"ed25519","signature":"5PK6noje8G2uv13hL2JeGnF2T2qTg2M2orbXH1pS1vHEoMRHgJEPYVnUc86o2MbQydjwpPg14eVHucrWMz3bJtjD"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWR4cv1a8tv7pps4HH6wePNaK6gf1Hww5wcCMzeWxyNw51","sig_type":"ed25519","signature":"3ULLd5281tEgeoDPfEyL1cDupo8HCtnf4Pd1FpGRoFhJeohVQhYeQzDpQPZksLoeZKkZv2s3sdpeQfJP8SQHCyZK"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWKnEqMfYo9zvfHmqTLpLdiHXPe4SVqUWcWHDJdFGrSmcA","sig_type":"ed25519","signature":"4kdRQLJxrRPxEzE21hQ3rpLiEjthT4AX3QJeHq3AQwJFZSFqWehweFR8NURmb3jA26qHYr6iw2ELELPRpW5vhNKm"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWHLxVhUQyAuZe6AHMB29P7wkvTNMn7eDMcsqimJYLKREf","sig_type":"ed25519","signature":"qsXokj8MAvuTgDd9LpqQMa9NEiNMJaMMB39Mi4iUKD9ySmiEQsTChFbG7GwuzYyeZxGAfMJBCExBhq5H87BLHHM"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE","sig_type":"ed25519","signature":"qaSwPWwPxS5G9EZUFXDv2LfxkR3zjhL2VChkiYneHawdZ1Pf2F5Kptfen8v1YoAsayGi9hjDdfrJXWLPRak4KyB"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi","sig_type":"ed25519","signature":"2JPuk3YcojtcqCQqyR8wnipsX3rfmVxjLg4N1T1jm7pt26cik3jt1qGw715nczzwPDHdZpwRszNMaiZ7zPWQPvjC"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS","sig_type":"ed25519","signature":"3ar87VZNDEt6otPmJXFRV97G9MhhrHTULGHT8SnKjF7Q36UqDbXjL8jfRhzFturDUSct4tEq4DQeR1A4mT6VkYt5"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWDUszU2NeWyUVjCXhGEt1MoZrhvdmaQQwtZUriuGN1jTr","sig_type":"ed25519","signature":"5i5EWaZuaxMk1y6y9ddJAVgFNUE3wrRTN56b5TQjKxQaC9Zx8xmVNrv5AEW5eP3irL6Fpnb8KayKW6KmmdCwJ1zr"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWEFFCZnar1cUJQ3rMWjvPQg6yMV2aXWs2DkJNSRbduBWn","sig_type":"ed25519","signature":"3BGuKFTrQ4bQf4JuRuihdYkp5ZG5CYeuiNRGHs9Yy5sr23Mt4hukGxNALYxpwYpVnBZ1PdxeKsFiJVrqMAAm24k"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt","sig_type":"ed25519","signature":"2bTYC7ePK98ymugQqdtVEF3t7hRLcK569mgY3Zw8YqY7kmsHv8FnwTTLHt8cZcXJaQsZHrGMQrYKHGDZ5BRdLBNj"}]},{"chain":[{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4QWoLctEPLsnAy5UaCi5MzE71GikZbbBKRSputLVLHDVCyc58tNJED68LioeZrkknXaeoKcQAodMvtSpriM2KdHr"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"3GPMm6gjWsc9EteSQNi6PqH3QCqZYKo9yUuNfAcNQtsP4T3bih94izM1Ge1VNVMP3fHqdhUJRTwRyaLZz2FQbkfS"},{"expires_at":1673912144,"issued_at":1642376144,"issued_for":"12D3KooWD7CvsYcpF9HE9CCV9aY3SJ317tkXVykjtZnht2EbzDPm","sig_type":"ed25519","signature":"E2XiyNgLF4R3jkcmsB9j6E85MpRzCMWREnoUsWUApWYnchFqg9KLuCeRQNfWFcpnKy8SgUKVdgG8APhufLdW4eL"}]}]} \ No newline at end of file +{"certs":[{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWD2vAZva1u3TQgoxebBUBsaGMNawKjVkp57M6UcwNwXNv","sig_type":"ed25519","signature":"3xGrGwc7GzbWovnzmV371whX8tMCLBZEF3yDX8PbvomG3bfYtKAg1qTU1msokhGpUaDW2v9d7sofgkdCkpHLq725"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWSD5PToNiLQwKDXsu8JSysCwUt8BVUJEqCHcDe7P5h45e","sig_type":"ed25519","signature":"31UsZ2HtfToWdFFURV5MkaFGcC5TJw9HmZHFQaKgHuAEoghz4v2YsKdU8jxQC3UgX1B88fm4pja7rGJntciZ9o31"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWR4cv1a8tv7pps4HH6wePNaK6gf1Hww5wcCMzeWxyNw51","sig_type":"ed25519","signature":"3kg82v9gnQ9Mt6DS7amFJvFbyZJHMGQcxMt5ZAxgoFxL9drRQLcMDbXDBwZNdt2qvC77qXX2s4jk7Q7LVNXHUo2S"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWKnEqMfYo9zvfHmqTLpLdiHXPe4SVqUWcWHDJdFGrSmcA","sig_type":"ed25519","signature":"27XcvGzCmc5qoUdQDCQoM1eZbgr223L17gYSBupXEpU1wjjs1zfcbbgengECQoBgaJxURuZHnGaspxJSyGM8WUXv"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWHLxVhUQyAuZe6AHMB29P7wkvTNMn7eDMcsqimJYLKREf","sig_type":"ed25519","signature":"3Ckq7x7nSZk6sgodNDX2s9KGDyhq1J7ib7tSpPD55Rt7rz6RyHJLLKDpm82zypjtN3Do5zvDF3DEtn5dixCmjrfT"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWJd3HaMJ1rpLY1kQvcjRPEvnDwcXrH8mJvk7ypcZXqXGE","sig_type":"ed25519","signature":"Wk3DNTnv61uxFnCsm5jgByDtzcuihDphcj5nqnHUZM5Fv5myb4mAwbhAPSgYMR47UvzWNseGGeciwJRHYGbHnm2"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWFEwNWcHqi9rtsmDhsYcDbRUCDXH84RC4FW6UfsFWaoHi","sig_type":"ed25519","signature":"4125YsQC8qeX4TWa6J1yKjEmq9y5xXp4wunD99XmPh3zjz4kguEB3vnfuEMQhtGF4QfojUqsay3a7Kzm1bzLaFW2"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS","sig_type":"ed25519","signature":"4HvFyvPZF3dp1whqvGWKNxyMveTTqELesPL3BPSXyHmbmh8jjJC5pyb1tZPBgNYnj2M2kV5B7yBw3cnMTWdmTVa8"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWDUszU2NeWyUVjCXhGEt1MoZrhvdmaQQwtZUriuGN1jTr","sig_type":"ed25519","signature":"2uoPHvCETPWUgvsXGVyfDtcJKwNfsQbNHcp9mDzkbMnvhxtXw7AjVnye7yoARS83ncHUkec6GMz6j4wdxgh9t731"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWEFFCZnar1cUJQ3rMWjvPQg6yMV2aXWs2DkJNSRbduBWn","sig_type":"ed25519","signature":"55PRXMSJe8ygLLPRpFB8szNCh7yWik38dgDTQwpsDi6KGqanKP2pbZMEzmi1HwE4QTTSEmQfLd48CfyvkXTCiE9B"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWFtf3rfCDAfWwt6oLZYZbDfn9Vn7bv7g6QjjQxUUEFVBt","sig_type":"ed25519","signature":"27HaJqBaSacundNa3t8eAJK4aD8kFYkj5AetfSTK44TQPAdGcuMiTaNntQtGiH5LWALYaGnoVmpaoNiPsx62SmXx"}]},{"chain":[{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWNbZKaPWRZ8wgjGvrxdJFz9Fq5uVwkR6ERV1f74HhPdyB","sig_type":"ed25519","signature":"4x2BxHNShQK5pybpqP3YZRjUXG6GjEAkjTvLnnaDRMedJCGmALknnRdxK8ixQbBEMfNvwnuuXbw5B91T8uY5t6vy"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWM45u7AQxsb4MuQJNYT3NWHHMLU7JTbBV66RTfF3KSzdR","sig_type":"ed25519","signature":"4GqxH5bgESAMmdubxrWzbTNPoGtyrenMSNZCCTxRSR3UBoArqYpxSZpp86amXWDMWRjnVgy9xc3PG1C4hC7J7PsW"},{"expires_at":1674740053,"issued_at":1643204053,"issued_for":"12D3KooWD7CvsYcpF9HE9CCV9aY3SJ317tkXVykjtZnht2EbzDPm","sig_type":"ed25519","signature":"3hX8rEPbAqHpuXQVi6p2kEX2nnVTuwSG7mYVoztCgvPwz3hYZzTg7X8KfjCG5kyNhThmL2djekZLitnPYiwesznq"}]}]} \ No newline at end of file