mirror of
https://github.com/fluencelabs/registry.git
synced 2025-04-25 10:12:13 +00:00
Compare commits
No commits in common. "main" and "registry-v0.8.6" have entirely different histories.
main
...
registry-v
19
.github/check-registry.sh
vendored
Executable file
19
.github/check-registry.sh
vendored
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PEERS=(
|
||||
"/ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR"
|
||||
"/ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWQdpukY3p2DhDfUfDgphAqsGu5ZUrmQ4mcHSGrRag6gQK"
|
||||
"/ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWRT8V5awYdEZm6aAV9HWweCEbhWd7df4wehqHZXAB7yMZ"
|
||||
"/ip4/127.0.0.1/tcp/9994/ws/p2p/12D3KooWBzLSu9RL7wLP6oUowzCbkCj2AGBSXkHSJKuq4wwTfwof"
|
||||
"/ip4/127.0.0.1/tcp/9995/ws/p2p/12D3KooWBf6hFgrnXwHkBnwPGMysP3b1NJe5HGtAWPYfwmQ2MBiU"
|
||||
"/ip4/127.0.0.1/tcp/9996/ws/p2p/12D3KooWPisGn7JhooWhggndz25WM7vQ2JmA121EV8jUDQ5xMovJ"
|
||||
)
|
||||
|
||||
cd ${GITHUB_WORKSPACE}/aqua-tests
|
||||
|
||||
for PEER_ADDR in ${PEERS[@]}; do
|
||||
echo "Checking ${PEER_ADDR}"
|
||||
if ! npx fluence aqua remote get_interface --addr ${PEER_ADDR} --id registry | jq -ec 'has("function_signatures")'; then
|
||||
exit 1
|
||||
fi
|
||||
done
|
86
.github/e2e/docker-compose.yml
vendored
86
.github/e2e/docker-compose.yml
vendored
@ -1,13 +1,13 @@
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 10.50.10.0/24
|
||||
|
||||
services:
|
||||
nox-1:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-1:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7771:7771
|
||||
- 9991:9991
|
||||
@ -17,19 +17,21 @@ services:
|
||||
- -w=9991
|
||||
- -x=10.50.10.10
|
||||
- --external-maddrs
|
||||
- /dns4/nox-1/tcp/7771
|
||||
- /dns4/nox-1/tcp/9991/ws
|
||||
- /dns4/fluence-1/tcp/7771
|
||||
- /dns4/fluence-1/tcp/9991/ws
|
||||
- --allow-private-ips
|
||||
- --local
|
||||
# - --bootstraps=/dns/nox-1/tcp/7771
|
||||
# - --bootstraps=/dns/fluence-1/tcp/7771
|
||||
# 12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR
|
||||
- -k=hK62afickoeP2uZbmSkAYXxxqP8ozq16VRN7qfTP719EHC5V5tjrtW57BSjUr8GvsEXmJRbtejUWyPZ2rZMyQdq
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.10
|
||||
|
||||
nox-2:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-2:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7772:7772
|
||||
- 9992:9992
|
||||
@ -39,18 +41,20 @@ services:
|
||||
- -w=9992
|
||||
- -x=10.50.10.20
|
||||
- --external-maddrs
|
||||
- /dns4/nox-2/tcp/7772
|
||||
- /dns4/nox-2/tcp/9992/ws
|
||||
- /dns4/fluence-2/tcp/7772
|
||||
- /dns4/fluence-2/tcp/9992/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-1/tcp/7771
|
||||
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||
# 12D3KooWQdpukY3p2DhDfUfDgphAqsGu5ZUrmQ4mcHSGrRag6gQK
|
||||
- -k=2WijTVdhVRzyZamWjqPx4V4iNMrajegNMwNa2PmvPSZV6RRpo5M2fsPWdQr22HVRubuJhhSw8BrWiGt6FPhFAuXy
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.20
|
||||
|
||||
nox-3:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-3:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7773:7773
|
||||
- 9993:9993
|
||||
@ -60,18 +64,20 @@ services:
|
||||
- -w=9993
|
||||
- -x=10.50.10.30
|
||||
- --external-maddrs
|
||||
- /dns4/nox-3/tcp/7773
|
||||
- /dns4/nox-3/tcp/9993/ws
|
||||
- /dns4/fluence-3/tcp/7773
|
||||
- /dns4/fluence-3/tcp/9993/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-1/tcp/7771
|
||||
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||
# 12D3KooWRT8V5awYdEZm6aAV9HWweCEbhWd7df4wehqHZXAB7yMZ
|
||||
- -k=2n2wBVanBeu2GWtvKBdrYK9DJAocgG3PrTUXMharq6TTfxqTL4sLdXL9BF23n6rsnkAY5pR9vBtx2uWYDQAiZdrX
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.30
|
||||
|
||||
nox-4:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-4:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7774:7774
|
||||
- 9994:9994
|
||||
@ -81,18 +87,20 @@ services:
|
||||
- -w=9994
|
||||
- -x=10.50.10.40
|
||||
- --external-maddrs
|
||||
- /dns4/nox-4/tcp/7774
|
||||
- /dns4/nox-4/tcp/9994/ws
|
||||
- /dns4/fluence-4/tcp/7774
|
||||
- /dns4/fluence-4/tcp/9994/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-1/tcp/7771
|
||||
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||
# 12D3KooWBzLSu9RL7wLP6oUowzCbkCj2AGBSXkHSJKuq4wwTfwof
|
||||
- -k=4zp8ucAikkjB8CmkufYiFBW4QCDUCbQG7yMjviX7W8bMyN5rfChQ2Pi5QCWThrCTbAm9uq5nbFbxtFcNZq3De4dX
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.40
|
||||
|
||||
nox-5:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-5:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7775:7775
|
||||
- 9995:9995
|
||||
@ -102,18 +110,20 @@ services:
|
||||
- -w=9995
|
||||
- -x=10.50.10.50
|
||||
- --external-maddrs
|
||||
- /dns4/nox-5/tcp/7775
|
||||
- /dns4/nox-5/tcp/9995/ws
|
||||
- /dns4/fluence-5/tcp/7775
|
||||
- /dns4/fluence-5/tcp/9995/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-1/tcp/7771
|
||||
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||
# 12D3KooWBf6hFgrnXwHkBnwPGMysP3b1NJe5HGtAWPYfwmQ2MBiU
|
||||
- -k=3ry26rm5gkJXvdqRH4FoM3ezWq4xVVsBQF7wtKq4E4pbuaa6p1F84tNqifUS7DdfJL9hs2gcdW64Wc342vHZHMUp
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.50
|
||||
|
||||
nox-6:
|
||||
image: ${NOX_IMAGE}
|
||||
fluence-6:
|
||||
image: ${RUST_PEER_IMAGE}
|
||||
ports:
|
||||
- 7776:7776
|
||||
- 9996:9996
|
||||
@ -121,14 +131,16 @@ services:
|
||||
- --aqua-pool-size=2
|
||||
- -t=7776
|
||||
- -w=9996
|
||||
- --bootstraps=/dns/nox-1/tcp/7771
|
||||
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||
- -x=10.50.10.60
|
||||
- --external-maddrs
|
||||
- /dns4/nox-6/tcp/7776
|
||||
- /dns4/nox-6/tcp/9996/ws
|
||||
- /dns4/fluence-6/tcp/7776
|
||||
- /dns4/fluence-6/tcp/9996/ws
|
||||
- --allow-private-ips
|
||||
# 12D3KooWPisGn7JhooWhggndz25WM7vQ2JmA121EV8jUDQ5xMovJ
|
||||
- -k=5Qh8bB1sF28uLPwr3HTvEksCeC6mAWQvebCfcgv9y6j4qKwSzNKm2tzLUg4nACUEo2KZpBw11gNCnwaAdM7o1pEn
|
||||
volumes:
|
||||
- ../../registry:/builtins/registry
|
||||
networks:
|
||||
nox:
|
||||
fluence:
|
||||
ipv4_address: 10.50.10.60
|
||||
|
2
.github/release-please/manifest.json
vendored
2
.github/release-please/manifest.json
vendored
@ -1,3 +1,3 @@
|
||||
{
|
||||
".": "0.9.4"
|
||||
".": "0.8.6"
|
||||
}
|
||||
|
10
.github/renovate.json
vendored
10
.github/renovate.json
vendored
@ -7,7 +7,6 @@
|
||||
"enabledManagers": ["cargo", "npm", "github-actions", "pip_requirements"],
|
||||
"rangeStrategy": "pin",
|
||||
"schedule": "every weekend",
|
||||
"respectLatest": false,
|
||||
"packageRules": [
|
||||
{
|
||||
"matchManagers": ["cargo", "npm"],
|
||||
@ -20,15 +19,6 @@
|
||||
"semanticCommitScope": "deps",
|
||||
"schedule": "at any time"
|
||||
},
|
||||
{
|
||||
"matchManagers": ["cargo"],
|
||||
"groupName": "marine things",
|
||||
"matchPackagePatterns": [
|
||||
"marine-rs-sdk",
|
||||
"marine-rs-sdk-test",
|
||||
"marine-sqlite-connector"
|
||||
],
|
||||
},
|
||||
{
|
||||
"matchDepTypes": ["devDependencies"],
|
||||
"prPriority": -1,
|
||||
|
72
.github/workflows/e2e.yml
vendored
72
.github/workflows/e2e.yml
vendored
@ -1,72 +0,0 @@
|
||||
name: "e2e"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- ".github/**"
|
||||
- "!.github/workflows/e2e.yml"
|
||||
- "!.github/workflows/snapshot.yml"
|
||||
- "!.github/workflows/tests.yml"
|
||||
types:
|
||||
- "labeled"
|
||||
- "synchronize"
|
||||
- "opened"
|
||||
- "reopened"
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- ".github/**"
|
||||
- "!.github/workflows/e2e.yml"
|
||||
- "!.github/workflows/snapshot.yml"
|
||||
- "!.github/workflows/tests.yml"
|
||||
|
||||
concurrency:
|
||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
snapshot:
|
||||
if: >
|
||||
github.event_name == 'push' ||
|
||||
contains(github.event.pull_request.labels.*.name, 'e2e')
|
||||
name: "registry"
|
||||
uses: ./.github/workflows/snapshot.yml
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
nox:
|
||||
needs:
|
||||
- snapshot
|
||||
uses: fluencelabs/nox/.github/workflows/build.yml@master
|
||||
with:
|
||||
cargo-dependencies: |
|
||||
[
|
||||
{
|
||||
"package": "registry-distro",
|
||||
"version": "=${{ needs.snapshot.outputs.cargo-version }}",
|
||||
"registry": "fluence",
|
||||
"manifest": "crates/system-services/Cargo.toml"
|
||||
}
|
||||
]
|
||||
|
||||
nox-snapshot:
|
||||
name: "nox"
|
||||
needs:
|
||||
- nox
|
||||
|
||||
uses: fluencelabs/nox/.github/workflows/container.yml@master
|
||||
with:
|
||||
image-name: "docker.fluence.dev/registry"
|
||||
|
||||
aqua-tests:
|
||||
name: "registry"
|
||||
needs:
|
||||
- nox-snapshot
|
||||
uses: ./.github/workflows/tests.yml
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
nox-image: "${{ needs.nox-snapshot.outputs.nox-image }}"
|
||||
if-no-artifacts-found: warn
|
21
.github/workflows/lint-pr.yml
vendored
21
.github/workflows/lint-pr.yml
vendored
@ -1,21 +0,0 @@
|
||||
name: lint PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
concurrency:
|
||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
pr:
|
||||
name: Validate PR title
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: amannn/action-semantic-pull-request@v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
28
.github/workflows/lint.yml
vendored
28
.github/workflows/lint.yml
vendored
@ -2,20 +2,29 @@ name: lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/workflows/**"
|
||||
- ".github/renovate.json"
|
||||
types:
|
||||
- opened
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
concurrency:
|
||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
pr:
|
||||
name: Validate PR title
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: amannn/action-semantic-pull-request@v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
reviewdog:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Lint actions
|
||||
uses: reviewdog/action-actionlint@v1
|
||||
@ -24,14 +33,3 @@ jobs:
|
||||
with:
|
||||
reporter: github-pr-check
|
||||
fail_on_error: true
|
||||
|
||||
renovate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Renovate Config Validator
|
||||
uses: tj-actions/renovate-config-validator@v2
|
||||
with:
|
||||
config_file: .github/renovate.json
|
||||
|
90
.github/workflows/release.yml
vendored
90
.github/workflows/release.yml
vendored
@ -45,15 +45,15 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ fromJson(needs.release-please.outputs.pr).headBranchName }}
|
||||
|
||||
- name: Setup Rust toolchain
|
||||
uses: dsherret/rust-toolchain-file@v1
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
|
||||
- name: Install cargo-edit
|
||||
uses: baptiste0928/cargo-install@v2.2.0
|
||||
uses: baptiste0928/cargo-install@v2.0.0
|
||||
with:
|
||||
crate: cargo-edit
|
||||
|
||||
@ -67,14 +67,10 @@ jobs:
|
||||
working-directory: service
|
||||
run: cargo set-version ${{ steps.version.outputs.version }}
|
||||
|
||||
- name: Set version in distro
|
||||
working-directory: distro
|
||||
run: cargo set-version ${{ steps.version.outputs.version }}
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "18"
|
||||
node-version: "16"
|
||||
|
||||
- name: Set version in aqua
|
||||
working-directory: aqua
|
||||
@ -101,10 +97,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Import secrets
|
||||
uses: hashicorp/vault-action@v2.7.3
|
||||
uses: hashicorp/vault-action@v2.5.0
|
||||
with:
|
||||
url: https://vault.fluence.dev
|
||||
path: jwt/github
|
||||
@ -117,16 +113,11 @@ jobs:
|
||||
kv/npmjs/fluencebot token | NODE_AUTH_TOKEN
|
||||
|
||||
- name: Setup Rust toolchain
|
||||
uses: dsherret/rust-toolchain-file@v1
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
|
||||
- name: Setup marine
|
||||
uses: fluencelabs/setup-marine@v1
|
||||
|
||||
- name: Setup fcli
|
||||
uses: fluencelabs/setup-fluence@v1
|
||||
with:
|
||||
version: main
|
||||
|
||||
- name: Build service
|
||||
run: ./build.sh
|
||||
working-directory: service
|
||||
@ -134,7 +125,7 @@ jobs:
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "18"
|
||||
node-version: "16"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
cache-dependency-path: "aqua/package-lock.json"
|
||||
cache: "npm"
|
||||
@ -149,39 +140,42 @@ jobs:
|
||||
run: npm publish --access public
|
||||
working-directory: aqua
|
||||
|
||||
- name: Import secrets
|
||||
uses: hashicorp/vault-action@v2.7.3
|
||||
with:
|
||||
url: https://vault.fluence.dev
|
||||
path: jwt/github
|
||||
role: ci
|
||||
method: jwt
|
||||
jwtGithubAudience: "https://github.com/fluencelabs"
|
||||
jwtTtl: 300
|
||||
exportToken: false
|
||||
secrets: |
|
||||
kv/crates.io/fluencebot token | CARGO_REGISTRY_TOKEN
|
||||
- name: Install ipfs
|
||||
uses: nahsi/setup-ipfs@v1
|
||||
|
||||
- name: Setup Rust toolchain
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
- name: Create builtin distribution package
|
||||
run: ./builtin-package/package.sh
|
||||
|
||||
- name: Install cargo-workspaces
|
||||
uses: baptiste0928/cargo-install@v2.2.0
|
||||
with:
|
||||
crate: cargo-workspaces
|
||||
|
||||
- name: Build distro
|
||||
run: ./build.sh
|
||||
|
||||
- name: Publish to crates.io
|
||||
working-directory: ./distro
|
||||
- name: Calculate SHA256
|
||||
id: sha
|
||||
run: |
|
||||
cargo ws publish \
|
||||
--no-git-commit \
|
||||
--allow-dirty \
|
||||
--from-git \
|
||||
--skip-published \
|
||||
--yes
|
||||
# Calculate sha256
|
||||
du -hs registry.tar.gz
|
||||
sha256sum registry.tar.gz
|
||||
sha=($(sha256sum registry.tar.gz))
|
||||
echo "sha256=${sha}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Upload registry package
|
||||
if: needs.release-please.outputs.release-created
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: registry.tar.gz
|
||||
tag_name: ${{ needs.release-please.outputs.tag-name }}
|
||||
|
||||
- name: Update version in node-distro repo
|
||||
if: needs.release-please.outputs.release-created
|
||||
uses: benc-uk/workflow-dispatch@v1
|
||||
with:
|
||||
workflow: update_service
|
||||
repo: fluencelabs/node-distro
|
||||
ref: "main"
|
||||
token: ${{ secrets.PERSONAL_TOKEN }}
|
||||
inputs: '{
|
||||
"name": "registry",
|
||||
"version": "${{ needs.release-please.outputs.version }}",
|
||||
"url": "https://github.com/fluencelabs/registry/releases/download/${{ needs.release-please.outputs.tag-name }}/registry.tar.gz",
|
||||
"sha256": "${{ steps.sha.outputs.sha256 }}"
|
||||
}'
|
||||
|
||||
slack:
|
||||
if: always()
|
||||
@ -210,7 +204,7 @@ jobs:
|
||||
echo "found any?:" "${{ steps.status.outputs.found }}"
|
||||
|
||||
- name: Import secrets
|
||||
uses: hashicorp/vault-action@v2.7.3
|
||||
uses: hashicorp/vault-action@v2.5.0
|
||||
with:
|
||||
url: https://vault.fluence.dev
|
||||
path: jwt/github
|
||||
|
34
.github/workflows/run-tests.yml
vendored
34
.github/workflows/run-tests.yml
vendored
@ -7,7 +7,6 @@ on:
|
||||
- ".github/**"
|
||||
- "!.github/workflows/run-tests.yml"
|
||||
- "!.github/workflows/tests.yml"
|
||||
- "!.github/workflows/e2e.yml"
|
||||
types:
|
||||
- "labeled"
|
||||
- "synchronize"
|
||||
@ -21,13 +20,17 @@ on:
|
||||
- ".github/**"
|
||||
- "!.github/workflows/run-tests.yml"
|
||||
- "!.github/workflows/tests.yml"
|
||||
- "!.github/workflows/e2e.yml"
|
||||
|
||||
concurrency:
|
||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
registry:
|
||||
uses: ./.github/workflows/tests.yml
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
cargo:
|
||||
name: "registry / Run cargo tests"
|
||||
runs-on: builder
|
||||
@ -38,12 +41,10 @@ jobs:
|
||||
working-directory: service
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup rust toolchain
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
cache: false
|
||||
|
||||
- name: Setup marine
|
||||
uses: fluencelabs/setup-marine@v1
|
||||
@ -55,33 +56,18 @@ jobs:
|
||||
run: cargo fmt --all -- --check
|
||||
|
||||
- name: Run cargo clippy
|
||||
env:
|
||||
RUSTFLAGS: ""
|
||||
run: cargo clippy -Z unstable-options --all -- -D warnings
|
||||
|
||||
- name: Install cargo-nextest
|
||||
uses: baptiste0928/cargo-install@v2.2.0
|
||||
uses: baptiste0928/cargo-install@v2.0.0
|
||||
with:
|
||||
crate: cargo-nextest
|
||||
version: 0.9.22
|
||||
|
||||
- name: Run cargo nextest
|
||||
env:
|
||||
RUSTFLAGS: ""
|
||||
NEXTEST_RETRIES: 2
|
||||
NEXTEST_TEST_THREADS: 1
|
||||
run: cargo nextest run --release --all-features --no-fail-fast
|
||||
|
||||
lints:
|
||||
name: Lints
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup rust toolchain
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
|
||||
- name: Run cargo fmt
|
||||
uses: actions-rs/cargo@v1
|
||||
with:
|
||||
command: fmt
|
||||
args: --all --manifest-path service/Cargo.toml -- --check
|
||||
|
104
.github/workflows/snapshot.yml
vendored
104
.github/workflows/snapshot.yml
vendored
@ -1,104 +0,0 @@
|
||||
name: Build snapshot
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
cargo-dependencies:
|
||||
description: "Cargo dependencies map"
|
||||
type: string
|
||||
default: "null"
|
||||
ref:
|
||||
description: "git ref to checkout to"
|
||||
type: string
|
||||
default: "master"
|
||||
snapshot:
|
||||
description: "Whether to publish snapshots"
|
||||
type: boolean
|
||||
default: true
|
||||
outputs:
|
||||
cargo-version:
|
||||
description: "Cargo snapshot version"
|
||||
value: ${{ jobs.snapshot.outputs.version }}
|
||||
|
||||
jobs:
|
||||
snapshot:
|
||||
name: "Build crate"
|
||||
runs-on: builder
|
||||
timeout-minutes: 60
|
||||
|
||||
outputs:
|
||||
version: "${{ steps.snapshot.outputs.version }}"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: fluencelabs/registry
|
||||
ref: ${{ inputs.ref }}
|
||||
|
||||
- name: Setup Rust toolchain
|
||||
uses: dsherret/rust-toolchain-file@v1
|
||||
|
||||
- name: Set dependencies
|
||||
if: inputs.cargo-dependencies != 'null'
|
||||
uses: fluencelabs/github-actions/cargo-set-dependency@main
|
||||
with:
|
||||
dependencies: ${{ inputs.cargo-dependencies }}
|
||||
path: service/
|
||||
|
||||
- name: Setup marine
|
||||
uses: fluencelabs/setup-marine@v1
|
||||
with:
|
||||
artifact-name: marine
|
||||
|
||||
- name: Setup fcli
|
||||
uses: fluencelabs/setup-fluence@v1
|
||||
with:
|
||||
version: main
|
||||
|
||||
- name: Import secrets
|
||||
if: inputs.snapshot == true
|
||||
uses: hashicorp/vault-action@v2.7.3
|
||||
with:
|
||||
url: https://vault.fluence.dev
|
||||
path: jwt/github
|
||||
role: ci
|
||||
method: jwt
|
||||
jwtGithubAudience: "https://github.com/fluencelabs"
|
||||
jwtTtl: 300
|
||||
exportToken: false
|
||||
secrets: |
|
||||
kv/cargo-registry/users/ci token | CARGO_REGISTRIES_FLUENCE_TOKEN
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "18"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
cache-dependency-path: "aqua/package-lock.json"
|
||||
cache: "npm"
|
||||
|
||||
- run: npm i
|
||||
working-directory: aqua
|
||||
|
||||
- name: Install cargo-workspaces
|
||||
uses: baptiste0928/cargo-install@v2.2.0
|
||||
with:
|
||||
crate: cargo-workspaces
|
||||
|
||||
- name: Generate snapshot version
|
||||
id: version
|
||||
uses: fluencelabs/github-actions/generate-snapshot-id@main
|
||||
|
||||
- name: Build distro
|
||||
run: ./build.sh
|
||||
|
||||
- name: Publish crate snapshots
|
||||
id: snapshot
|
||||
uses: fluencelabs/github-actions/cargo-publish-snapshot@main
|
||||
with:
|
||||
id: ${{ steps.version.outputs.id }}
|
||||
path: distro
|
131
.github/workflows/tests.yml
vendored
131
.github/workflows/tests.yml
vendored
@ -7,18 +7,18 @@ on:
|
||||
description: "Fluence enviroment to run tests agains"
|
||||
type: string
|
||||
default: "local"
|
||||
nox-image:
|
||||
description: "nox image tag"
|
||||
rust-peer-image:
|
||||
description: "rust-peer image tag"
|
||||
type: string
|
||||
default: "fluencelabs/nox:unstable"
|
||||
fcli-version:
|
||||
default: "fluencelabs/rust-peer:minimal"
|
||||
aqua-version:
|
||||
description: "@fluencelabs/aqua version"
|
||||
type: string
|
||||
default: "null"
|
||||
fluence-cli-version:
|
||||
description: "@fluencelabs/cli version"
|
||||
type: string
|
||||
default: "main"
|
||||
if-no-artifacts-found:
|
||||
description: "What to do when no artifacts found in setup-* actions"
|
||||
type: string
|
||||
default: "error"
|
||||
default: "null"
|
||||
cargo-dependencies:
|
||||
description: "Cargo dependencies map"
|
||||
type: string
|
||||
@ -30,7 +30,7 @@ on:
|
||||
env:
|
||||
CI: true
|
||||
FORCE_COLOR: true
|
||||
NOX_IMAGE: "${{ inputs.nox-image }}"
|
||||
RUST_PEER_IMAGE: "${{ inputs.rust-peer-image }}"
|
||||
FLUENCE_ENV: "${{ inputs.fluence-env }}"
|
||||
|
||||
jobs:
|
||||
@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Import secrets
|
||||
uses: hashicorp/vault-action@v2.7.3
|
||||
uses: hashicorp/vault-action@v2.5.0
|
||||
with:
|
||||
url: https://vault.fluence.dev
|
||||
path: jwt/github
|
||||
@ -59,7 +59,7 @@ jobs:
|
||||
kv/npm-registry/basicauth/ci token | NODE_AUTH_TOKEN;
|
||||
|
||||
- name: Checkout registry
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: fluencelabs/registry
|
||||
ref: ${{ inputs.ref }}
|
||||
@ -67,7 +67,7 @@ jobs:
|
||||
- name: Setup node with self-hosted registry
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "18"
|
||||
node-version: "16"
|
||||
registry-url: "https://npm.fluence.dev"
|
||||
cache: "npm"
|
||||
cache-dependency-path: "**/package-lock.json"
|
||||
@ -80,20 +80,55 @@ jobs:
|
||||
run: npm install
|
||||
working-directory: aqua-tests
|
||||
|
||||
- name: Setup fcli
|
||||
uses: fluencelabs/setup-fluence@v1
|
||||
- name: Set fluence-cli version
|
||||
if: inputs.fluence-cli-version != 'null'
|
||||
uses: fluencelabs/github-actions/npm-set-dependency@main
|
||||
with:
|
||||
artifact: fcli
|
||||
version: ${{ inputs.fcli-version }}
|
||||
if-no-artifact-found: ${{ inputs.if-no-artifacts-found }}
|
||||
package: "@fluencelabs/cli"
|
||||
version: ${{ inputs.fluence-cli-version }}
|
||||
working-directory: aqua-tests
|
||||
flags: "--save-dev"
|
||||
|
||||
- name: Set aqua version
|
||||
if: inputs.aqua-version != 'null'
|
||||
uses: fluencelabs/github-actions/npm-set-dependency@main
|
||||
with:
|
||||
package: "@fluencelabs/aqua"
|
||||
version: ${{ inputs.aqua-version }}
|
||||
working-directory: aqua
|
||||
flags: "--save-dev"
|
||||
|
||||
- name: Set versions in fluence.yaml
|
||||
uses: fluencelabs/github-actions/fluence-set-dependency@main
|
||||
env:
|
||||
NPM_CONFIG_REGISTRY: "https://npm.fluence.dev"
|
||||
with:
|
||||
path: aqua-tests
|
||||
versions: >
|
||||
{
|
||||
"npm": {
|
||||
"@fluencelabs/aqua": "${{ inputs.aqua-version }}"
|
||||
}
|
||||
}
|
||||
|
||||
- name: Setup Rust toolchain
|
||||
uses: dsherret/rust-toolchain-file@v1
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
|
||||
- name: Download marine artifact
|
||||
id: marine
|
||||
uses: actions/download-artifact@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: marine
|
||||
path: ~/.local/bin
|
||||
|
||||
- name: Make marine executable
|
||||
if: steps.marine.outcome == 'success'
|
||||
run: chmod +x ~/.local/bin/marine
|
||||
|
||||
- name: Setup marine
|
||||
if: steps.marine.outcome == 'failure'
|
||||
uses: fluencelabs/setup-marine@v1
|
||||
with:
|
||||
artifact-name: marine
|
||||
|
||||
- name: Set dependencies
|
||||
if: inputs.cargo-dependencies != ''
|
||||
@ -103,27 +138,29 @@ jobs:
|
||||
path: service/
|
||||
|
||||
- name: Build service
|
||||
env:
|
||||
FLUENCE_USER_DIR: "${{ github.workspace }}/tmp/.fluence"
|
||||
run: ./build.sh
|
||||
working-directory: service
|
||||
|
||||
- name: Build distro
|
||||
env:
|
||||
FLUENCE_USER_DIR: "${{ github.workspace }}/tmp/.fluence"
|
||||
run: ./build.sh
|
||||
- name: Install ipfs
|
||||
uses: nahsi/setup-ipfs@v1
|
||||
|
||||
- name: Create builtin distribution package
|
||||
run: ./builtin-package/package.sh
|
||||
|
||||
- name: Unpack registry package
|
||||
run: tar xvf registry.tar.gz
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: docker.fluence.dev
|
||||
username: ${{ env.DOCKER_USERNAME }}
|
||||
password: ${{ env.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Pull nox image
|
||||
run: docker pull $NOX_IMAGE
|
||||
- name: Pull rust-peer image
|
||||
run: docker pull $RUST_PEER_IMAGE
|
||||
|
||||
- name: Run nox network
|
||||
- name: Run rust-peer
|
||||
uses: isbang/compose-action@v1.4.1
|
||||
with:
|
||||
compose-file: ".github/e2e/docker-compose.yml"
|
||||
@ -140,20 +177,30 @@ jobs:
|
||||
run: pip install -r requirements.txt
|
||||
working-directory: aqua-tests
|
||||
|
||||
- name: Install fcli dependencies
|
||||
# - name: Wait for registry to be deployed
|
||||
# uses: nick-fields/retry@v2
|
||||
# with:
|
||||
# timeout_seconds: 30
|
||||
# max_attempts: 5
|
||||
# shell: bash
|
||||
# command: ${{ github.workspace }}/.github/check-registry.sh
|
||||
#
|
||||
- name: Temporarely wait with sleep
|
||||
run: sleep 20
|
||||
|
||||
- name: Install fluence-cli dependencies
|
||||
env:
|
||||
FLUENCE_USER_DIR: "${{ github.workspace }}/tmp/.fluence"
|
||||
run: fluence dep i --no-input
|
||||
run: npx fluence dep i --no-input
|
||||
working-directory: aqua-tests
|
||||
|
||||
- name: Print fcli version
|
||||
- name: Print Fluence CLI version
|
||||
run: pytest -s test_fluence_cli_version.py
|
||||
working-directory: aqua-tests
|
||||
|
||||
- name: Run aqua tests
|
||||
env:
|
||||
FLUENCE_USER_DIR: "${{ github.workspace }}/tmp/.fluence"
|
||||
NPM_CONFIG_REGISTRY: "https://npm.fluence.dev"
|
||||
run: pytest test_aqua.py
|
||||
working-directory: aqua-tests
|
||||
|
||||
@ -164,16 +211,18 @@ jobs:
|
||||
cat <<SNAPSHOT >> $GITHUB_STEP_SUMMARY
|
||||
## Used versions
|
||||
\`\`\`
|
||||
$(fluence dep v)
|
||||
$(npx fluence dep v)
|
||||
\`\`\`
|
||||
SNAPSHOT
|
||||
|
||||
- name: Dump container logs
|
||||
- name: Dump rust-peer logs on failure
|
||||
if: always()
|
||||
uses: jwalton/gh-docker-logs@v2
|
||||
|
||||
- name: Cleanup
|
||||
- name: Remove registry directory
|
||||
if: always()
|
||||
run: |
|
||||
rm -rf tmp ~/.fluence
|
||||
sudo rm -rf registry
|
||||
run: sudo rm -rf registry
|
||||
|
||||
- name: Remove tmp directory
|
||||
if: always()
|
||||
run: sudo rm -rf tmp
|
||||
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -3,8 +3,6 @@ builtin-package/*.wasm
|
||||
builtin-package/scheduled/*.air
|
||||
registry.tar.gz
|
||||
registry
|
||||
distro/target/
|
||||
distro/registry-service/
|
||||
|
||||
**/*.rs.bk
|
||||
**/.idea
|
||||
@ -14,8 +12,9 @@ distro/registry-service/
|
||||
**/dist
|
||||
*.drawio
|
||||
|
||||
aqua/*.tgz
|
||||
examples/src/generated/**
|
||||
# Remove after https://github.com/fluencelabs/aqua/issues/287
|
||||
aqua/target/typescript/**
|
||||
example/src/generated/**
|
||||
|
||||
**/__pycache__
|
||||
tmp
|
||||
|
@ -1 +0,0 @@
|
||||
.github
|
98
CHANGELOG.md
98
CHANGELOG.md
@ -1,103 +1,5 @@
|
||||
# Changelog
|
||||
|
||||
## [0.9.4](https://github.com/fluencelabs/registry/compare/registry-v0.9.3...registry-v0.9.4) (2024-01-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **registry:** Use `aqua` keyword instead of `module` ([#313](https://github.com/fluencelabs/registry/issues/313)) ([b9bce2e](https://github.com/fluencelabs/registry/commit/b9bce2e7641d0431d8199d6a104f8c3d2fe3eee5))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** update dependency @fluencelabs/aqua-lib to v0.9.0 ([#328](https://github.com/fluencelabs/registry/issues/328)) ([5c9af8b](https://github.com/fluencelabs/registry/commit/5c9af8bd3a36493802b8e913d917e2fbd1621977))
|
||||
* **deps:** update marine things ([#307](https://github.com/fluencelabs/registry/issues/307)) ([f78212d](https://github.com/fluencelabs/registry/commit/f78212d49bca9fe30def6702ec65aa187fe9deb1))
|
||||
* **deps:** update rust crate fluence-keypair to v0.10.4 ([#318](https://github.com/fluencelabs/registry/issues/318)) ([b71b85c](https://github.com/fluencelabs/registry/commit/b71b85ca1eb0472176b78c237e421ec04418e0d9))
|
||||
* **deps:** update sqlite wasm to 0.18.2 ([#320](https://github.com/fluencelabs/registry/issues/320)) ([7d9327b](https://github.com/fluencelabs/registry/commit/7d9327bcfd11c2dd63b360c96fed045f3f0952c3))
|
||||
* **registry:** Revert release registry 0.9.4 ([#331](https://github.com/fluencelabs/registry/issues/331)) ([e9ba1ad](https://github.com/fluencelabs/registry/commit/e9ba1ad248418e3811fa8d7653545028b7e48127))
|
||||
|
||||
## [0.9.3](https://github.com/fluencelabs/registry/compare/registry-v0.9.2...registry-v0.9.3) (2023-12-21)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* use new aqua packages ([#310](https://github.com/fluencelabs/registry/issues/310)) ([633d8e6](https://github.com/fluencelabs/registry/commit/633d8e6648f344487da68b610857ee9837d0c081))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** update dependency @fluencelabs/trust-graph to v3.1.2 ([#189](https://github.com/fluencelabs/registry/issues/189)) ([7ba20dc](https://github.com/fluencelabs/registry/commit/7ba20dcabd9747256609e9b986bd63f47c94e691))
|
||||
* **spell:** update spell api ([#315](https://github.com/fluencelabs/registry/issues/315)) ([3092907](https://github.com/fluencelabs/registry/commit/3092907e5e5d38caeeda15a83ea11e0462022f41))
|
||||
|
||||
## [0.9.2](https://github.com/fluencelabs/registry/compare/registry-v0.9.1...registry-v0.9.2) (2023-12-19)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* update marine sdk's, sqlite conector and config ([#309](https://github.com/fluencelabs/registry/issues/309)) ([863ae55](https://github.com/fluencelabs/registry/commit/863ae55f35bbe5452b636c064f9f8b377bb10ee8))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **ci:** setup fcli in release step ([#305](https://github.com/fluencelabs/registry/issues/305)) ([7b89267](https://github.com/fluencelabs/registry/commit/7b892678b1003bcf0c0fc834b7b49ceb2172e388))
|
||||
* **deps:** update dependency @fluencelabs/aqua-lib to v0.8.1 ([#249](https://github.com/fluencelabs/registry/issues/249)) ([66a42f7](https://github.com/fluencelabs/registry/commit/66a42f7b935e82af9133e2d5bc2c864cb4296e2f))
|
||||
* **deps:** update dependency @fluencelabs/aqua-lib to v0.8.2 ([#308](https://github.com/fluencelabs/registry/issues/308)) ([c207f7f](https://github.com/fluencelabs/registry/commit/c207f7fa549702c45dd8f25d0f97d95944472e6e))
|
||||
* **deps:** update dependency @fluencelabs/trust-graph to v0.4.7 ([#257](https://github.com/fluencelabs/registry/issues/257)) ([a6aeeea](https://github.com/fluencelabs/registry/commit/a6aeeea3f5eb4f06a99ec272e0f5d3b4b0a2a8a7))
|
||||
|
||||
## [0.9.1](https://github.com/fluencelabs/registry/compare/registry-v0.9.0...registry-v0.9.1) (2023-12-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* use non-npm Fluence CLI ([#302](https://github.com/fluencelabs/registry/issues/302)) ([d77fd12](https://github.com/fluencelabs/registry/commit/d77fd12b4dfe2d57ae3e35f729e35e2f6ad1c63c))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** update dependency @fluencelabs/cli to v0.13.0 ([#290](https://github.com/fluencelabs/registry/issues/290)) ([2a440a8](https://github.com/fluencelabs/registry/commit/2a440a8b1ff8aa922bd2faa982b8b75c9beb3bc7))
|
||||
* **deps:** update rust crate marine-rs-sdk-test to v0.11.1 ([#292](https://github.com/fluencelabs/registry/issues/292)) ([2405f41](https://github.com/fluencelabs/registry/commit/2405f41702543d1ff70620923787a6a7621cc7d5))
|
||||
* remove binary import ([#304](https://github.com/fluencelabs/registry/issues/304)) ([c160475](https://github.com/fluencelabs/registry/commit/c16047515751f1400cb1f7231abcc83e2f6bcf4f))
|
||||
|
||||
## [0.9.0](https://github.com/fluencelabs/registry/compare/registry-v0.8.8...registry-v0.9.0) (2023-11-22)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **subnetwork:** deprecate registry-based subnets [NET-633] ([#283](https://github.com/fluencelabs/registry/issues/283))
|
||||
|
||||
### Features
|
||||
|
||||
* **subnetwork:** deprecate registry-based subnets [NET-633] ([#283](https://github.com/fluencelabs/registry/issues/283)) ([81f15d4](https://github.com/fluencelabs/registry/commit/81f15d4eb74b730fca331f1ea4ef6b960a02f9c8))
|
||||
|
||||
## [0.8.8](https://github.com/fluencelabs/registry/compare/registry-v0.8.7...registry-v0.8.8) (2023-11-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* prepare cli update ([#270](https://github.com/fluencelabs/registry/issues/270)) ([2c29fea](https://github.com/fluencelabs/registry/commit/2c29fea09808e2f98c4f58a10a1587aa5a571ad0))
|
||||
* **registry:** Use streams instead of options [LNG-277] ([#282](https://github.com/fluencelabs/registry/issues/282)) ([19f5d47](https://github.com/fluencelabs/registry/commit/19f5d47add949f62085a022a01b84c83d3fc0389))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **ci:** use unstable nox image ([#255](https://github.com/fluencelabs/registry/issues/255)) ([257516e](https://github.com/fluencelabs/registry/commit/257516e74ff78807f78a7570ccc9e2d685af48f9))
|
||||
* **deps:** unlock and update rust crate serde to 1.0.188 ([#273](https://github.com/fluencelabs/registry/issues/273)) ([4cb1b90](https://github.com/fluencelabs/registry/commit/4cb1b90a95bdc49b87b1dd1336e604cc71444de3))
|
||||
* **deps:** Update cli to 0.11.0 ([#272](https://github.com/fluencelabs/registry/issues/272)) ([0ac1b76](https://github.com/fluencelabs/registry/commit/0ac1b76fe1c0635bfa5cf1105ffaf899db36b300))
|
||||
* **deps:** update dependency @fluencelabs/cli ([#276](https://github.com/fluencelabs/registry/issues/276)) ([2259425](https://github.com/fluencelabs/registry/commit/22594259767fbd5be59904eab080d74733e7ea3e))
|
||||
* **deps:** update dependency @fluencelabs/cli to v0.6.0 ([#238](https://github.com/fluencelabs/registry/issues/238)) ([be441e8](https://github.com/fluencelabs/registry/commit/be441e86cbc07a51636edfd07ec0fc80933b31cf))
|
||||
* **deps:** update dependency @fluencelabs/fluence-network-environment to v1.1.2 ([#277](https://github.com/fluencelabs/registry/issues/277)) ([8ff086a](https://github.com/fluencelabs/registry/commit/8ff086a206d37edaeebe986661b626277e456d95))
|
||||
* **deps:** update marine things ([#278](https://github.com/fluencelabs/registry/issues/278)) ([1f44cdc](https://github.com/fluencelabs/registry/commit/1f44cdc3b1188ef9daaba33a73ee85980c0c8bc6))
|
||||
* **deps:** update rust crate marine-rs-sdk to v0.9.0 ([#265](https://github.com/fluencelabs/registry/issues/265)) ([9b4142d](https://github.com/fluencelabs/registry/commit/9b4142dc951414270f5a76b0519aa749c8835eb6))
|
||||
|
||||
## [0.8.7](https://github.com/fluencelabs/registry/compare/registry-v0.8.6...registry-v0.8.7) (2023-06-20)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add distro crate [fixes NET-462] ([#233](https://github.com/fluencelabs/registry/issues/233)) ([5acf1d2](https://github.com/fluencelabs/registry/commit/5acf1d230b92f6b0784314b0926b6f6c2e195307))
|
||||
* Migrate Registry to spell ([#247](https://github.com/fluencelabs/registry/issues/247)) ([990b588](https://github.com/fluencelabs/registry/commit/990b588b75857d2f61b76d89999a2c1f09f861f8))
|
||||
* update to node 18 ([a08ee16](https://github.com/fluencelabs/registry/commit/a08ee16ff9dc402e1388e22c57324ca975c1a94d))
|
||||
|
||||
## [0.8.6](https://github.com/fluencelabs/registry/compare/registry-v0.8.5...registry-v0.8.6) (2023-05-19)
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@ dependencies:
|
||||
npm:
|
||||
"@fluencelabs/registry": 0.6.2
|
||||
```
|
||||
And then run `fluence dep i`
|
||||
And then run `fluence dependency npm i`
|
||||
|
||||
If you are developing from scratch without Fluence CLI, you should install it via npm:
|
||||
|
||||
|
@ -1,67 +0,0 @@
|
||||
{
|
||||
"name": "aqua-dependencies",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "0.8.1",
|
||||
"@fluencelabs/registry": "0.8.7",
|
||||
"@fluencelabs/spell": "0.5.33",
|
||||
"@fluencelabs/trust-graph": "3.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/aqua-lib": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.8.1.tgz",
|
||||
"integrity": "sha512-VLslkhi3hsNLWkgsoCyceCediqkicWphMVHZ+9eEkgMumepvo7TcqiYC14bl2LpZjn7YZ6y/OzK+Ffy8ADfKdA=="
|
||||
},
|
||||
"node_modules/@fluencelabs/registry": {
|
||||
"version": "0.8.7",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/registry/-/registry-0.8.7.tgz",
|
||||
"integrity": "sha512-43bmb1v4p5ORvaiLBrUAl+hRPo3luxxBVrJgqTvipJa2OEg2wCRA/Wo9s4M7Lchnv3NoYLOyNTzNyFopQRKILA==",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "0.7.0",
|
||||
"@fluencelabs/trust-graph": "0.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/registry/node_modules/@fluencelabs/aqua-lib": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.7.0.tgz",
|
||||
"integrity": "sha512-mJEaxfAQb6ogVM4l4qw7INK6kvLA2Y161ErwL7IVeVSkKXIeYq/qio2p2au35LYvhBNsKc7XP2qc0uztCmxZzA=="
|
||||
},
|
||||
"node_modules/@fluencelabs/registry/node_modules/@fluencelabs/trust-graph": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/trust-graph/-/trust-graph-0.4.1.tgz",
|
||||
"integrity": "sha512-V/6ts4q/Y0uKMS6orVpPyxfdd99YFMkm9wN9U2IFtlBUWNsQZG369FK9qEizwsSRCqTchMHYs8Vh4wgZ2uRfuQ==",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.7.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/spell": {
|
||||
"version": "0.5.33",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/spell/-/spell-0.5.33.tgz",
|
||||
"integrity": "sha512-JZ+CWTrBXwX6DilzxsJfg39DMsQN9P/h1jyujcDwIpOKynbGCD84g5t9hsplNVH/pEZwcYtGajDH293Sg54bwA==",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "0.8.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18",
|
||||
"pnpm": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/trust-graph": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/trust-graph/-/trust-graph-3.1.2.tgz",
|
||||
"integrity": "sha512-HpyHtiomh09wv6/83z+bhbkqVngIUdqNGEXRTIPg4sArVPMZ9UCXBrkQsHDRqdMUx0lBAcgB3IjlbdhkwHGaXA==",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "^0.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@fluencelabs/trust-graph/node_modules/@fluencelabs/aqua-lib": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-lib/-/aqua-lib-0.5.2.tgz",
|
||||
"integrity": "sha512-fmoFFE8myhLH9d+YR0+0ZPL2YIQyR6M1woAGu5d1xXI02Sjzn4id6dE4PpxHb8cSBPRie8AwsKobHCNqGxI8oA=="
|
||||
}
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
# yaml-language-server: $schema=schemas/env.json
|
||||
|
||||
# Defines user project preferences
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/env.md
|
||||
|
||||
version: 0
|
||||
|
||||
fluenceEnv: local
|
34
aqua-tests/.fluence/project-secrets.yaml
Normal file
34
aqua-tests/.fluence/project-secrets.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
# yaml-language-server: $schema=schemas/project-secrets.yaml.json
|
||||
|
||||
# Defines project's secret keys that are used only in the scope of this particular Fluence project. You can manage project's keys using commands from `fluence key` group of commands
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/fluence-cli/tree/main/docs/configs/project-secrets.md
|
||||
|
||||
version: 0
|
||||
keyPairs:
|
||||
[
|
||||
{
|
||||
peerId: 12D3KooWAtJ3RXGiW2WzZYUk7XxAEyfwLdqJHsPXmb7xd1dY7uZK,
|
||||
secretKey: BNidntUryx+hxr7NK2z9nci23sMn3fURB6bTH1K2Ll4=,
|
||||
publicKey: CAESIA/dWDmfLpI+PmldVAgQblramknRSyfivJ5x/Y0W6EQC,
|
||||
name: test_create_resource
|
||||
},
|
||||
{
|
||||
peerId: 12D3KooWDZkoijNBri8gVwyUikaJUQG2ArKBko2jYeXjP2inKsWZ,
|
||||
secretKey: e72l3wuItcfCcQBP6Rn4L0uQRsKmyckZRbYXP1ms59Q=,
|
||||
publicKey: CAESIDewocN3uUk3VzqIhGpbi1XQEOjmEZy8ZYrU04Saz4A6,
|
||||
name: test_get_resource
|
||||
},
|
||||
{
|
||||
peerId: 12D3KooWBnhoqKKSS75Zshmi1DawFLH4ybhhqomuU8DMsp1ogLBU,
|
||||
secretKey: rZxZGGCxECt1opnXjnxrSpV2g6Qt2Fl0KTDoJkox008=,
|
||||
publicKey: CAESIB1Kay0XOU+P6iv4sPLGx8OooOf6tLng5x+tgT8vGcPD,
|
||||
name: test_register_record_unregister
|
||||
},
|
||||
{
|
||||
peerId: 12D3KooWHVLy7L6u1LXjeEwaJz6JNrQowLBoEpgiDjPTNfpHN4Ph,
|
||||
secretKey: I/ZUMsjlt47e9LxYxbk/LamZJUzNxoBikPA+Qqy8yYA=,
|
||||
publicKey: CAESIHH+Gj7XJv2LPgknFGKCm+6FDQOcNtgCYblCh5lrQtM4,
|
||||
name: test_register_unregister_remote_record
|
||||
}
|
||||
]
|
89
aqua-tests/.fluence/schemas/app.yaml.json
Normal file
89
aqua-tests/.fluence/schemas/app.yaml.json
Normal file
@ -0,0 +1,89 @@
|
||||
{
|
||||
"type": "object",
|
||||
"$id": "https://fluence.dev/schemas/app.yaml",
|
||||
"title": "app.yaml",
|
||||
"description": "Defines what exactly is already deployed and where. This config is automatically generated by Fluence CLI after you deploy services defined in [fluence.yaml](./fluence.md) using `fluence deploy` or remove previously deployed services using `fluence remove`. In most of the cases you are not expected to modify this by hand",
|
||||
"properties": {
|
||||
"services": {
|
||||
"type": "object",
|
||||
"title": "Services",
|
||||
"description": "A map of the deployed services",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"title": "Deployment results",
|
||||
"description": "Service names as keys and Deployment results as values",
|
||||
"additionalProperties": {
|
||||
"title": "A list of deployed services",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"title": "Deployed service info",
|
||||
"properties": {
|
||||
"peerId": {
|
||||
"type": "string"
|
||||
},
|
||||
"serviceId": {
|
||||
"type": "string"
|
||||
},
|
||||
"blueprintId": {
|
||||
"type": "string"
|
||||
},
|
||||
"keyPairName": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"peerId",
|
||||
"serviceId",
|
||||
"blueprintId",
|
||||
"keyPairName"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
},
|
||||
"required": []
|
||||
},
|
||||
"timestamp": {
|
||||
"type": "string",
|
||||
"description": "ISO timestamp of the time when the services were deployed"
|
||||
},
|
||||
"relays": {
|
||||
"title": "Relays",
|
||||
"description": "Relays that you can connect to to find the peers where services are deployed",
|
||||
"type": [
|
||||
"string",
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"title": "Network name",
|
||||
"enum": [
|
||||
"kras",
|
||||
"stage",
|
||||
"testnet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"title": "Multi addresses",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"version": {
|
||||
"type": "number",
|
||||
"const": 3
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"services",
|
||||
"timestamp"
|
||||
]
|
||||
}
|
29
aqua-tests/.fluence/schemas/fluence-lock.yaml.json
Normal file
29
aqua-tests/.fluence/schemas/fluence-lock.yaml.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"type": "object",
|
||||
"$id": "https://fluence.dev/schemas/fluence-lock.yaml",
|
||||
"title": "fluence-lock.yaml",
|
||||
"description": "Defines a lock file for Fluence Project dependencies. When dependencies are installed - their exact versions are saved here.",
|
||||
"properties": {
|
||||
"npm": {
|
||||
"type": "object",
|
||||
"title": "npm dependencies",
|
||||
"description": "A map of the exact npm dependency versions. CLI ensures dependencies are installed each time you run aqua",
|
||||
"required": [],
|
||||
"nullable": true
|
||||
},
|
||||
"cargo": {
|
||||
"type": "object",
|
||||
"title": "Cargo dependencies",
|
||||
"description": "A map of the exact cargo dependency versions. CLI ensures dependencies are installed each time you run commands that depend on Marine or Marine REPL",
|
||||
"required": [],
|
||||
"nullable": true
|
||||
},
|
||||
"version": {
|
||||
"type": "number",
|
||||
"const": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version"
|
||||
]
|
||||
}
|
272
aqua-tests/.fluence/schemas/fluence.yaml.json
Normal file
272
aqua-tests/.fluence/schemas/fluence.yaml.json
Normal file
@ -0,0 +1,272 @@
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"services": {
|
||||
"title": "Services",
|
||||
"description": "A map with service names as keys and Service configs as values. You can have any number of services listed here (According to JSON schema they are called 'additionalProperties') as long as service name keys start with a lowercase letter and contain only letters numbers and underscores. You can use `fluence service add` command to add a service to this config",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"title": "Service config",
|
||||
"description": "Service names as keys (must start with a lowercase letter and contain only letters numbers and underscores) and Service config (defines where the service is and how to deploy it) as values",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"get": {
|
||||
"type": "string",
|
||||
"description": "Path to service directory or URL to the tar.gz archive with the service"
|
||||
},
|
||||
"deploy": {
|
||||
"type": "array",
|
||||
"title": "Deployment list",
|
||||
"description": "List of deployments for the particular service",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"title": "Deployment",
|
||||
"description": "A small config for a particular deployment. You can have specific overrides for each and specific deployment properties like count, distribution, etc.",
|
||||
"properties": {
|
||||
"keyPairName": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "The name of the Key Pair to use. It is resolved in the following order (from the lowest to the highest priority):\n1. \"defaultKeyPairName\" property from user-secrets.yaml\n1. \"defaultKeyPairName\" property from project-secrets.yaml\n1. \"keyPairName\" property from the top level of fluence.yaml\n1. \"keyPairName\" property from the \"services\" level of fluence.yaml\n1. \"keyPairName\" property from the individual \"deploy\" property item level of fluence.yaml"
|
||||
},
|
||||
"deployId": {
|
||||
"type": "string",
|
||||
"description": "This id can be used in Aqua to access actually deployed peer and service ids. The ID must start with a lowercase letter and contain only letters, numbers, and underscores."
|
||||
},
|
||||
"count": {
|
||||
"type": "number",
|
||||
"minimum": 1,
|
||||
"nullable": true,
|
||||
"description": "Number of services to deploy. Default: 1 or if \"peerIds\" property is provided - exactly the number of peerIds"
|
||||
},
|
||||
"peerId": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Peer id or peer id name to deploy to. Default: Peer ids from the \"relay\" property of fluence.yaml are selected for each deploy. Named peerIds can be listed in \"peerIds\" property of fluence.yaml)"
|
||||
},
|
||||
"peerIds": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"nullable": true,
|
||||
"title": "Peer ids",
|
||||
"description": "Peer ids or peer id names to deploy to. Overrides \"peerId\" property. Named peerIds can be listed in \"peerIds\" property of fluence.yaml)"
|
||||
},
|
||||
"distribution": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"even",
|
||||
"random"
|
||||
],
|
||||
"nullable": true,
|
||||
"description": "\"even\" distribution is used by default, means that the services will be deployed evenly across the listed peers. \"random\" distribution means that the services will be deployed randomly across the listed peers."
|
||||
},
|
||||
"overrideModules": {
|
||||
"type": "object",
|
||||
"title": "Overrides",
|
||||
"description": "A map of modules to override",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"title": "Module overrides",
|
||||
"description": "Module names as keys and overrides for the module config as values",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"rust",
|
||||
"compiled"
|
||||
],
|
||||
"nullable": true,
|
||||
"default": "compiled",
|
||||
"description": "Module type \"compiled\" is for the precompiled modules. Module type \"rust\" is for the source code written in rust which can be compiled into a Marine module"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "\"name\" property from the Cargo.toml (for module type \"rust\") or name of the precompiled .wasm file (for module type \"compiled\")",
|
||||
"nullable": true
|
||||
},
|
||||
"maxHeapSize": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Max size of the heap that a module can allocate in format: [number][whitespace?][specificator?] where ? is an optional field and specificator is one from the following (case-insensitive):\n\nK, Kb - kilobyte\n\nKi, KiB - kibibyte\n\nM, Mb - megabyte\n\nMi, MiB - mebibyte\n\nG, Gb - gigabyte\n\nGi, GiB - gibibyte\n\nCurrent limit is 4 GiB"
|
||||
},
|
||||
"loggerEnabled": {
|
||||
"type": "boolean",
|
||||
"nullable": true,
|
||||
"description": "Set true to allow module to use the Marine SDK logger"
|
||||
},
|
||||
"loggingMask": {
|
||||
"type": "number",
|
||||
"nullable": true,
|
||||
"description": "Used for logging management. Example:\n```rust\nconst TARGET_MAP: [(&str, i64); 4] = [\n(\"instruction\", 1 << 1),\n(\"data_cache\", 1 << 2),\n(\"next_peer_pks\", 1 << 3),\n(\"subtree_complete\", 1 << 4),\n];\npub fn main() {\nuse std::collections::HashMap;\nuse std::iter::FromIterator;\n\nlet target_map = HashMap::from_iter(TARGET_MAP.iter().cloned());\n\nmarine_rs_sdk::WasmLoggerBuilder::new()\n .with_target_map(target_map)\n .build()\n .unwrap();\n}\n#[marine]\npub fn foo() {\nlog::info!(target: \"instruction\", \"this will print if (loggingMask & 1) != 0\");\nlog::info!(target: \"data_cache\", \"this will print if (loggingMask & 2) != 0\");\n}\n```\n"
|
||||
},
|
||||
"volumes": {
|
||||
"type": "object",
|
||||
"nullable": true,
|
||||
"required": [],
|
||||
"title": "Volumes",
|
||||
"description": "A map of accessible files and their aliases. Aliases should be used in Marine module development because it's hard to know the full path to a file. (This property replaces the legacy \"mapped_dirs\" property so there is no need to duplicate the same paths in \"preopenedFiles\" dir)"
|
||||
},
|
||||
"preopenedFiles": {
|
||||
"type": "array",
|
||||
"title": "Preopened files",
|
||||
"description": "A list of files and directories that this module could access with WASI",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"nullable": true
|
||||
},
|
||||
"envs": {
|
||||
"type": "object",
|
||||
"title": "Environment variables",
|
||||
"nullable": true,
|
||||
"required": [],
|
||||
"description": "environment variables accessible by a particular module with standard Rust env API like this: std::env::var(IPFS_ADDR_ENV_NAME).\n\nPlease note that Marine adds three additional environment variables. Module environment variables could be examined with repl"
|
||||
},
|
||||
"mountedBinaries": {
|
||||
"title": "Mounted binaries",
|
||||
"type": "object",
|
||||
"nullable": true,
|
||||
"required": [],
|
||||
"description": "A map of binary executable files that module is allowed to call. Example: curl: /usr/bin/curl"
|
||||
},
|
||||
"version": {
|
||||
"type": "number",
|
||||
"const": 0
|
||||
},
|
||||
"get": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Path to module directory or URL to the tar.gz archive with the module"
|
||||
}
|
||||
},
|
||||
"required": [],
|
||||
"nullable": true
|
||||
},
|
||||
"nullable": true,
|
||||
"required": []
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"deployId"
|
||||
]
|
||||
}
|
||||
},
|
||||
"keyPairName": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "The name of the Key Pair to use. It is resolved in the following order (from the lowest to the highest priority):\n1. \"defaultKeyPairName\" property from user-secrets.yaml\n1. \"defaultKeyPairName\" property from project-secrets.yaml\n1. \"keyPairName\" property from the top level of fluence.yaml\n1. \"keyPairName\" property from the \"services\" level of fluence.yaml\n1. \"keyPairName\" property from the individual \"deploy\" property item level of fluence.yaml"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"get",
|
||||
"deploy"
|
||||
]
|
||||
},
|
||||
"required": [],
|
||||
"nullable": true
|
||||
},
|
||||
"relays": {
|
||||
"title": "Relays",
|
||||
"description": "List of Fluence Peer multi addresses or a name of the network. This multi addresses are used for connecting to the Fluence network when deploying. Peer ids from these addresses are also used for deploying in case if you don't specify \"peerId\" or \"peerIds\" property in the deployment config. Default: kras",
|
||||
"type": [
|
||||
"string",
|
||||
"array",
|
||||
"null"
|
||||
],
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"title": "Network name",
|
||||
"enum": [
|
||||
"kras",
|
||||
"stage",
|
||||
"testnet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"title": "Multi addresses",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"peerIds": {
|
||||
"title": "Peer ids",
|
||||
"description": "A map of named peerIds. Example:\n\nMY_PEER: 12D3KooWCMr9mU894i8JXAFqpgoFtx6qnV1LFPSfVc3Y34N4h4LS",
|
||||
"type": "object",
|
||||
"nullable": true,
|
||||
"required": [],
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "Peer id names as keys and the actual peer ids as values"
|
||||
}
|
||||
},
|
||||
"keyPairName": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "The name of the Key Pair to use. It is resolved in the following order (from the lowest to the highest priority):\n1. \"defaultKeyPairName\" property from user-secrets.yaml\n1. \"defaultKeyPairName\" property from project-secrets.yaml\n1. \"keyPairName\" property from the top level of fluence.yaml\n1. \"keyPairName\" property from the \"services\" level of fluence.yaml\n1. \"keyPairName\" property from the individual \"deploy\" property item level of fluence.yaml"
|
||||
},
|
||||
"version": {
|
||||
"type": "number",
|
||||
"const": 2
|
||||
},
|
||||
"dependencies": {
|
||||
"type": "object",
|
||||
"title": "Dependencies",
|
||||
"nullable": true,
|
||||
"description": "A map of dependency versions",
|
||||
"properties": {
|
||||
"npm": {
|
||||
"type": "object",
|
||||
"title": "npm dependencies",
|
||||
"nullable": true,
|
||||
"description": "A map of npm dependency versions. CLI ensures dependencies are installed each time you run aqua",
|
||||
"required": []
|
||||
},
|
||||
"cargo": {
|
||||
"type": "object",
|
||||
"title": "Cargo dependencies",
|
||||
"nullable": true,
|
||||
"description": "A map of cargo dependency versions. CLI ensures dependencies are installed each time you run commands that depend on Marine or Marine REPL",
|
||||
"required": []
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
},
|
||||
"aquaInputPath": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Path to the aqua file or directory with aqua files that you want to compile by default"
|
||||
},
|
||||
"aquaOutputTSPath": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Default compilation target dir from aqua to ts"
|
||||
},
|
||||
"aquaOutputJSPath": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Default compilation target dir from aqua to js. Overrides \"aquaOutputTSPath\" property"
|
||||
},
|
||||
"appTSPath": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Path to the directory where you want to generate app.ts after deployment. If you run registerApp() function in your typescript code after initializing FluenceJS client you will be able to access ids of the deployed services in aqua"
|
||||
},
|
||||
"appJSPath": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Path to the directory where you want to generate app.js after deployment. If you run registerApp() function in your javascript code after initializing FluenceJS client you will be able to access ids of the deployed services in aqua"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version"
|
||||
],
|
||||
"$id": "https://fluence.dev/schemas/fluence.yaml",
|
||||
"title": "fluence.yaml",
|
||||
"description": "Defines Fluence Project, most importantly - what exactly you want to deploy and how. You can use `fluence init` command to generate a template for new Fluence project"
|
||||
}
|
50
aqua-tests/.fluence/schemas/project-secrets.yaml.json
Normal file
50
aqua-tests/.fluence/schemas/project-secrets.yaml.json
Normal file
@ -0,0 +1,50 @@
|
||||
{
|
||||
"$id": "https://fluence.dev/schemas/project-secrets.yaml",
|
||||
"title": "project-secrets.yaml",
|
||||
"type": "object",
|
||||
"description": "Defines project's secret keys that are used only in the scope of this particular Fluence project. You can manage project's keys using commands from `fluence key` group of commands",
|
||||
"properties": {
|
||||
"keyPairs": {
|
||||
"title": "Key Pairs",
|
||||
"description": "Key Pairs available for the particular project",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"title": "Key Pair",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"peerId": {
|
||||
"type": "string"
|
||||
},
|
||||
"secretKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"publicKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"peerId",
|
||||
"secretKey",
|
||||
"publicKey",
|
||||
"name"
|
||||
]
|
||||
}
|
||||
},
|
||||
"defaultKeyPairName": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "Key pair with this name will be used for the deployment by default. You can override it with flags or by using keyPair properties in fluence.yaml"
|
||||
},
|
||||
"version": {
|
||||
"type": "number",
|
||||
"const": 0
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"keyPairs"
|
||||
]
|
||||
}
|
@ -1 +0,0 @@
|
||||
BNidntUryx+hxr7NK2z9nci23sMn3fURB6bTH1K2Ll4=
|
@ -1 +0,0 @@
|
||||
e72l3wuItcfCcQBP6Rn4L0uQRsKmyckZRbYXP1ms59Q=
|
@ -1 +0,0 @@
|
||||
rZxZGGCxECt1opnXjnxrSpV2g6Qt2Fl0KTDoJkox008=
|
@ -1 +0,0 @@
|
||||
I/ZUMsjlt47e9LxYxbk/LamZJUzNxoBikPA+Qqy8yYA=
|
2
aqua-tests/.gitignore
vendored
2
aqua-tests/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
/.fluence/schemas
|
||||
/.fluence/aqua-dependencies/package.json
|
@ -1,8 +1,7 @@
|
||||
aqua Test
|
||||
module Test
|
||||
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import "@fluencelabs/registry/resources-api.aqua"
|
||||
|
||||
export getResource, createResource, getResourceId, get_peer_id, registerService, resolveResource, unregisterService
|
||||
|
||||
func get_peer_id() -> PeerId:
|
||||
|
@ -1,18 +1,15 @@
|
||||
# yaml-language-server: $schema=.fluence/schemas/fluence.json
|
||||
# yaml-language-server: $schema=.fluence/schemas/fluence.yaml.json
|
||||
|
||||
# Defines Fluence Project, most importantly - what exactly you want to deploy and how. You can use `fluence init` command to generate a template for new Fluence project
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/fluence-cli/tree/main/docs/configs/fluence.md
|
||||
|
||||
version: 5
|
||||
|
||||
aquaInputPath: aqua/test.aqua
|
||||
|
||||
version: 2
|
||||
dependencies:
|
||||
npm:
|
||||
"@fluencelabs/aqua": 0.9.2
|
||||
"@fluencelabs/aqua-lib": 0.6.0
|
||||
cargo:
|
||||
marine: 0.14.1
|
||||
mrepl: 0.21.3
|
||||
npm:
|
||||
'@fluencelabs/aqua-lib': 0.9.1
|
||||
'@fluencelabs/spell': 0.6.9
|
||||
'@fluencelabs/trust-graph': 0.4.11
|
||||
aquaInputPath: aqua/test.aqua
|
||||
|
39944
aqua-tests/package-lock.json
generated
39944
aqua-tests/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,35 @@
|
||||
{
|
||||
"name": "aqua-tests",
|
||||
"version": "1.0.0",
|
||||
"description": "Aqua Registry library",
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "0.6.0",
|
||||
"@fluencelabs/registry": "file:../aqua",
|
||||
"@fluencelabs/trust-graph": "3.0.4"
|
||||
},
|
||||
"scripts": {
|
||||
"compile-aqua": "fluence aqua -i . -o ./target/typescript",
|
||||
"generate-aqua": "../service/build.sh",
|
||||
"build": "npm run compile-aqua",
|
||||
"secret": "npx fluence key new"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/fluencelabs/registry.git",
|
||||
"directory": "aqua"
|
||||
},
|
||||
"keywords": [
|
||||
"aqua",
|
||||
"fluence"
|
||||
],
|
||||
"author": "Fluence Labs",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/fluencelabs/registry/issues"
|
||||
},
|
||||
"homepage": "https://github.com/fluencelabs/registry",
|
||||
"devDependencies": {
|
||||
"@fluencelabs/fluence-network-environment": "1.1.2"
|
||||
"@fluencelabs/cli": "0.4.8",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.14"
|
||||
}
|
||||
}
|
||||
|
@ -1,74 +0,0 @@
|
||||
aqua TestSpell
|
||||
|
||||
export spell
|
||||
|
||||
import Op, Debug, Peer, Kademlia from "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import Spell from "@fluencelabs/spell/spell_service.aqua"
|
||||
import Compare from "@fluencelabs/aqua-lib/math.aqua"
|
||||
|
||||
import "@fluencelabs/registry/registry-service.aqua"
|
||||
import "@fluencelabs/registry/registry-api.aqua"
|
||||
import "@fluencelabs/trust-graph/trust-graph.aqua"
|
||||
|
||||
data SpellConfig:
|
||||
expired_interval: u32
|
||||
renew_interval: u32
|
||||
replicate_interval:u32
|
||||
|
||||
-- A hack to allow using timestamp as u32 values
|
||||
-- Aqua doesn't allow truncating values
|
||||
service PeerTimeTrunc("peer"):
|
||||
timestamp_sec() -> u32
|
||||
|
||||
func log_info(spell_id: string, msg: string):
|
||||
Spell spell_id
|
||||
Spell.list_push_string("logs", msg)
|
||||
|
||||
|
||||
-- clears expired records
|
||||
func clear_expired(now:u32):
|
||||
Registry.clear_expired(now)
|
||||
|
||||
-- update stale local records
|
||||
func renew(now:u32):
|
||||
res <- Registry.get_stale_local_records(now)
|
||||
for r <- res.result par:
|
||||
signature <- getRecordSignature(r.metadata, now)
|
||||
putRecord(r.metadata, now, signature.signature!)
|
||||
|
||||
-- get all old records and replicate it by routes
|
||||
func replicate(now:u32):
|
||||
res <- Registry.evict_stale(now)
|
||||
for r <- res.results par:
|
||||
k <- Op.string_to_b58(r.key.id)
|
||||
nodes <- Kademlia.neighborhood(k, nil, nil)
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
tt <- Peer.timestamp_sec()
|
||||
key_weight <- TrustGraph.get_weight(r.key.owner_peer_id, tt)
|
||||
Registry.republish_key(r.key, key_weight, tt)
|
||||
|
||||
records_weights: *WeightResult
|
||||
for record <- r.records:
|
||||
records_weights <- TrustGraph.get_weight(record.metadata.issued_by, tt)
|
||||
Registry.republish_records(r.records, records_weights, tt)
|
||||
|
||||
func spell(config: SpellConfig):
|
||||
Spell "registry-spell"
|
||||
log = (msg: string):
|
||||
log_info("registry-spell", msg)
|
||||
|
||||
check_and_run = (key: string, now:u32, interval: u32, job: u32 -> ()):
|
||||
last_run <- Spell.get_u32(key)
|
||||
need_to_run = !last_run.success || ((now - last_run.value) >= interval)
|
||||
if need_to_run == true:
|
||||
log(Op.concat_strings(Op.concat_strings("Running ", key), "job"))
|
||||
job(now)
|
||||
Spell.set_u32(key, now)
|
||||
|
||||
|
||||
on HOST_PEER_ID:
|
||||
now <- PeerTimeTrunc.timestamp_sec()
|
||||
check_and_run("clear_expired", now, config.expired_interval, clear_expired)
|
||||
check_and_run("renew", now, config.renew_interval, renew)
|
||||
check_and_run("replicate", now, config.replicate_interval, replicate)
|
@ -1,11 +0,0 @@
|
||||
# yaml-language-server: $schema=../.fluence/schemas/spell.yaml.json
|
||||
|
||||
# Defines a spell. You can use `fluence spell new` command to generate a template for new spell
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/fluence-cli/tree/main/docs/configs/spell.md
|
||||
|
||||
version: 0
|
||||
aquaFilePath: ./spell.aqua
|
||||
function: spell
|
||||
clock:
|
||||
periodSec: 6000
|
@ -5,6 +5,7 @@ import os
|
||||
import inspect
|
||||
from config import get_local
|
||||
|
||||
delegator.run("npx fluence dep npm i", block=True)
|
||||
default_peers = json.loads(delegator.run(
|
||||
f"node ./getDefaultPeers.js", block=True).out)
|
||||
|
||||
@ -57,7 +58,7 @@ def run_aqua(func, args, relay=get_random_relay()):
|
||||
# when running one test at a time, the stack is shorter so we need to use a different index
|
||||
test_name = inspect.stack()[-32][3]
|
||||
|
||||
command = f"fluence run -k {test_name} --relay {relay} -f '{call}' --data '{json.dumps(data)}' --quiet --particle-id"
|
||||
command = f"npx fluence run -k {test_name} --relay {relay} -f '{call}' --data '{json.dumps(data)}' --import 'node_modules' --quiet --particle-id"
|
||||
print(command)
|
||||
c = delegator.run(command, block=True)
|
||||
lines = c.out.splitlines()
|
||||
|
@ -2,6 +2,6 @@ import delegator
|
||||
|
||||
|
||||
def test_fluence_cli_version():
|
||||
c = delegator.run(f"fluence --version", block=True)
|
||||
c = delegator.run(f"npx fluence --version", block=True)
|
||||
print(f"Fluence CLI version: {c.out}")
|
||||
assert True
|
||||
|
@ -1,5 +1,3 @@
|
||||
aqua Constants declares *
|
||||
|
||||
-- the number of peers to which data will be replicated during the API call
|
||||
const INITIAL_REPLICATION_FACTOR = 1
|
||||
-- the minimal number of peers requested to obtain the data.
|
||||
|
@ -1,5 +1,3 @@
|
||||
aqua Misc declares *
|
||||
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import "registry-service.aqua"
|
||||
import "constants.aqua"
|
||||
@ -39,7 +37,7 @@ func appendErrors(error1: *Error, error2: *Error):
|
||||
|
||||
func getResourceHelper(resource_id: ResourceId) -> ?Resource, *Error:
|
||||
nodes <- getNeighbors(resource_id)
|
||||
result: *Resource
|
||||
result: ?Resource
|
||||
error: *Error
|
||||
|
||||
resources: *Key
|
||||
|
14604
aqua/package-lock.json
generated
14604
aqua/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,17 +1,18 @@
|
||||
{
|
||||
"name": "@fluencelabs/registry",
|
||||
"version": "0.9.4",
|
||||
"version": "0.8.6",
|
||||
"description": "Aqua Registry library",
|
||||
"files": [
|
||||
"*.aqua"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fluencelabs/aqua-lib": "0.9.1",
|
||||
"@fluencelabs/trust-graph": "0.4.11"
|
||||
"@fluencelabs/aqua-lib": "0.7.0",
|
||||
"@fluencelabs/trust-graph": "0.4.1"
|
||||
},
|
||||
"scripts": {
|
||||
"compile-aqua": "aqua -i . -o ./target/typescript",
|
||||
"generate-aqua": "../service/build.sh",
|
||||
"build": "fluence aqua -i . --dry"
|
||||
"build": "npm run compile-aqua"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -27,5 +28,8 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/fluencelabs/registry/issues"
|
||||
},
|
||||
"homepage": "https://github.com/fluencelabs/registry"
|
||||
"homepage": "https://github.com/fluencelabs/registry",
|
||||
"devDependencies": {
|
||||
"@fluencelabs/aqua": "0.10.3"
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,3 @@
|
||||
aqua RegistryApi declares *
|
||||
|
||||
export getKeySignature, getRecordMetadata
|
||||
export getRecordSignature, getTombstoneSignature
|
||||
export registerKey, putRecord, addTombstone
|
||||
export getKeyMetadata, republishKey
|
||||
|
||||
import "registry-service.aqua"
|
||||
import PeerId, Peer, Sig, SignResult from "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import "@fluencelabs/trust-graph/trust-graph.aqua"
|
||||
@ -22,7 +15,7 @@ func getRecordMetadata(key_id: string, value: string, peer_id: string, relay_id:
|
||||
on INIT_PEER_ID via HOST_PEER_ID:
|
||||
sig_result <- Sig.sign(bytes)
|
||||
|
||||
result: *RecordMetadata
|
||||
result: ?RecordMetadata
|
||||
error: *string
|
||||
if sig_result.success == true:
|
||||
result <- Registry.create_record_metadata(key_id, INIT_PEER_ID, t, value, peer_id, relay_id, service_id, solution, sig_result.signature!)
|
||||
|
@ -1,4 +1,4 @@
|
||||
aqua Registry.Scheduled declares *
|
||||
module Registry.Scheduled declares *
|
||||
|
||||
export clearExpired_86400, replicate_3600, renew_43200
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
aqua Registry declares *
|
||||
module Registry declares *
|
||||
|
||||
data ClearExpiredResult:
|
||||
success: bool
|
||||
|
@ -1,4 +1,4 @@
|
||||
aqua Registry.ResourcesAPI declares *
|
||||
module Registry.ResourcesAPI declares *
|
||||
|
||||
import "registry-service.aqua"
|
||||
import "registry-api.aqua"
|
||||
@ -6,6 +6,10 @@ import "misc.aqua"
|
||||
import "constants.aqua"
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
|
||||
alias ResourceId: string
|
||||
alias Resource: Key
|
||||
alias Error: string
|
||||
|
||||
func getResource(resource_id: ResourceId) -> ?Resource, *Error:
|
||||
on HOST_PEER_ID:
|
||||
result, error <- getResourceHelper(resource_id)
|
||||
@ -20,7 +24,7 @@ func getResourceId(label: string, peer_id: string) -> ResourceId:
|
||||
func createResource(label: string) -> ?ResourceId, *Error:
|
||||
t <- Peer.timestamp_sec()
|
||||
|
||||
resource_id: *ResourceId
|
||||
resource_id: ?ResourceId
|
||||
error: *Error
|
||||
on HOST_PEER_ID:
|
||||
sig_result <- getKeySignature(label, t)
|
||||
@ -53,7 +57,7 @@ func createResource(label: string) -> ?ResourceId, *Error:
|
||||
|
||||
-- Note: resource must be already created
|
||||
func registerService(resource_id: ResourceId, value: string, peer_id: PeerId, service_id: ?string) -> bool, *Error:
|
||||
relay_id: *string
|
||||
relay_id: ?string
|
||||
if peer_id == INIT_PEER_ID:
|
||||
relay_id <<- HOST_PEER_ID
|
||||
|
||||
@ -112,7 +116,7 @@ func registerService(resource_id: ResourceId, value: string, peer_id: PeerId, se
|
||||
|
||||
|
||||
func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error:
|
||||
success: *bool
|
||||
success: ?bool
|
||||
error: *Error
|
||||
|
||||
on HOST_PEER_ID:
|
||||
@ -164,7 +168,7 @@ func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error
|
||||
func resolveResource(resource_id: ResourceId, ack: i16) -> ?[]Record, *Error:
|
||||
on HOST_PEER_ID:
|
||||
nodes <- getNeighbors(resource_id)
|
||||
result: *[]Record
|
||||
result: ?[]Record
|
||||
records: *[]Record
|
||||
error: *Error
|
||||
successful: *bool
|
||||
@ -193,7 +197,7 @@ func resolveResource(resource_id: ResourceId, ack: i16) -> ?[]Record, *Error:
|
||||
-- Execute the given call on providers
|
||||
-- Note that you can provide another Aqua function as an argument to this one
|
||||
func executeOnResource(resource_id: ResourceId, ack: i16, call: Record -> ()) -> bool, *Error:
|
||||
success: *bool
|
||||
success: ?bool
|
||||
result, error <- resolveResource(resource_id, ack)
|
||||
|
||||
if result == nil:
|
||||
|
180
aqua/subnetwork.aqua
Normal file
180
aqua/subnetwork.aqua
Normal file
@ -0,0 +1,180 @@
|
||||
module Registry.Subnetwork declares *
|
||||
|
||||
import "registry-service.aqua"
|
||||
import "registry-api.aqua"
|
||||
import "misc.aqua"
|
||||
import "constants.aqua"
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import "@fluencelabs/trust-graph/trust-graph.aqua"
|
||||
|
||||
alias Error: string
|
||||
|
||||
const MIN_ACK = 2
|
||||
|
||||
func getInsecuredPeerId() -> PeerId:
|
||||
Sig "insecure_sig"
|
||||
peer_id <- Sig.get_peer_id()
|
||||
<- peer_id
|
||||
|
||||
func getKeyInsecuredSignature(label: string, peer_id: PeerId, timestamp_created: u64) -> SignResult:
|
||||
bytes <- Registry.get_key_bytes(label, ?[peer_id], timestamp_created, nil, "")
|
||||
Sig "insecure_sig"
|
||||
result <- Sig.sign(bytes)
|
||||
<- result
|
||||
|
||||
-- peer_id comes from ("insecure_sig" "get_peer_id")
|
||||
func registerSubnetworkKey(deal_id: string, peer_id: PeerId, timestamp_created: u64, signature: []u8) -> RegisterKeyResult:
|
||||
t <- Peer.timestamp_sec()
|
||||
weight <- TrustGraph.get_weight(peer_id, t)
|
||||
result <- Registry.register_key(deal_id, ?[peer_id], timestamp_created, nil, "", signature, weight, t)
|
||||
<- result
|
||||
|
||||
func createSubnetwork(deal_id: string) -> ?string, *Error:
|
||||
t <- Peer.timestamp_sec()
|
||||
|
||||
subnetwork_id: ?string
|
||||
error: *Error
|
||||
on HOST_PEER_ID:
|
||||
peer_id <- getInsecuredPeerId()
|
||||
sig_result <- getKeyInsecuredSignature(deal_id, peer_id, t)
|
||||
if sig_result.success == false:
|
||||
error <<- sig_result.error!
|
||||
else:
|
||||
signature = sig_result.signature!
|
||||
|
||||
id <- Registry.get_key_id(deal_id, peer_id)
|
||||
nodes <- getNeighbors(id)
|
||||
successful: *bool
|
||||
on HOST_PEER_ID:
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
res <- registerSubnetworkKey(deal_id, peer_id, t, signature)
|
||||
|
||||
if res.success:
|
||||
successful <<- true
|
||||
else:
|
||||
error <<- res.error
|
||||
|
||||
success <- wait(successful, INITIAL_REPLICATION_FACTOR, DEFAULT_TIMEOUT)
|
||||
|
||||
if success == false:
|
||||
error <<- "key wasn't created: timeout exceeded"
|
||||
else:
|
||||
subnetwork_id <<- id
|
||||
|
||||
<- subnetwork_id, error
|
||||
|
||||
func getWorkerRecordMetadata(subnetwork_id: string) -> ?RecordMetadata, ?string:
|
||||
t <- Peer.timestamp_sec()
|
||||
relay_id = ?[HOST_PEER_ID]
|
||||
bytes <- Registry.get_record_metadata_bytes(subnetwork_id, INIT_PEER_ID, t, "", INIT_PEER_ID, relay_id, nil, nil)
|
||||
on INIT_PEER_ID:
|
||||
Sig "sig"
|
||||
sig_result <- Sig.sign(bytes)
|
||||
|
||||
result: ?RecordMetadata
|
||||
error: *string
|
||||
if sig_result.success == true:
|
||||
result <- Registry.create_record_metadata(subnetwork_id, INIT_PEER_ID, t, "", INIT_PEER_ID, relay_id, nil, nil, sig_result.signature!)
|
||||
else:
|
||||
error <<- sig_result.error!
|
||||
|
||||
<- result, error
|
||||
|
||||
func getWorkerRecordSignature(metadata: RecordMetadata, timestamp_created: u64) -> SignResult:
|
||||
signature: *SignResult
|
||||
bytes <- Registry.get_record_bytes(metadata, timestamp_created)
|
||||
|
||||
on INIT_PEER_ID:
|
||||
Sig "sig"
|
||||
signature <- Sig.sign(bytes)
|
||||
|
||||
<- signature!
|
||||
|
||||
func registerWorker(subnetwork_id: string) -> bool, *Error:
|
||||
success: *bool
|
||||
error: *Error
|
||||
|
||||
metadata, err <- getWorkerRecordMetadata(subnetwork_id)
|
||||
if metadata == nil:
|
||||
success <<- false
|
||||
error <<- err!
|
||||
else:
|
||||
t <- Peer.timestamp_sec()
|
||||
sig_result = getWorkerRecordSignature(metadata!, t)
|
||||
if sig_result.success == false:
|
||||
error <<- sig_result.error!
|
||||
success <<- false
|
||||
else:
|
||||
key, error_get <- getResourceHelper(subnetwork_id)
|
||||
|
||||
if key == nil:
|
||||
appendErrors(error, error_get)
|
||||
success <<- false
|
||||
else:
|
||||
republish_result <- republishKey(key!)
|
||||
if republish_result.success == false:
|
||||
error <<- republish_result.error
|
||||
success <<- false
|
||||
else:
|
||||
p_res <- putRecord(metadata!, t, sig_result.signature!)
|
||||
if p_res.success == false:
|
||||
error <<- p_res.error
|
||||
success <<- false
|
||||
else:
|
||||
nodes <- getNeighbors(subnetwork_id)
|
||||
|
||||
successful: *bool
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
republish_res <- republishKey(key!)
|
||||
if republish_res.success == false:
|
||||
error <<- republish_res.error
|
||||
else:
|
||||
put_res <- putRecord(metadata!, t, sig_result.signature!)
|
||||
if put_res.success:
|
||||
successful <<- true
|
||||
else:
|
||||
error <<- put_res.error
|
||||
|
||||
success <- wait(successful, INITIAL_REPLICATION_FACTOR, DEFAULT_TIMEOUT)
|
||||
|
||||
succ = success!
|
||||
if succ == false:
|
||||
error <<- "worker hasn't registered: timeout exceeded"
|
||||
|
||||
<- succ, error
|
||||
|
||||
func resolveSubnetwork(deal_id: string) -> ?[]Record, *Error:
|
||||
result: ?[]Record
|
||||
error: *Error
|
||||
on HOST_PEER_ID:
|
||||
peer_id <- getInsecuredPeerId()
|
||||
key_id <- Registry.get_key_id(deal_id, peer_id)
|
||||
|
||||
nodes <- getNeighbors(key_id)
|
||||
records: *[]Record
|
||||
successful: *bool
|
||||
for n <- nodes par:
|
||||
on n:
|
||||
try:
|
||||
t <- Peer.timestamp_sec()
|
||||
get_result <- Registry.get_records(key_id, t)
|
||||
if get_result.success:
|
||||
records <<- get_result.result
|
||||
successful <<- true
|
||||
else:
|
||||
error <<- get_result.error
|
||||
|
||||
success <- wait(successful, MIN_ACK, DEFAULT_TIMEOUT)
|
||||
if success == false:
|
||||
error <<- "timeout exceeded"
|
||||
else:
|
||||
merged <- Registry.merge(records)
|
||||
if merged.success == false:
|
||||
error <<- merged.error
|
||||
else:
|
||||
result <<- merged.result
|
||||
<- result, error
|
@ -1,744 +0,0 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck
|
||||
/**
|
||||
*
|
||||
* This file is auto-generated. Do not edit manually: changes may be erased.
|
||||
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
|
||||
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
|
||||
* Aqua version: 0.11.9-release-please-1c9388a-1275-1
|
||||
*
|
||||
*/
|
||||
import type { IFluenceClient as IFluenceClient$$, CallParams as CallParams$$ } from '@fluencelabs/js-client.api';
|
||||
import {
|
||||
v5_callFunction as callFunction$$,
|
||||
v5_registerService as registerService$$,
|
||||
} from '@fluencelabs/js-client.api';
|
||||
|
||||
|
||||
|
||||
// Services
|
||||
|
||||
// Functions
|
||||
export const getResourceHelper_script = `
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "resource_id") [] resource_id)
|
||||
)
|
||||
(xor
|
||||
(new $resources
|
||||
(new $successful
|
||||
(new $result
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("op" "string_to_b58") [resource_id] k)
|
||||
(call %init_peer_id% ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(par
|
||||
(fold nodes n-0
|
||||
(par
|
||||
(xor
|
||||
(seq
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon -relay- $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(seq
|
||||
(call n-0 ("registry" "get_key_metadata") [resource_id] get_result)
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(match get_result.$.success true
|
||||
(seq
|
||||
(ap get_result.$.key $resources)
|
||||
(ap true $successful)
|
||||
)
|
||||
)
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon -relay- $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
)
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon %init_peer_id% $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call n-0 ("op" "concat_strings") [get_result.$.error " on "] e)
|
||||
(call n-0 ("op" "concat_strings") [e n-0] $error)
|
||||
)
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon -relay- $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
)
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon %init_peer_id% $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon -relay- $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
(new $-ephemeral-stream-
|
||||
(new #-ephemeral-canon-
|
||||
(canon %init_peer_id% $-ephemeral-stream- #-ephemeral-canon-)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
)
|
||||
(next n-0)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(new $status
|
||||
(new $result-0
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "sub") [1 1] sub)
|
||||
(new $successful_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [sub 1] successful_incr)
|
||||
(fold $successful successful_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap successful_fold_var $successful_test)
|
||||
(canon %init_peer_id% $successful_test #successful_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #successful_iter_canon.length successful_incr
|
||||
(null)
|
||||
)
|
||||
(next successful_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $successful_test #successful_result_canon)
|
||||
)
|
||||
(ap #successful_result_canon successful_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("math" "sub") [1 1] sub-0)
|
||||
)
|
||||
(ap "ok" $status)
|
||||
)
|
||||
(call %init_peer_id% ("peer" "timeout") [6000 "timeout"] $status)
|
||||
)
|
||||
(new $status_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [0 1] status_incr)
|
||||
(fold $status status_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap status_fold_var $status_test)
|
||||
(canon %init_peer_id% $status_test #status_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #status_iter_canon.length status_incr
|
||||
(null)
|
||||
)
|
||||
(next status_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $status_test #status_result_canon)
|
||||
)
|
||||
(ap #status_result_canon status_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(match status_gate.$.[0] "ok"
|
||||
(ap true $result-0)
|
||||
)
|
||||
(ap false $result-0)
|
||||
)
|
||||
)
|
||||
(new $result-0_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [0 1] result-0_incr)
|
||||
(fold $result-0 result-0_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap result-0_fold_var $result-0_test)
|
||||
(canon %init_peer_id% $result-0_test #result-0_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #result-0_iter_canon.length result-0_incr
|
||||
(null)
|
||||
)
|
||||
(next result-0_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $result-0_test #result-0_result_canon)
|
||||
)
|
||||
(ap #result-0_result_canon result-0_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(match result-0_gate.$.[0] false
|
||||
(ap "resource not found: timeout exceeded" $error)
|
||||
)
|
||||
(seq
|
||||
(seq
|
||||
(canon %init_peer_id% $resources #resources_canon)
|
||||
(call %init_peer_id% ("registry" "merge_keys") [#resources_canon] merge_result)
|
||||
)
|
||||
(xor
|
||||
(match merge_result.$.success true
|
||||
(ap merge_result.$.key $result)
|
||||
)
|
||||
(ap merge_result.$.error $error)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $result #-result-fix-0)
|
||||
)
|
||||
(ap #-result-fix-0 -result-flat-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $error #error_canon)
|
||||
)
|
||||
(call %init_peer_id% ("callbackSrv" "response") [-result-flat-0 #error_canon])
|
||||
)
|
||||
`
|
||||
|
||||
export type GetResourceHelperResult = [{ challenge: number[]; challenge_type: string; id: string; label: string; owner_peer_id: string; signature: number[]; timestamp_created: number; } | null, string[]]
|
||||
export function getResourceHelper(
|
||||
resource_id: string,
|
||||
config?: {ttl?: number}
|
||||
): Promise<GetResourceHelperResult>;
|
||||
|
||||
export function getResourceHelper(
|
||||
peer: IFluenceClient$$,
|
||||
resource_id: string,
|
||||
config?: {ttl?: number}
|
||||
): Promise<GetResourceHelperResult>;
|
||||
|
||||
export function getResourceHelper(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "getResourceHelper",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
"resource_id" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "unlabeledProduct",
|
||||
"items" : [
|
||||
{
|
||||
"tag" : "option",
|
||||
"type" : {
|
||||
"tag" : "struct",
|
||||
"name" : "Key",
|
||||
"fields" : {
|
||||
"challenge" : {
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "u8"
|
||||
}
|
||||
},
|
||||
"label" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
},
|
||||
"signature" : {
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "u8"
|
||||
}
|
||||
},
|
||||
"id" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
},
|
||||
"owner_peer_id" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
},
|
||||
"challenge_type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
},
|
||||
"timestamp_created" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "u64"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
getResourceHelper_script
|
||||
)
|
||||
}
|
||||
|
||||
export const appendErrors_script = `
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "error1") [] error1-iter)
|
||||
)
|
||||
(fold error1-iter error1-item-0
|
||||
(seq
|
||||
(ap error1-item-0 $error1)
|
||||
(next error1-item-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "error2") [] error2-iter)
|
||||
)
|
||||
(fold error2-iter error2-item-0
|
||||
(seq
|
||||
(ap error2-item-0 $error2)
|
||||
(next error2-item-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(seq
|
||||
(canon %init_peer_id% $error2 #error2_canon)
|
||||
(fold #error2_canon e-0
|
||||
(seq
|
||||
(ap e-0 $error1-0)
|
||||
(next e-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function appendErrors(
|
||||
error1: string[],
|
||||
error2: string[],
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function appendErrors(
|
||||
peer: IFluenceClient$$,
|
||||
error1: string[],
|
||||
error2: string[],
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function appendErrors(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "appendErrors",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
"error1" : {
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
},
|
||||
"error2" : {
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "nil"
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
appendErrors_script
|
||||
)
|
||||
}
|
||||
|
||||
export const getNeighbors_script = `
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "resource_id") [] resource_id)
|
||||
)
|
||||
(xor
|
||||
(seq
|
||||
(call %init_peer_id% ("op" "string_to_b58") [resource_id] k)
|
||||
(call %init_peer_id% ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("callbackSrv" "response") [nodes])
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function getNeighbors(
|
||||
resource_id: string,
|
||||
config?: {ttl?: number}
|
||||
): Promise<string[]>;
|
||||
|
||||
export function getNeighbors(
|
||||
peer: IFluenceClient$$,
|
||||
resource_id: string,
|
||||
config?: {ttl?: number}
|
||||
): Promise<string[]>;
|
||||
|
||||
export function getNeighbors(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "getNeighbors",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
"resource_id" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "unlabeledProduct",
|
||||
"items" : [
|
||||
{
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
getNeighbors_script
|
||||
)
|
||||
}
|
||||
|
||||
export const wait_script = `
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "successful") [] successful-iter)
|
||||
)
|
||||
(fold successful-iter successful-item-0
|
||||
(seq
|
||||
(ap successful-item-0 $successful)
|
||||
(next successful-item-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "len") [] len)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "timeout") [] timeout)
|
||||
)
|
||||
(xor
|
||||
(new $status
|
||||
(new $result
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "sub") [len 1] sub)
|
||||
(new $successful_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [sub 1] successful_incr)
|
||||
(fold $successful successful_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap successful_fold_var $successful_test)
|
||||
(canon %init_peer_id% $successful_test #successful_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #successful_iter_canon.length successful_incr
|
||||
(null)
|
||||
)
|
||||
(next successful_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $successful_test #successful_result_canon)
|
||||
)
|
||||
(ap #successful_result_canon successful_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("math" "sub") [len 1] sub-0)
|
||||
)
|
||||
(ap "ok" $status)
|
||||
)
|
||||
(call %init_peer_id% ("peer" "timeout") [timeout "timeout"] $status)
|
||||
)
|
||||
(new $status_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [0 1] status_incr)
|
||||
(fold $status status_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap status_fold_var $status_test)
|
||||
(canon %init_peer_id% $status_test #status_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #status_iter_canon.length status_incr
|
||||
(null)
|
||||
)
|
||||
(next status_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $status_test #status_result_canon)
|
||||
)
|
||||
(ap #status_result_canon status_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(match status_gate.$.[0] "ok"
|
||||
(ap true $result)
|
||||
)
|
||||
(ap false $result)
|
||||
)
|
||||
)
|
||||
(new $result_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("math" "add") [0 1] result_incr)
|
||||
(fold $result result_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap result_fold_var $result_test)
|
||||
(canon %init_peer_id% $result_test #result_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #result_iter_canon.length result_incr
|
||||
(null)
|
||||
)
|
||||
(next result_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon %init_peer_id% $result_test #result_result_canon)
|
||||
)
|
||||
(ap #result_result_canon result_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
(call %init_peer_id% ("callbackSrv" "response") [result_gate.$.[0]])
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function wait(
|
||||
successful: boolean[],
|
||||
len: number,
|
||||
timeout: number,
|
||||
config?: {ttl?: number}
|
||||
): Promise<boolean>;
|
||||
|
||||
export function wait(
|
||||
peer: IFluenceClient$$,
|
||||
successful: boolean[],
|
||||
len: number,
|
||||
timeout: number,
|
||||
config?: {ttl?: number}
|
||||
): Promise<boolean>;
|
||||
|
||||
export function wait(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "wait",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
"successful" : {
|
||||
"tag" : "array",
|
||||
"type" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "bool"
|
||||
}
|
||||
},
|
||||
"len" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "i16"
|
||||
},
|
||||
"timeout" : {
|
||||
"tag" : "scalar",
|
||||
"name" : "u16"
|
||||
}
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "unlabeledProduct",
|
||||
"items" : [
|
||||
{
|
||||
"tag" : "scalar",
|
||||
"name" : "bool"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
wait_script
|
||||
)
|
||||
}
|
||||
|
||||
/* eslint-enable */
|
File diff suppressed because it is too large
Load Diff
@ -1,322 +0,0 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck
|
||||
/**
|
||||
*
|
||||
* This file is auto-generated. Do not edit manually: changes may be erased.
|
||||
* Generated by Aqua compiler: https://github.com/fluencelabs/aqua/.
|
||||
* If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues
|
||||
* Aqua version: 0.11.9-release-please-1c9388a-1275-1
|
||||
*
|
||||
*/
|
||||
import type { IFluenceClient as IFluenceClient$$, CallParams as CallParams$$ } from '@fluencelabs/js-client.api';
|
||||
import {
|
||||
v5_callFunction as callFunction$$,
|
||||
v5_registerService as registerService$$,
|
||||
} from '@fluencelabs/js-client.api';
|
||||
|
||||
|
||||
|
||||
// Services
|
||||
|
||||
// Functions
|
||||
export const replicate_3600_script = `
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(xor
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("peer" "timestamp_sec") [] t)
|
||||
(call -relay- ("registry" "evict_stale") [t] res)
|
||||
)
|
||||
(par
|
||||
(fold res.$.results r-0
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("op" "string_to_b58") [r-0.$.key.id] k)
|
||||
(call -relay- ("kad" "neighborhood") [k [] []] nodes)
|
||||
)
|
||||
(par
|
||||
(fold nodes n-0
|
||||
(par
|
||||
(new $records_weights
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call n-0 ("peer" "timestamp_sec") [] tt)
|
||||
(call n-0 ("trust-graph" "get_weight") [r-0.$.key.owner_peer_id tt] key_weight)
|
||||
)
|
||||
(call n-0 ("registry" "republish_key") [r-0.$.key key_weight tt])
|
||||
)
|
||||
(fold r-0.$.records record-0
|
||||
(seq
|
||||
(call n-0 ("trust-graph" "get_weight") [record-0.$.metadata.issued_by tt] $records_weights)
|
||||
(next record-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(canon n-0 $records_weights #records_weights_canon)
|
||||
)
|
||||
(call n-0 ("registry" "republish_records") [r-0.$.records #records_weights_canon tt])
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
)
|
||||
(next n-0)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(next r-0)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function replicate_3600(
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function replicate_3600(
|
||||
peer: IFluenceClient$$,
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function replicate_3600(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "replicate_3600",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "nil"
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
replicate_3600_script
|
||||
)
|
||||
}
|
||||
|
||||
export const clearExpired_86400_script = `
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(xor
|
||||
(xor
|
||||
(seq
|
||||
(call -relay- ("peer" "timestamp_sec") [] t)
|
||||
(call -relay- ("registry" "clear_expired") [t])
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function clearExpired_86400(
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function clearExpired_86400(
|
||||
peer: IFluenceClient$$,
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function clearExpired_86400(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "clearExpired_86400",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "nil"
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
clearExpired_86400_script
|
||||
)
|
||||
}
|
||||
|
||||
export const renew_43200_script = `
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(xor
|
||||
(xor
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("peer" "timestamp_sec") [] t)
|
||||
(call -relay- ("registry" "get_stale_local_records") [t] res)
|
||||
)
|
||||
(par
|
||||
(fold res.$.result r-0
|
||||
(par
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(new $signature
|
||||
(seq
|
||||
(xor
|
||||
(mismatch r-0.$.metadata.peer_id %init_peer_id%
|
||||
(xor
|
||||
(seq
|
||||
(call r-0.$.metadata.peer_id ("registry" "get_record_bytes") [r-0.$.metadata t] bytes)
|
||||
(call r-0.$.metadata.peer_id ("sig" "sign") [bytes] $signature)
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
)
|
||||
(xor
|
||||
(seq
|
||||
(call -relay- ("registry" "get_record_bytes") [r-0.$.metadata t] bytess)
|
||||
(xor
|
||||
(call %init_peer_id% ("sig" "sign") [bytess] $signature)
|
||||
(fail %last_error%)
|
||||
)
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
)
|
||||
(new $signature_test
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call -relay- ("math" "add") [0 1] signature_incr)
|
||||
(fold $signature signature_fold_var
|
||||
(seq
|
||||
(seq
|
||||
(ap signature_fold_var $signature_test)
|
||||
(canon -relay- $signature_test #signature_iter_canon)
|
||||
)
|
||||
(xor
|
||||
(match #signature_iter_canon.length signature_incr
|
||||
(null)
|
||||
)
|
||||
(next signature_fold_var)
|
||||
)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
)
|
||||
(canon -relay- $signature_test #signature_result_canon)
|
||||
)
|
||||
(ap #signature_result_canon signature_gate)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(call -relay- ("peer" "timestamp_sec") [] t-0)
|
||||
)
|
||||
(call -relay- ("trust-graph" "get_weight") [r-0.$.metadata.issued_by t-0] weight)
|
||||
)
|
||||
(call -relay- ("registry" "put_record") [r-0.$.metadata t signature_gate.$.[0].signature.[0] weight t-0] result)
|
||||
)
|
||||
(next r-0)
|
||||
)
|
||||
(never)
|
||||
)
|
||||
(null)
|
||||
)
|
||||
)
|
||||
(fail %last_error%)
|
||||
)
|
||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 0])
|
||||
)
|
||||
)
|
||||
`
|
||||
|
||||
|
||||
export function renew_43200(
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function renew_43200(
|
||||
peer: IFluenceClient$$,
|
||||
config?: {ttl?: number}
|
||||
): Promise<void>;
|
||||
|
||||
export function renew_43200(...args: any) {
|
||||
|
||||
|
||||
return callFunction$$(
|
||||
args,
|
||||
{
|
||||
"functionName" : "renew_43200",
|
||||
"arrow" : {
|
||||
"tag" : "arrow",
|
||||
"domain" : {
|
||||
"tag" : "labeledProduct",
|
||||
"fields" : {
|
||||
|
||||
}
|
||||
},
|
||||
"codomain" : {
|
||||
"tag" : "nil"
|
||||
}
|
||||
},
|
||||
"names" : {
|
||||
"relay" : "-relay-",
|
||||
"getDataSrv" : "getDataSrv",
|
||||
"callbackSrv" : "callbackSrv",
|
||||
"responseSrv" : "callbackSrv",
|
||||
"responseFnName" : "response",
|
||||
"errorHandlingSrv" : "errorHandlingSrv",
|
||||
"errorFnName" : "error"
|
||||
}
|
||||
},
|
||||
renew_43200_script
|
||||
)
|
||||
}
|
||||
|
||||
/* eslint-enable */
|
31
build.sh
31
build.sh
@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit -o nounset -o pipefail
|
||||
set -x
|
||||
|
||||
# set current working directory to script directory to run script from everywhere
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Build the service
|
||||
./service/build.sh
|
||||
|
||||
DISTRO_TARGET=distro/registry-service
|
||||
mkdir -p "$DISTRO_TARGET"
|
||||
|
||||
cd ./aqua
|
||||
npm pack
|
||||
cd -
|
||||
|
||||
packed_archive_file_name_pattern="fluencelabs-registry-"
|
||||
packed_archive_file_name=$(find "./aqua" -type f -name "${packed_archive_file_name_pattern}*")
|
||||
|
||||
cd ./aqua-tests
|
||||
echo " '@fluencelabs/registry': file:.$packed_archive_file_name" >> "./fluence.yaml"
|
||||
fluence dep i
|
||||
fluence aqua -i ./spell/spell.aqua --no-relay --air -o "../$DISTRO_TARGET/air"
|
||||
cd -
|
||||
|
||||
cp service/artifacts/registry.wasm service/artifacts/sqlite3.wasm distro/Config.toml "$DISTRO_TARGET"
|
||||
|
||||
cd distro
|
||||
cargo build
|
43
builtin-package/package.sh
Executable file
43
builtin-package/package.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
set -o pipefail -o nounset -o errexit
|
||||
|
||||
# set current working directory to script directory to run script from everywhere
|
||||
cd "$(dirname "$0")"
|
||||
PACKAGE_DIR="$(pwd)/../registry"
|
||||
SCHEDULED="$PACKAGE_DIR/scheduled"
|
||||
|
||||
(
|
||||
rm -rf $PACKAGE_DIR
|
||||
mkdir -p $PACKAGE_DIR
|
||||
)
|
||||
(
|
||||
echo "*** compile scheduled scripts ***"
|
||||
cd ../aqua
|
||||
npx aqua --version
|
||||
npx aqua --no-relay --air -i ./registry-scheduled-scripts.aqua -o "$SCHEDULED"
|
||||
)
|
||||
|
||||
(
|
||||
echo "*** copy wasm files ***"
|
||||
cd ../service
|
||||
cp artifacts/*.wasm "$PACKAGE_DIR"
|
||||
)
|
||||
|
||||
REGISTRY_CID=$(ipfs add -q --only-hash --cid-version=1 --chunker=size-262144 $PACKAGE_DIR/registry.wasm)
|
||||
SQLITE_CID=$(ipfs add -q --only-hash --cid-version=1 --chunker=size-262144 $PACKAGE_DIR/sqlite3.wasm)
|
||||
mv $PACKAGE_DIR/registry.wasm "$PACKAGE_DIR"/"$REGISTRY_CID".wasm
|
||||
mv $PACKAGE_DIR/sqlite3.wasm "$PACKAGE_DIR"/"$SQLITE_CID".wasm
|
||||
cp registry_config.json "$PACKAGE_DIR"/"$REGISTRY_CID"_config.json
|
||||
cp sqlite3_config.json "$PACKAGE_DIR"/"$SQLITE_CID"_config.json
|
||||
|
||||
# write blueprint.json
|
||||
echo "{}" | jq --arg registry_cid "$REGISTRY_CID" --arg sqlite_cid "$SQLITE_CID" '{"name": "registry", "dependencies":[{"/":$sqlite_cid},{"/":$registry_cid}]}' > "$PACKAGE_DIR/blueprint.json"
|
||||
|
||||
|
||||
(
|
||||
echo "*** create builtin distribution package ***"
|
||||
cd ..
|
||||
tar -f registry.tar.gz -zcv ./registry
|
||||
)
|
||||
|
||||
echo "*** done ***"
|
8
builtin-package/registry_config.json
Normal file
8
builtin-package/registry_config.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "registry",
|
||||
"max_heap_size": "8 MiB",
|
||||
"preopened_files": ["/tmp"],
|
||||
"mapped_dirs": {
|
||||
"tmp": "./tmp"
|
||||
}
|
||||
}
|
4
builtin-package/sqlite3_config.json
Normal file
4
builtin-package/sqlite3_config.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "sqlite3",
|
||||
"max_heap_size": "64 MiB"
|
||||
}
|
53
distro/Cargo.lock
generated
53
distro/Cargo.lock
generated
@ -1,53 +0,0 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "built"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38d17f4d6e4dc36d1a02fbedc2753a096848e7c1b0772f7654eab8e2c927dd53"
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
|
||||
|
||||
[[package]]
|
||||
name = "maplit"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
|
||||
|
||||
[[package]]
|
||||
name = "registry-distro"
|
||||
version = "0.9.4"
|
||||
dependencies = [
|
||||
"built",
|
||||
"maplit",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.160"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.96"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
@ -1,16 +0,0 @@
|
||||
[package]
|
||||
name = "registry-distro"
|
||||
version = "0.9.4"
|
||||
edition = "2021"
|
||||
build = "built.rs"
|
||||
include = [ "/src", "built.rs", "Cargo.toml", "registry-service"]
|
||||
description = "Distribution package for the registry service including scheduled scripts"
|
||||
license = "Apache-2.0"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
[dependencies]
|
||||
maplit = "1.0.2"
|
||||
serde_json = "1.0.96"
|
||||
|
||||
[build-dependencies]
|
||||
built = "0.7.1"
|
@ -1,16 +0,0 @@
|
||||
modules_dir = "."
|
||||
total_memory_limit = "Infinity"
|
||||
|
||||
[[module]]
|
||||
name = "sqlite3"
|
||||
mem_pages_count = 100
|
||||
logger_enabled = false
|
||||
|
||||
[module.wasi]
|
||||
preopened_files = ["./tmp"]
|
||||
mapped_dirs = { "tmp" = "./tmp" }
|
||||
|
||||
[[module]]
|
||||
name = "registry"
|
||||
mem_pages_count = 1
|
||||
logger_enabled = false
|
@ -1,3 +0,0 @@
|
||||
fn main() {
|
||||
built::write_built_file().expect("Failed to acquire build-time information")
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
use maplit::hashmap;
|
||||
use std::collections::HashMap;
|
||||
use serde_json::{json, Value as JValue};
|
||||
|
||||
pub const REGISTRY_WASM: &'static [u8] = include_bytes!("../registry-service/registry.wasm");
|
||||
pub const SQLITE_WASM: &'static [u8] = include_bytes!("../registry-service/sqlite3.wasm");
|
||||
pub const CONFIG: &'static [u8] = include_bytes!("../registry-service/Config.toml");
|
||||
|
||||
pub const REGISTRY_SPELL: &'static str =
|
||||
include_str!("../registry-service/air/spell.spell.air");
|
||||
|
||||
pub mod build_info {
|
||||
include!(concat!(env!("OUT_DIR"), "/built.rs"));
|
||||
}
|
||||
|
||||
pub use build_info::PKG_VERSION as VERSION;
|
||||
|
||||
pub fn modules() -> std::collections::HashMap<&'static str, &'static [u8]> {
|
||||
maplit::hashmap! {
|
||||
"sqlite3" => SQLITE_WASM,
|
||||
"registry" => REGISTRY_WASM,
|
||||
}
|
||||
}
|
||||
|
||||
pub struct DistrSpell {
|
||||
/// AIR script of the spell
|
||||
pub air: &'static str,
|
||||
/// Initial key-value records for spells KV storage
|
||||
pub init_data: HashMap<&'static str, JValue>,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct RegistryConfig {
|
||||
pub expired_interval: u32,
|
||||
pub renew_interval: u32,
|
||||
pub replicate_interval: u32
|
||||
}
|
||||
|
||||
pub fn registry_spell(config: RegistryConfig) -> DistrSpell {
|
||||
DistrSpell {
|
||||
air: REGISTRY_SPELL,
|
||||
init_data: hashmap!{
|
||||
"config" => json!( {
|
||||
"expired_interval": config.expired_interval,
|
||||
"renew_interval": config.renew_interval,
|
||||
"replicate_interval": config.replicate_interval,
|
||||
}),
|
||||
},
|
||||
}
|
||||
}
|
8
example/.gitignore
vendored
Normal file
8
example/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
.idea
|
||||
.DS_Store
|
||||
.fluence
|
||||
**/node_modules
|
||||
**/target/
|
||||
.repl_history
|
||||
generated
|
||||
.vscode/settings.json
|
@ -18,10 +18,13 @@ This example shows how to use Registry to discover and call fluence services wit
|
||||
|
||||
## Set up the environment
|
||||
|
||||
1. [Install the latest version of Fluence CLI](https://github.com/fluencelabs/cli#installation-and-usage)
|
||||
1. Install the latest version of Fluence CLI:
|
||||
```sh
|
||||
npm i -g @fluencelabs/cli
|
||||
```
|
||||
2. Install Fluence project dependencies. It may take a while:
|
||||
```sh
|
||||
fluence dep i
|
||||
fluence dependency i
|
||||
```
|
||||
3. Install JS dependencies:
|
||||
```sh
|
||||
@ -89,7 +92,9 @@ It uses `createResource` function from Resources API to register the Resource wi
|
||||
You should see output similar to this:
|
||||
|
||||
```
|
||||
5pYpWB3ozi6fi1EjNs9X5kE156aA6iLECxTuVdJgUaLB
|
||||
[
|
||||
"5pYpWB3ozi6fi1EjNs9X5kE156aA6iLECxTuVdJgUaLB"
|
||||
]
|
||||
```
|
||||
|
||||
It is `resourceId`, which we will use to register our services, and then we will be able to use the same `resourceId` to discover and call our services
|
||||
@ -103,8 +108,9 @@ This command calls [registerEchoService](src/aqua/main.aqua#L26) aqua function,
|
||||
You should see this output:
|
||||
```
|
||||
[
|
||||
true,
|
||||
[]
|
||||
[
|
||||
true
|
||||
]
|
||||
]
|
||||
```
|
||||
It means the service is registered in Registry and should be accessible by anyone who only has the `resourceId` of this service.
|
1820
example/echo_service/modules/echo_service/Cargo.lock
generated
Normal file
1820
example/echo_service/modules/echo_service/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@ name = "echo_service"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
marine-rs-sdk = "0.10.2"
|
||||
marine-rs-sdk = "=0.7.1"
|
||||
|
||||
[dev-dependencies]
|
||||
marine-rs-sdk-test = "=0.12.0"
|
||||
marine-rs-sdk-test = "=0.8.1"
|
5
example/echo_service/modules/echo_service/module.yaml
Normal file
5
example/echo_service/modules/echo_service/module.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
# yaml-language-server: $schema=../../../.fluence/schemas/module.yaml.json
|
||||
|
||||
version: 0
|
||||
type: rust
|
||||
name: echo_service
|
7
example/echo_service/service.yaml
Normal file
7
example/echo_service/service.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
# yaml-language-server: $schema=../.fluence/schemas/service.yaml.json
|
||||
|
||||
version: 0
|
||||
name: echo_service
|
||||
modules:
|
||||
facade:
|
||||
get: modules/echo_service
|
21
example/fluence.yaml
Normal file
21
example/fluence.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
# yaml-language-server: $schema=.fluence/schemas/fluence.yaml.json
|
||||
|
||||
version: 2
|
||||
|
||||
services:
|
||||
echo_service:
|
||||
get: ./echo_service
|
||||
deploy:
|
||||
- deployId: default
|
||||
|
||||
dependencies:
|
||||
npm:
|
||||
"@fluencelabs/aqua": 0.9.2
|
||||
"@fluencelabs/registry": 0.6.2
|
||||
"@fluencelabs/aqua-lib": 0.6.0
|
||||
cargo:
|
||||
marine: 0.12.4
|
||||
mrepl: 0.18.6
|
||||
|
||||
relays:
|
||||
- /dns4/stage.fluence.dev/tcp/19002/wss/p2p/12D3KooWMigkP4jkVyufq5JnDJL6nXvyjeaDNpRfEZqQhsG3sYCU
|
11841
example/package-lock.json
generated
Normal file
11841
example/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
21
example/package.json
Normal file
21
example/package.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "echo",
|
||||
"version": "0.0.0",
|
||||
"description": "Fluence Peer with echo service",
|
||||
"scripts": {
|
||||
"compile-aqua": "fluence aqua -i ./src/aqua/export.aqua -o ./src/generated",
|
||||
"start": "npm run compile-aqua && npx ts-node src/echo.ts"
|
||||
},
|
||||
"keywords": [
|
||||
"aqua",
|
||||
"dht",
|
||||
"p2p"
|
||||
],
|
||||
"author": "Fluence Labs",
|
||||
"dependencies": {
|
||||
"@fluencelabs/fluence": "0.28.0",
|
||||
"@fluencelabs/fluence-network-environment": "1.0.14",
|
||||
"@fluencelabs/trust-graph": "3.0.4"
|
||||
},
|
||||
"prettier": {}
|
||||
}
|
28
example/src/aqua/main.aqua
Normal file
28
example/src/aqua/main.aqua
Normal file
@ -0,0 +1,28 @@
|
||||
module Main
|
||||
|
||||
export and
|
||||
|
||||
|
||||
func and(l: bool, r: bool) -> bool:
|
||||
res: ?bool
|
||||
if l:
|
||||
res <<- r
|
||||
else:
|
||||
res <<- false
|
||||
<- res!
|
||||
|
||||
func or(l: bool, r: bool) -> bool:
|
||||
res: ?bool
|
||||
if l:
|
||||
res <<- true
|
||||
else:
|
||||
res <<- r
|
||||
<- res!
|
||||
|
||||
func not(u: bool) -> bool:
|
||||
res: ?bool
|
||||
if u:
|
||||
res <<- false
|
||||
else:
|
||||
res <<- true
|
||||
<- res!
|
@ -13,33 +13,32 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { Fluence, KeyPair } from '@fluencelabs/js-client';
|
||||
import { registerEchoJSService } from './compiled-aqua/main.ts';
|
||||
import { Fluence, KeyPair, setLogLevel } from "@fluencelabs/fluence";
|
||||
import { stage } from "@fluencelabs/fluence-network-environment";
|
||||
import { registerEchoService, registerService } from "./generated/export";
|
||||
import assert from "node:assert";
|
||||
|
||||
// don't store your secret key in the code. This is just for the example
|
||||
const secretKey = "Iz3HUmNIB78lkNNVmMkDKrju0nCivtkJNyObrFAr774=";
|
||||
|
||||
async function main() {
|
||||
const keyPair = await KeyPair.fromEd25519SK(Buffer.from(secretKey, "base64"));
|
||||
const keypair = await KeyPair.fromEd25519SK(Buffer.from(secretKey, "base64"));
|
||||
const connectTo = stage[0];
|
||||
assert(connectTo !== undefined);
|
||||
|
||||
await Fluence.connect({
|
||||
multiaddr:
|
||||
"/ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR",
|
||||
peerId: "12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR",
|
||||
}, { keyPair: {
|
||||
type: 'Ed25519',
|
||||
source: keyPair.toEd25519PrivateKey()
|
||||
}});
|
||||
|
||||
const peerId = Fluence.getClient().getPeerId();
|
||||
const relayId = Fluence.getClient().getRelayPeerId();
|
||||
// connect to the Fluence network
|
||||
await Fluence.start({ connectTo, KeyPair: keypair });
|
||||
setLogLevel("SILENT");
|
||||
|
||||
const peerId = Fluence.getStatus().peerId;
|
||||
const relayId = Fluence.getStatus().relayPeerId;
|
||||
assert(peerId !== null && relayId !== null);
|
||||
console.log(`📗 created a fluence peer ${peerId} with relay ${relayId}`);
|
||||
|
||||
const serviceId = "echo";
|
||||
|
||||
// register local service with serviceId "echo"
|
||||
registerEchoJSService(serviceId, {
|
||||
await registerEchoService(serviceId, {
|
||||
echo(msg) {
|
||||
console.log(`Received message: ${msg}`);
|
||||
return `${peerId}: ${msg}`;
|
||||
@ -51,19 +50,19 @@ async function main() {
|
||||
// don't register if resource id isn't passed
|
||||
if (resourceId === undefined) {
|
||||
console.log(
|
||||
`
|
||||
`
|
||||
Copy this code to call this service:
|
||||
|
||||
fluence run -f 'echoJS("${peerId}", "${relayId}", "${serviceId}", "hi")'`
|
||||
);
|
||||
} else {
|
||||
// const [success, error] = await registerService(
|
||||
// resourceId,
|
||||
// "echo",
|
||||
// peerId,
|
||||
// serviceId
|
||||
// );
|
||||
// console.log(`Registration result: ${success || error}`);
|
||||
const [success, error] = await registerService(
|
||||
resourceId,
|
||||
"echo",
|
||||
peerId,
|
||||
serviceId
|
||||
);
|
||||
console.log(`Registration result: ${success || error}`);
|
||||
}
|
||||
|
||||
console.log("\nPress any key to stop fluence js peer");
|
||||
@ -72,7 +71,7 @@ async function main() {
|
||||
process.stdin.setRawMode(true);
|
||||
process.stdin.resume();
|
||||
process.stdin.on("data", async () => {
|
||||
await Fluence.disconnect();
|
||||
await Fluence.stop();
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
aqua Deals declares *
|
||||
|
||||
data Deal:
|
||||
definition: string
|
||||
timestamp: string
|
||||
dealIdOriginal: string
|
||||
dealId: string
|
||||
chainNetwork: string
|
||||
chainNetworkId: u64
|
||||
|
||||
data Deals:
|
||||
dealName: ?Deal
|
||||
|
||||
func get() -> Deals:
|
||||
<- Deals(
|
||||
dealName=?[Deal(
|
||||
definition="bafkreidqtqpmmferdscg4bqrs74cl6ckib3vyhvejhrc4watln5xxcrj2i",
|
||||
timestamp="2023-12-19T20:01:24.334Z",
|
||||
dealIdOriginal="0xEb92A1B5c10AD7BFdcaf23Cb7DDA9ea062CD07E8",
|
||||
dealId="eb92a1b5c10ad7bfdcaf23cb7dda9ea062cd07e8",
|
||||
chainNetwork="local",
|
||||
chainNetworkId=31337
|
||||
)]
|
||||
)
|
@ -1,4 +0,0 @@
|
||||
aqua Hosts declares *
|
||||
|
||||
func get() -> ?u8:
|
||||
<- nil
|
@ -1,2 +0,0 @@
|
||||
service EchoService("echo_service"):
|
||||
echo(msg: string) -> string
|
@ -1,20 +0,0 @@
|
||||
aquavm_pool_size = 2
|
||||
tcp_port = 7_771
|
||||
websocket_port = 9_991
|
||||
http_port = 18_080
|
||||
|
||||
[system_services]
|
||||
enable = [ "registry", "decider" ]
|
||||
|
||||
[system_services.aqua_ipfs]
|
||||
external_api_multiaddr = "/ip4/127.0.0.1/tcp/5001"
|
||||
local_api_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
|
||||
[system_services.decider]
|
||||
decider_period_sec = 10
|
||||
worker_ipfs_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
network_api_endpoint = "http://chain:8545"
|
||||
network_id = 31_337
|
||||
start_block = "earliest"
|
||||
matcher_address = "0x0e1F3B362E22B2Dc82C9E35d6e62998C7E8e2349"
|
||||
wallet_key = "0x3cc23e0227bd17ea5d6ea9d42b5eaa53ad41b1974de4755c79fe236d361a6fd5"
|
@ -1,20 +0,0 @@
|
||||
aquavm_pool_size = 2
|
||||
tcp_port = 7_772
|
||||
websocket_port = 9_992
|
||||
http_port = 18_081
|
||||
|
||||
[system_services]
|
||||
enable = [ "registry", "decider" ]
|
||||
|
||||
[system_services.aqua_ipfs]
|
||||
external_api_multiaddr = "/ip4/127.0.0.1/tcp/5001"
|
||||
local_api_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
|
||||
[system_services.decider]
|
||||
decider_period_sec = 10
|
||||
worker_ipfs_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
network_api_endpoint = "http://chain:8545"
|
||||
network_id = 31_337
|
||||
start_block = "earliest"
|
||||
matcher_address = "0x0e1F3B362E22B2Dc82C9E35d6e62998C7E8e2349"
|
||||
wallet_key = "0x089162470bcfc93192b95bff0a1860d063266875c782af9d882fcca125323b41"
|
@ -1,20 +0,0 @@
|
||||
aquavm_pool_size = 2
|
||||
tcp_port = 7_773
|
||||
websocket_port = 9_993
|
||||
http_port = 18_082
|
||||
|
||||
[system_services]
|
||||
enable = [ "registry", "decider" ]
|
||||
|
||||
[system_services.aqua_ipfs]
|
||||
external_api_multiaddr = "/ip4/127.0.0.1/tcp/5001"
|
||||
local_api_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
|
||||
[system_services.decider]
|
||||
decider_period_sec = 10
|
||||
worker_ipfs_multiaddr = "/dns4/ipfs/tcp/5001"
|
||||
network_api_endpoint = "http://chain:8545"
|
||||
network_id = 31_337
|
||||
start_block = "earliest"
|
||||
matcher_address = "0x0e1F3B362E22B2Dc82C9E35d6e62998C7E8e2349"
|
||||
wallet_key = "0xdacd4b197ee7e9efdd5db1921c6c558d88e2c8b69902b8bafc812fb226a6b5e0"
|
@ -1,102 +0,0 @@
|
||||
# yaml-language-server: $schema=schemas/docker-compose.json
|
||||
|
||||
# Defines a multi-containers based application.
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/docker-compose.md
|
||||
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
chain:
|
||||
image: fluencelabs/chain-rpc:0.2.20
|
||||
ports:
|
||||
- 8545:8545
|
||||
ipfs:
|
||||
image: ipfs/go-ipfs
|
||||
ports:
|
||||
- 5001:5001
|
||||
- 4001:4001
|
||||
environment:
|
||||
IPFS_PROFILE: server
|
||||
volumes:
|
||||
- ./ipfs/:/container-init.d/
|
||||
nox-0:
|
||||
image: fluencelabs/nox:0.16.3
|
||||
pull_policy: always
|
||||
ports:
|
||||
- 7771:7771
|
||||
- 9991:9991
|
||||
environment:
|
||||
WASM_LOG: info
|
||||
RUST_LOG: debug,particle_reap=debug,aquamarine=warn,aquamarine::particle_functions=debug,aquamarine::log=debug,aquamarine::aqua_runtime=error,ipfs_effector=off,ipfs_pure=off,system_services=debug,marine_core::module::marine_module=info,tokio_threadpool=info,tokio_reactor=info,mio=info,tokio_io=info,soketto=info,yamux=info,multistream_select=info,libp2p_secio=info,libp2p_websocket::framed=info,libp2p_ping=info,libp2p_core::upgrade::apply=info,libp2p_kad::kbucket=info,cranelift_codegen=info,wasmer_wasi=info,cranelift_codegen=info,wasmer_wasi=info,run-console=trace,wasmtime_cranelift=off,wasmtime_jit=off,libp2p_tcp=off,libp2p_swarm=off,particle_protocol::libp2p_protocol::upgrade=info,libp2p_mplex=off,particle_reap=off,netlink_proto=warn
|
||||
FLUENCE_MAX_SPELL_PARTICLE_TTL: 9s
|
||||
FLUENCE_ROOT_KEY_PAIR__PATH: /run/secrets/nox-0
|
||||
command:
|
||||
- --config=/run/configs/nox-0_Config.toml
|
||||
- --external-maddrs
|
||||
- /dns4/nox-0/tcp/7771
|
||||
- /dns4/nox-0/tcp/9991/ws
|
||||
- --allow-private-ips
|
||||
- --local
|
||||
depends_on:
|
||||
- ipfs
|
||||
volumes:
|
||||
- ./configs/nox-0_Config.toml:/run/configs/nox-0_Config.toml
|
||||
secrets:
|
||||
- nox-0
|
||||
nox-1:
|
||||
image: fluencelabs/nox:0.16.3
|
||||
pull_policy: always
|
||||
ports:
|
||||
- 7772:7772
|
||||
- 9992:9992
|
||||
environment:
|
||||
WASM_LOG: info
|
||||
RUST_LOG: debug,particle_reap=debug,aquamarine=warn,aquamarine::particle_functions=debug,aquamarine::log=debug,aquamarine::aqua_runtime=error,ipfs_effector=off,ipfs_pure=off,system_services=debug,marine_core::module::marine_module=info,tokio_threadpool=info,tokio_reactor=info,mio=info,tokio_io=info,soketto=info,yamux=info,multistream_select=info,libp2p_secio=info,libp2p_websocket::framed=info,libp2p_ping=info,libp2p_core::upgrade::apply=info,libp2p_kad::kbucket=info,cranelift_codegen=info,wasmer_wasi=info,cranelift_codegen=info,wasmer_wasi=info,run-console=trace,wasmtime_cranelift=off,wasmtime_jit=off,libp2p_tcp=off,libp2p_swarm=off,particle_protocol::libp2p_protocol::upgrade=info,libp2p_mplex=off,particle_reap=off,netlink_proto=warn
|
||||
FLUENCE_MAX_SPELL_PARTICLE_TTL: 9s
|
||||
FLUENCE_ROOT_KEY_PAIR__PATH: /run/secrets/nox-1
|
||||
command:
|
||||
- --config=/run/configs/nox-1_Config.toml
|
||||
- --external-maddrs
|
||||
- /dns4/nox-1/tcp/7772
|
||||
- /dns4/nox-1/tcp/9992/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-0/tcp/7771
|
||||
depends_on:
|
||||
- ipfs
|
||||
volumes:
|
||||
- ./configs/nox-1_Config.toml:/run/configs/nox-1_Config.toml
|
||||
secrets:
|
||||
- nox-1
|
||||
nox-2:
|
||||
image: fluencelabs/nox:0.16.3
|
||||
pull_policy: always
|
||||
ports:
|
||||
- 7773:7773
|
||||
- 9993:9993
|
||||
environment:
|
||||
WASM_LOG: info
|
||||
RUST_LOG: debug,particle_reap=debug,aquamarine=warn,aquamarine::particle_functions=debug,aquamarine::log=debug,aquamarine::aqua_runtime=error,ipfs_effector=off,ipfs_pure=off,system_services=debug,marine_core::module::marine_module=info,tokio_threadpool=info,tokio_reactor=info,mio=info,tokio_io=info,soketto=info,yamux=info,multistream_select=info,libp2p_secio=info,libp2p_websocket::framed=info,libp2p_ping=info,libp2p_core::upgrade::apply=info,libp2p_kad::kbucket=info,cranelift_codegen=info,wasmer_wasi=info,cranelift_codegen=info,wasmer_wasi=info,run-console=trace,wasmtime_cranelift=off,wasmtime_jit=off,libp2p_tcp=off,libp2p_swarm=off,particle_protocol::libp2p_protocol::upgrade=info,libp2p_mplex=off,particle_reap=off,netlink_proto=warn
|
||||
FLUENCE_MAX_SPELL_PARTICLE_TTL: 9s
|
||||
FLUENCE_ROOT_KEY_PAIR__PATH: /run/secrets/nox-2
|
||||
command:
|
||||
- --config=/run/configs/nox-2_Config.toml
|
||||
- --external-maddrs
|
||||
- /dns4/nox-2/tcp/7773
|
||||
- /dns4/nox-2/tcp/9993/ws
|
||||
- --allow-private-ips
|
||||
- --bootstraps=/dns/nox-0/tcp/7771
|
||||
depends_on:
|
||||
- ipfs
|
||||
volumes:
|
||||
- ./configs/nox-2_Config.toml:/run/configs/nox-2_Config.toml
|
||||
secrets:
|
||||
- nox-2
|
||||
|
||||
secrets:
|
||||
nox-0:
|
||||
file: secrets/nox-0.txt
|
||||
nox-1:
|
||||
file: secrets/nox-1.txt
|
||||
nox-2:
|
||||
file: secrets/nox-2.txt
|
@ -1,17 +0,0 @@
|
||||
# yaml-language-server: $schema=schemas/workers.json
|
||||
|
||||
# A result of app deployment. This file is created automatically after successful deployment using `fluence workers deploy` command
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/workers.md
|
||||
|
||||
version: 1
|
||||
|
||||
deals:
|
||||
local:
|
||||
dealName:
|
||||
definition: bafkreidqtqpmmferdscg4bqrs74cl6ckib3vyhvejhrc4watln5xxcrj2i
|
||||
timestamp: 2023-12-19T20:01:24.334Z
|
||||
dealIdOriginal: "0xEb92A1B5c10AD7BFdcaf23Cb7DDA9ea062CD07E8"
|
||||
dealId: eb92a1b5c10ad7bfdcaf23cb7dda9ea062cd07e8
|
||||
chainNetwork: local
|
||||
chainNetworkId: 31337
|
12
examples/archived/1-registry/.gitignore
vendored
12
examples/archived/1-registry/.gitignore
vendored
@ -1,12 +0,0 @@
|
||||
.idea
|
||||
.DS_Store
|
||||
/.fluence/secrets
|
||||
/.fluence/env.yaml
|
||||
/.fluence/schemas
|
||||
/.fluence/tmp
|
||||
**/node_modules
|
||||
**/target/
|
||||
.repl_history
|
||||
/.vscode/settings.json
|
||||
/src/ts/src/aqua
|
||||
/src/js/src/aqua
|
2847
examples/archived/1-registry/Cargo.lock
generated
2847
examples/archived/1-registry/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,2 +0,0 @@
|
||||
[workspace]
|
||||
members = [ "src/services/echo_service/modules/echo_service" ]
|
@ -1,24 +0,0 @@
|
||||
# yaml-language-server: $schema=.fluence/schemas/fluence.json
|
||||
|
||||
# Defines Fluence Project, most importantly - what exactly you want to deploy and how. You can use `fluence init` command to generate a template for new Fluence project
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/fluence.md
|
||||
|
||||
version: 5
|
||||
|
||||
aquaInputPath: src/aqua/main.aqua
|
||||
|
||||
deals:
|
||||
dealName:
|
||||
minWorkers: 1
|
||||
targetWorkers: 3
|
||||
services: [ echo_service ]
|
||||
spells: []
|
||||
|
||||
services:
|
||||
echo_service:
|
||||
get: src/services/echo_service
|
||||
|
||||
relaysPath: src/frontend/src
|
||||
|
||||
aquaOutputTSPath: src/frontend/src/compiled-aqua
|
@ -1,32 +0,0 @@
|
||||
# yaml-language-server: $schema=.fluence/schemas/provider.json
|
||||
|
||||
# Defines config used for provider set up
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/provider.md
|
||||
|
||||
version: 0
|
||||
|
||||
env: local
|
||||
|
||||
nox:
|
||||
systemServices:
|
||||
enable:
|
||||
- registry
|
||||
- decider
|
||||
|
||||
computePeers:
|
||||
nox-0:
|
||||
computeUnits: 1
|
||||
nox-1:
|
||||
computeUnits: 1
|
||||
nox-2:
|
||||
computeUnits: 1
|
||||
|
||||
offers:
|
||||
offer-0:
|
||||
maxCollateralPerWorker: 1
|
||||
minPricePerWorkerEpoch: 0.1
|
||||
computePeers:
|
||||
- nox-0
|
||||
- nox-1
|
||||
- nox-2
|
@ -1,73 +0,0 @@
|
||||
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||
import "@fluencelabs/aqua-lib/subnet.aqua"
|
||||
import createResource, registerService, resolveResource from "@fluencelabs/registry/resources-api.aqua"
|
||||
|
||||
use "deals.aqua"
|
||||
use "hosts.aqua"
|
||||
import "services.aqua"
|
||||
|
||||
service EchoJSService:
|
||||
echo(msg: string) -> string
|
||||
|
||||
func echo(msg: string) -> string:
|
||||
deals <- Deals.get()
|
||||
dealId = deals.dealName!.dealIdOriginal
|
||||
|
||||
on HOST_PEER_ID:
|
||||
subnet <- Subnet.resolve(dealId)
|
||||
|
||||
if subnet.success == false:
|
||||
Console.print(["Failed to resolve subnet: ", subnet.error])
|
||||
|
||||
w = subnet.workers!
|
||||
|
||||
on w.worker_id! via w.host_id:
|
||||
res <- EchoService.echo(msg)
|
||||
<- res
|
||||
|
||||
|
||||
func echoJS(peerId: string, relayId: string, serviceId: string, msg: string) -> string:
|
||||
on peerId via relayId:
|
||||
EchoService serviceId
|
||||
res <- EchoService.echo(msg)
|
||||
<- res
|
||||
|
||||
func createRes(label: string) -> ?string:
|
||||
resourceId, error <- createResource(label)
|
||||
<- error
|
||||
|
||||
func registerResourceService(resourceId: string, serviceId: string) -> bool, *string:
|
||||
on HOST_PEER_ID:
|
||||
-- TODO: change hardcoded local peer to resolve
|
||||
res, message <- registerService(resourceId, "" , "12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR", [serviceId])
|
||||
<- res, message
|
||||
|
||||
|
||||
func echoAll(resourceId: string, msg: string) -> *string:
|
||||
-- 2 is the min number of peers we want to ask
|
||||
records <- resolveResource(resourceId, 2)
|
||||
results: *string
|
||||
for r <- records!:
|
||||
on HOST_PEER_ID:
|
||||
EchoService r.metadata.service_id!
|
||||
results <- EchoService.echo(msg)
|
||||
<- results
|
||||
|
||||
func showSubnets() -> *string:
|
||||
deals <- Deals.get()
|
||||
dealId = deals.dealName!.dealIdOriginal
|
||||
|
||||
on HOST_PEER_ID:
|
||||
results: *string
|
||||
subnet <- Subnet.resolve(dealId)
|
||||
|
||||
if subnet.success == false:
|
||||
Console.print(["Failed to resolve subnet: ", subnet.error])
|
||||
|
||||
for w <- subnet.workers:
|
||||
results <<- w.host_id
|
||||
|
||||
<- results
|
||||
|
||||
|
||||
|
3547
examples/archived/1-registry/src/frontend/package-lock.json
generated
3547
examples/archived/1-registry/src/frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,24 +0,0 @@
|
||||
{
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"name": "echo",
|
||||
"version": "0.0.0",
|
||||
"description": "Fluence Peer with echo service",
|
||||
"scripts": {
|
||||
"start": "node --loader ts-node/esm src/echo.ts"
|
||||
},
|
||||
"keywords": [
|
||||
"aqua",
|
||||
"dht",
|
||||
"p2p"
|
||||
],
|
||||
"author": "Fluence Labs",
|
||||
"dependencies": {
|
||||
"@fluencelabs/js-client": "0.5.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@fluencelabs/registry": "^0.9.2",
|
||||
"ts-node": "10.9.2",
|
||||
"typescript": "5.0.2"
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"multiaddr": "/ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWJTYHn4U8jJtL1XZvTonAgv2Tn6EEbZSauw56dhr3SNKg",
|
||||
"peerId": "12D3KooWJTYHn4U8jJtL1XZvTonAgv2Tn6EEbZSauw56dhr3SNKg"
|
||||
},
|
||||
{
|
||||
"multiaddr": "/ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWQrMQg2Ksqag5465Tnu8VQH3c4Z4NSosdS854bAsHEcwo",
|
||||
"peerId": "12D3KooWQrMQg2Ksqag5465Tnu8VQH3c4Z4NSosdS854bAsHEcwo"
|
||||
},
|
||||
{
|
||||
"multiaddr": "/ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWQCYhkDv4jPe7ymEo8AwRNMzLZRmfyrbV53vKpVS7fZA7",
|
||||
"peerId": "12D3KooWQCYhkDv4jPe7ymEo8AwRNMzLZRmfyrbV53vKpVS7fZA7"
|
||||
}
|
||||
]
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"useDefineForClassFields": true,
|
||||
"module": "ESNext",
|
||||
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
# yaml-language-server: $schema=../../../../../.fluence/schemas/module.json
|
||||
|
||||
# Defines [Marine Module](https://fluence.dev/docs/build/concepts/#modules). You can use `fluence module new` command to generate a template for new module
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/module.md
|
||||
|
||||
version: 0
|
||||
|
||||
type: rust
|
||||
|
||||
name: echo_service
|
@ -1,13 +0,0 @@
|
||||
# yaml-language-server: $schema=../../../.fluence/schemas/service.json
|
||||
|
||||
# Defines a [Marine service](https://fluence.dev/docs/build/concepts/#services), most importantly the modules that the service consists of. You can use `fluence service new` command to generate a template for new service
|
||||
|
||||
# Documentation: https://github.com/fluencelabs/cli/tree/main/docs/configs/service.md
|
||||
|
||||
version: 0
|
||||
|
||||
name: echo_service
|
||||
|
||||
modules:
|
||||
facade:
|
||||
get: modules/echo_service
|
@ -1,5 +1,9 @@
|
||||
[toolchain]
|
||||
channel = "nightly-2023-08-27"
|
||||
components = [ "rustfmt", "clippy" ]
|
||||
targets = [ "x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "wasm32-wasi" ]
|
||||
channel = "nightly-2022-12-01"
|
||||
components = ["rustfmt", "clippy"]
|
||||
targets = [
|
||||
"x86_64-unknown-linux-gnu",
|
||||
"x86_64-apple-darwin",
|
||||
"wasm32-wasi"
|
||||
]
|
||||
profile = "minimal"
|
||||
|
3256
service/Cargo.lock
generated
3256
service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "registry"
|
||||
version = "0.9.4"
|
||||
version = "0.8.6"
|
||||
authors = ["Fluence Labs"]
|
||||
edition = "2018"
|
||||
publish = false
|
||||
@ -10,21 +10,21 @@ name = "registry"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
bs58 = "=0.5.0"
|
||||
marine-rs-sdk = "=0.10.3"
|
||||
marine-sqlite-connector = "=0.9.3"
|
||||
bs58 = "=0.4.0"
|
||||
marine-rs-sdk = "=0.7.1"
|
||||
marine-sqlite-connector = "=0.8.0"
|
||||
fstrings = "=0.2.3"
|
||||
boolinator = "=2.4.0"
|
||||
toml = "=0.8.8"
|
||||
serde = { version = "1.0.188", features = ["derive"] }
|
||||
thiserror = "=1.0.50"
|
||||
sha2 = "=0.10.8"
|
||||
fluence-keypair = "=0.10.4"
|
||||
libp2p-identity = "=0.2.8"
|
||||
toml = "=0.7.3"
|
||||
serde = { version = "=1.0.152", features = ["derive"] }
|
||||
thiserror = "=1.0.38"
|
||||
sha2 = "=0.10.6"
|
||||
fluence-keypair = "=0.8.1"
|
||||
libp2p-core = { version = "=0.36.0", default-features = false, features = [ "secp256k1" ] }
|
||||
|
||||
[dev-dependencies]
|
||||
marine-rs-sdk-test = "=0.12.1"
|
||||
rusqlite = "=0.30.0"
|
||||
marine-rs-sdk-test = "=0.8.1"
|
||||
rusqlite = "=0.28.0"
|
||||
|
||||
[build-dependencies]
|
||||
marine-rs-sdk-test = "=0.12.1"
|
||||
marine-rs-sdk-test = "=0.8.1"
|
||||
|
@ -1,12 +1,19 @@
|
||||
modules_dir = "artifacts"
|
||||
total_memory_limit = "Infinity"
|
||||
modules_dir = "artifacts/"
|
||||
|
||||
[[module]]
|
||||
name = "sqlite3"
|
||||
mem_pages_count = 100
|
||||
logger_enabled = false
|
||||
|
||||
[module.wasi]
|
||||
preopened_files = ["/tmp"]
|
||||
mapped_dirs = { "tmp" = "/tmp" }
|
||||
|
||||
[[module]]
|
||||
name = "registry"
|
||||
mem_pages_count = 1
|
||||
logger_enabled = false
|
||||
|
||||
[module.wasi]
|
||||
preopened_files = ["/tmp"]
|
||||
mapped_dirs = { "tmp" = "/tmp" }
|
||||
|
@ -20,7 +20,7 @@ fn main() {
|
||||
"registry".to_string(),
|
||||
ServiceDescription {
|
||||
config_path: "Config.toml".to_string(),
|
||||
modules_dir: None,
|
||||
modules_dir: Some("artifacts".to_string()),
|
||||
},
|
||||
)];
|
||||
|
||||
|
@ -13,10 +13,7 @@ mkdir -p artifacts
|
||||
cp target/wasm32-wasi/release/registry.wasm artifacts/
|
||||
|
||||
# download SQLite 3 to use in tests
|
||||
curl -L https://github.com/fluencelabs/sqlite/releases/download/sqlite-wasm-v0.18.2/sqlite3.wasm -o artifacts/sqlite3.wasm
|
||||
curl -L https://github.com/fluencelabs/sqlite/releases/download/sqlite-wasm-v0.18.1/sqlite3.wasm -o artifacts/sqlite3.wasm
|
||||
|
||||
# generate Aqua bindings
|
||||
marine aqua artifacts/registry.wasm -s Registry -i registry >../aqua/registry-service.aqua
|
||||
|
||||
mkdir -p ../distro/registry-service
|
||||
cp artifacts/registry.wasm artifacts/sqlite3.wasm ../distro/registry-service
|
||||
|
5
service/rust-toolchain.toml
Normal file
5
service/rust-toolchain.toml
Normal file
@ -0,0 +1,5 @@
|
||||
[toolchain]
|
||||
channel = "nightly-2022-10-05"
|
||||
components = [ "rustfmt", "clippy" ]
|
||||
targets = [ "x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "wasm32-wasi" ]
|
||||
profile = "minimal"
|
@ -18,7 +18,7 @@ use crate::error::ServiceError;
|
||||
use crate::WeightResult;
|
||||
use boolinator::Boolinator;
|
||||
use fluence_keypair::PublicKey;
|
||||
use libp2p_identity::PeerId;
|
||||
use libp2p_core::PeerId;
|
||||
use std::convert::TryFrom;
|
||||
use std::str::FromStr;
|
||||
|
||||
|
@ -194,7 +194,7 @@ pub fn republish_records(
|
||||
pub fn merge_two(a: Vec<Record>, b: Vec<Record>) -> MergeResult {
|
||||
merge_records(
|
||||
a.into_iter()
|
||||
.chain(b)
|
||||
.chain(b.into_iter())
|
||||
.map(|record| RecordInternal {
|
||||
record,
|
||||
..Default::default()
|
||||
|
@ -226,7 +226,7 @@ mod tests {
|
||||
) -> EvictStaleResult {
|
||||
let cp = CPWrapper::new("peer_id", "host_id").add_timestamp_tetraplets(0);
|
||||
let evict_result = registry.evict_stale_cp(current_timestamp_sec, cp.get());
|
||||
assert!(evict_result.success, "{}", evict_result.error);
|
||||
assert!(evict_result.success, evict_result.error);
|
||||
evict_result
|
||||
}
|
||||
|
||||
@ -387,7 +387,7 @@ mod tests {
|
||||
solution,
|
||||
weight,
|
||||
);
|
||||
assert!(result.success, "{}", result.error);
|
||||
assert!(result.success, result.error);
|
||||
}
|
||||
|
||||
fn get_records(
|
||||
@ -474,7 +474,7 @@ mod tests {
|
||||
timestamp_issued,
|
||||
solution,
|
||||
);
|
||||
assert!(result.success, "{}", result.error);
|
||||
assert!(result.success, result.error);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -846,7 +846,7 @@ mod tests {
|
||||
let expired_timestamp = timestamp_created + DEFAULT_EXPIRED_AGE;
|
||||
let cp = CPWrapper::new("peer_id", "host_id").add_timestamp_tetraplets(0);
|
||||
let result = registry.clear_expired_cp(expired_timestamp, cp.get());
|
||||
assert!(result.success, "{}", result.error);
|
||||
assert!(result.success, result.error);
|
||||
assert_eq!(result.count_keys, 1);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user