{"id":21584237,"url":"https://github.com/singnet/snet-daemon","last_synced_at":"2026-03-06T07:03:00.363Z","repository":{"id":33591277,"uuid":"137923856","full_name":"singnet/snet-daemon","owner":"singnet","description":"Service Daemon exposes an AI application as an API that is accessible through the SingularityNET Network. It handles all interaction with the blockchain for authorization and payment using AGI tokens and passes through API calls to the AI application.","archived":false,"fork":false,"pushed_at":"2026-03-01T22:29:55.000Z","size":44757,"stargazers_count":52,"open_issues_count":49,"forks_count":64,"subscribers_count":13,"default_branch":"master","last_synced_at":"2026-03-02T01:39:38.879Z","etag":null,"topics":["snet-platform"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/singnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-06-19T17:28:37.000Z","updated_at":"2026-03-01T22:29:03.000Z","dependencies_parsed_at":"2024-05-21T12:58:42.224Z","dependency_job_id":"2a0189dd-a2b4-4e89-9cfb-f3dc5ac914f6","html_url":"https://github.com/singnet/snet-daemon","commit_stats":null,"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/singnet/snet-daemon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singnet%2Fsnet-daemon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singnet%2Fsnet-daemon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singnet%2Fsnet-daemon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singnet%2Fsnet-daemon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/singnet","download_url":"https://codeload.github.com/singnet/snet-daemon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singnet%2Fsnet-daemon/sbom","scorecard":{"id":668602,"data":{"date":"2025-08-11","repo":{"name":"github.com/singnet/snet-daemon","commit":"693d9cab511736008b6e949cc1cb48cb5b3646a3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Code-Review","score":4,"reason":"Found 5/12 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/singnet/snet-daemon/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: resources/linuxbuild/Dockerfile:1: pin your Docker image by updating golang:alpine to golang:alpine@sha256:244baa35bcfaf9a5b3444519df6d42554a1f92dc33820bd98f0662df270d8a6a","Warn: goCommand not pinned by hash: resources/linuxbuild/Dockerfile:7","Warn: goCommand not pinned by hash: resources/linuxbuild/Dockerfile:8","Warn: goCommand not pinned by hash: scripts/install_deps:9","Warn: goCommand not pinned by hash: scripts/install_deps:10","Warn: goCommand not pinned by hash: scripts/test:13","Warn: goCommand not pinned by hash: scripts/test:14","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   6 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v6.0.0 not signed: https://api.github.com/repos/singnet/snet-daemon/releases/214783632","Warn: release artifact v5.2.1 not signed: https://api.github.com/repos/singnet/snet-daemon/releases/203920735","Warn: release artifact v5.2 not signed: https://api.github.com/repos/singnet/snet-daemon/releases/202054572","Warn: release artifact v5.1.6 not signed: https://api.github.com/repos/singnet/snet-daemon/releases/192456553","Warn: release artifact v5.1.5 not signed: https://api.github.com/repos/singnet/snet-daemon/releases/180002635","Warn: release artifact v6.0.0 does not have provenance: https://api.github.com/repos/singnet/snet-daemon/releases/214783632","Warn: release artifact v5.2.1 does not have provenance: https://api.github.com/repos/singnet/snet-daemon/releases/203920735","Warn: release artifact v5.2 does not have provenance: https://api.github.com/repos/singnet/snet-daemon/releases/202054572","Warn: release artifact v5.1.6 does not have provenance: https://api.github.com/repos/singnet/snet-daemon/releases/192456553","Warn: release artifact v5.1.5 does not have provenance: https://api.github.com/repos/singnet/snet-daemon/releases/180002635"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3218"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T19:06:28.039Z","repository_id":33591277,"created_at":"2025-08-21T19:06:28.039Z","updated_at":"2025-08-21T19:06:28.039Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30164900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T04:43:31.446Z","status":"ssl_error","status_checked_at":"2026-03-06T04:40:30.133Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["snet-platform"],"created_at":"2024-11-24T15:01:08.128Z","updated_at":"2026-03-06T07:03:00.348Z","avatar_url":"https://github.com/singnet.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# SingularityNET Daemon\n\n![ci/cd build]( https://github.com/singnet/snet-daemon/actions/workflows/build.yml/badge.svg)\n![ci/cd build]( https://github.com/singnet/snet-daemon/actions/workflows/test.yml/badge.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/singnet/snet-daemon/v6)](https://goreportcard.com/report/github.com/singnet/snet-daemon/v6)\n[![Coverage](https://coveralls.io/repos/github/singnet/snet-daemon/badge.svg?branch=master)](https://coveralls.io/github/singnet/snet-daemon?branch=master)\n[![Releases](https://img.shields.io/github/release/singnet/snet-daemon/all.svg?style=flat-square)](https://github.com/singnet/snet-daemon/releases)\n[![LICENSE](https://img.shields.io/github/license/singnet/snet-daemon.svg?style=flat-square)](https://github.com/singnet/snet-daemon/blob/main/LICENSE)\n\nUsers interested in deploying SingularityNET services should use this daemon\n\nThe daemon is the adapter with which an otherwise SingularityNET-unaware service implementation can be exposed to the\nSingularityNET platform. It is designed to be deployed as a sidecar proxy alongside the service on a given host.\nThe daemon abstracts the blockchain components away from the clients.\nThe SNET Daemon interacts with the Multi Party Escrow to facilitate authorization and payment for services and acts as a\npassthrough for making API calls to the service. The daemon is the endpoint a client will submit requests to, and they\nare then passed to the service after validation by the daemon.\n\n# Table of contents\n\n1. [Install and use](#use)\n2. [Configuration](#configuration)\n    1. [Main properties](#main_properties)\n    2. [Additional properties](#other_properties)\n3. [Channel Claim and other commands](#commands)\n4. [Build and development](#build)\n\n## Install and use \u003ca name=\"use\"\u003e\u003c/a\u003e\n\nPrecompiled binaries are published with each release,\ndownload [from releases page](https://github.com/singnet/snet-daemon/releases) or use terminal:\n\n```bash\ncurl -LJO https://github.com/singnet/snet-daemon/releases/download/v6.2.1/snetd-linux-amd64-v6.2.1\nchmod +x snetd-linux-amd64-v6.2.1 \n```\n\n#### Generate basic config file\n\nFor most users, a simple config is enough:\n\n```bash\n./snetd-linux-amd64-v6.2.1 init \n```\n\nThis command will generate a file `snetd.config.json` in which you will need to\nchange [some parameters](#main_properties).\n\n#### Generate default full config file\n\n```bash\n./snetd-linux-amd64-v6.2.1 init-full\n```\n\n#### Run Daemon\n\n```bash\n./snetd-linux-amd64-v6.2.1\n```\n\nSpecifying the path to the config using the '-c' argument:\n\n```bash\n./snetd-linux-amd64-v6.2.1 -c name_of_config.json\n```\n\n## Configuration \u003ca name=\"configuration\"\u003e\u003c/a\u003e\n\nConfiguration file is a main source of the configuration. Some properties\ncan be set via environment variables or command line parameters see [table\nbelow](#table_conf). Use `--config` parameter with any command to set configuration file name. By default daemon\nuse configuration file in JSON format `snetd.config.json` but other formats are\nalso supported via [Viper](https://github.com/spf13/viper). Use `init-full` or `init`\ncommand to save configuration file with default values. The following configuration properties can be set using a\nconfiguration file.\n\n### Main properties \u003ca name=\"main_properties\"\u003e\u003c/a\u003e\n\nThese properties you should usually change before starting daemon for the first\ntime.\n\n* **blockchain_network_selected** (required, default `\"sepolia\"`)\n  Name of the network to be used for Daemon possible values are one of (sepolia, main, goerli, local).\n  Daemon will automatically read the Registry address associated with this network For local network ( you can also\n  specify the registry address manually), see the blockchain_network_config.json\n\n* **daemon_endpoint** (required, default `\"127.0.0.1:8080\"`) —\n  Defines the ip and the port on which the daemon listens to.\n  format is :`\u003chost\u003e:\u003cport\u003e`.\n\n* **ethereum_json_rpc_http_endpoint** (optional, default: `\"https://sepolia.infura.io/v3\"`) —\n  endpoint to which daemon sends ethereum JSON-RPC requests;\n  Based on the network selected blockchain_network_selected the end point is auto determined\n  Example `\"https://sepolia.infura.io/v3\"` for sepolia testnet.\n\n* **blockchain_provider_api_key** (optional, default: `\"\"`) — basic header authorization key for blockchain providers.\n  Tested with\n  [infura api key secret](https://docs.infura.io/dashboard/secure-an-api/api-key-secret).\n\n* **organization_id** (required) — Id of the organization to search for [service configuration\n  metadata][service-configuration-metadata].\n\n* **service_id** (required) —\n  Id of the service to search for [service configuration\n  metadata][service-configuration-metadata].\n\n* **passthrough_enabled** (optional; default: `true`) —\n  when passthrough is disabled, daemon echoes requests back as responses; `false`\n  reserved mostly for testing purposes.\n\n* **service_endpoint** (required except service_type `executable`; default: `http://localhost:5000`) —\n  endpoint to which requests should be proxied for handling by service.\n  This config is mandatory when `passthrough_enabled` is set to true.\n  and needs to be a valid url\n\n* **executable_path** (required if `service_type` is `executable`) —\n  path to executable to expose as a service.\n\n* **ipfs_endpoint** (optional; default `\"https://ipfs.singularitynet.io:443\"`) —\n  endpoint of IPFS instance to get [service configuration\n  metadata][service-configuration-metadata]\n\n### Free calls properties \u003ca name=\"free_calls_properties\"\u003e\u003c/a\u003e\n\nThese parameters are needed if you specified free_calls in the service metadata.\n\n* **private_key_for_free_calls** (required) —\n  The private key is used to sign authorization tokens for free calls. This address is NOT required to have any tokens.\n\n  ⚠️ This private key must correspond to the public address specified in your service_metadata.json under the\n  free_calls.public_key field.\n\n\n* **trusted_free_call_signers** (optional, default SingularityNET addresses) — A list of trusted public addresses that\n  are allowed to issue free call tokens on your behalf (e.g. trusted centralized backends or marketplaces).\n\n  ⚠️ If this field is left empty, free calls will not work via the SingularityNET Marketplace, but will still be\n  available for clients using the Web3 approach (e.g., via SDKs).\n\n  ```json\n  \"trusted_free_call_signers\": [\n  \"0x7DF35C98f41F3Af0df1dc4c7F7D4C19a71Dd059F\",\n  \"0x3Bb9b2499c283cec176e7C707Ecb495B7a961ebf\" ]\n  ```\n\n* **min_balance_for_free_call** (optional, default 10) — The minimum token (FET) balance (in whole tokens) required on\n  the user's wallet to be eligible for free calls (Web3-based flow).\n  ```json\n  \"min_balance_for_free_call\": \"1\"\n  ```\n\n\n* **free_calls_per_address** (optional, default empty)\n\n  You can set a separate number of allowed free calls for\n  certain addresses (not for web2 approach).\n\n  ```json\n  \"free_calls_per_address\": {\n      \"0x03607652d3ee4dad68ecea78f266906b421508d5\": 500,\n      \"0x0709e9B78756B740ab0C64427f43f8305fD6D1A7\": 100\n  }\n  ```\n\n### Other properties \u003ca name=\"other_properties\"\u003e\u003c/a\u003e\n\nThis options are less frequently needed.\n\n* **service_credentials** (optional, for `\"service_type\":\"http\"` only):\n  Array of credentials, example:\n\n  ```\n  \"service_credentials\": [\n      {\"key\": \"example_body_param\", \"value\": 12345,\"location\": \"body\"},\n      {\"key\": \"X-API-Key\", \"value\": \"546bd7d4-d3e1-46ba-b752-bc45e4dc5b39\", \"location\": \"header\"}\n    ],\n  ```\n  Location can be: query, header or body. Query and header values must be string.\n\n* **service_timeout** (optional; default:`100s`)\nTimeout from daemon to AI service.\n\n* **allowed_user_flag** (optional; default:`false`) — You may need to protect the service provider 's service in test\n  environment from being called by anyone, only Authorized users can make calls , when this flag is defined in the\n  config, you can enforce this behaviour.You cannot set this flag to true\n  in mainnet.  \n  This config is applicable only when you have the value to true.\n  In which case it becomes mandatory to define the configuration `allowed_users`,\n\n* **allowed_user_addresses** (optional) — List of selected user addresses who can make requests to Daemon\n  Is Applicable only when you have `allowed_user_flag` set to true.\n\n* **authentication_addresses** (required if `You need to update Daemon configurations remotely`)\n  Contains the Authentication addresses\n  that will be used to validate all requests to update Daemon configuration remotely\n  through a user interface (Operator UI)\n\n* **auto_ssl_domain** (optional; default: `\"\"`) —  \n  domain name for which the daemon should automatically acquire SSL certs\n  from [Let's Encrypt](https://letsencrypt.org/).\n\n* **auto_ssl_cache_dir** (optional; only applies if `auto_ssl_domain` is set; default: `\".certs\"`) —\n  directory in which to cache the SSL certs issued by Let's Encrypt\n\n* **blockchain_enabled** (optional; default: `true`) —\n  enables or disables blockchain features of daemon; `false` reserved mostly for testing purposes\n\n* **burst_size** (optional; default: Infinite) —\n  see [rate limiting configuration](./ratelimit/README.md)\n\n* **daemon_group_name** (optional, default: `\"default_group\"`) —\n  This parameter defines the group the daemon belongs to.\n  The group helps determine the recipient address for payments.\n  [service configuration\n  metadata][service-configuration-metadata].\n\n* **log** (optional) —\n  see [logger configuration](./logger/README.md)\n\n* **max_message_size_in_mb** (optional; default: `4`) —\n  The default value set is to 4 (units are in MB), this is used to configure the max size in MB of the message received\n  by the Daemon.\n  In case of Large messages, it is recommended to use streaming than setting a very high value on this configuration.\n  It is not recommended to set the value more than 4GB\n  `Please make sure your grpc version \u003e 1.25`\n\n* **metering_enabled** (optional, default: `false`) —\n  This is used to define if metering needs to be enabled or not .You will need to define a valid ` metering_endpoint`\n  when this flag is enabled\n\n* **metering_endpoint** (optional; only applies if `metering_enabled` is set to true) —\n  Needs to be a valid url where the request and response stats are published as part of Metering\n\n* **private_key_for_metering** (optional; only applies if `metering_enabled` is set to true)\n  This is used for authentication between daemon and the metering service in the context publishing stats, Even the\n  latest Channel Status is published, this way the offline channel state balance can also be tracked.\n  Daemon will send a signature signed by this private key, metering service will already have the public key\n  corresponding\n  to this Daemon, metering service will ensure that the signer it receives matches the public key configured at its end.\n  This is mandatory only when metering is enabled.\n\n* **ssl_cert** (optional; default: `\"\"`) —\n  path to certificate to use for SSL.\n\n* **ssl_key** (optional; only applies if `ssl_cert` is set; default: `\"\"`) —\n  path to key to use for SSL.\n\n* **payment_channel_storage_type** (optional; default `\"etcd\"`) —\n  see [etcd storage type](./etcddb#etcd-storage-type)\n\n* **payment_channel_storage_client** (optional) —\n  see [etcd client configuration](./etcddb#etcd-client-configuration)\n\n* **payment_channel_storage_server** (optional) —\n  see [etcd server configuration](./etcddb#etcd-server-configuration)\n\n* **rate_limit_per_minute** (optional; default: `Infinity`) —\n  see [rate limiting configuration](./ratelimit/README.md)\n\n* **registry_address_key** (Optional) —\n  Ethereum address of the Registry contract instance.This is auto determined if not specified based on the\n  blockchain_network_selected\n  If a value is specified, it will be used and no attempt will be made to auto determine the registry address.\n\n* **alerts_email** (optional; default: `\"\"`) — It must be a valid email. if it is empty, then it is considered as alerts\n  disabled. see [daemon alerts/notifications configuration](./metrics/README.md)\n\n* **service_heartbeat_type** (optional; default: `\"\"`) — possible type configurations are ```none | grpc | http```. If\n  it is left empty, then it is considered as none type. see [daemon heartbeats configuration](./metrics/README.md)\n\n* **heartbeat_endpoint** (optional; default: `\"\"`) — It must be a valid URL. if it is empty, then service state\n  always assumed as SERVING, and same will be wrapped in Daemon Heartbeat.\n  see [daemon heartbeats configuration](./metrics/README.md)\n\n* **ipfs_timeout** (optional; default: `30`) — All IPFS read/writes timeout if the operations dont complete in 30 sec\n  or set duration in this config entry.\n\n* **is_curation_in_progress** (optional; default: `false`) — You may need to protect the service provider's service in\n  test environment from being called by anyone, only Authorized users can make calls, when this flag is set to true,\n  you can enforce this behaviour. Also see `curation_address_for_validation`\n\n* **token_expiry_in_minutes** (optional; default: `1440` minutes ~24hrs) — This is the default expiry time for a JWT\n  token issued.\n\n* **token_secret_key** (optional;) — This is the secret key used to sign a JWT token, please do add this in your\n  configuration to make your tokens a lot more secure.\n\n* **notification_endpoint** (optional; default: `\"\"`) — It must be a valid URL. if it is empty, then it is\n  considered as alerts disabled. see [daemon alerts/notifications configuration](./metrics/README.md)\n\n#### Environment variables and CLI parameters \u003ca name=\"table_conf\"\u003e\u003c/a\u003e\n\n| config file key                   | environment variable name              | flag                  |\n|-----------------------------------|----------------------------------------|-----------------------|\n| `auto_ssl_domain`                 | `SNET_AUTO_SSL_DOMAIN`                 | `--auto-ssl-domain`   |\n| `auto_ssl_cache_dir`              | `SNET_AUTO_SSL_CACHE_DIR`              | `--auto-ssl-cache`    |\n| `blockchain_enabled`              | `SNET_BLOCKCHAIN_ENABLED`              | `--blockchain`, `-b`  |\n| `config_path`                     | `SNET_CONFIG_PATH`                     | `--config`, `-c`      |\n| `ethereum_json_rpc_http_endpoint` | `SNET_ETHEREUM_JSON_RPC_HTTP_ENDPOINT` | `--ethereum-endpoint` |\n| `hdwallet_index`                  | `SNET_HDWALLET_INDEX`                  | `--wallet-index`      |\n| `hdwallet_mnemonic`               | `SNET_HDWALLET_MNEMONIC`               | `--mnemonic`          |\n| `passthrough_enabled`             | `SNET_PASSTHROUGH_ENABLED`             | `--passthrough`       |\n| `ssl_cert`                        | `SNET_SSL_CERT`                        | `--ssl-cert`          |\n| `ssl_key`                         | `SNET_SSL_KEY`                         | `--ssl-key`           |\n\n[service-configuration-metadata]: https://github.com/singnet/wiki/blob/master/multiPartyEscrowContract/MPEServiceMetadata.md\n\n## Channel Claim and other commands \u003ca name=\"commands\"\u003e\u003c/a\u003e\n\nGets the latest channel state of the Channel updated in ETCD by the daemons of the same group and then increments the\nnonce of the channel.\nIt then sends and ON-Chain transaction to claim funds. The daemons continue their work independently without any\nconfirmation from the treasurer on the blockchain.\n\n**Claim funds from the channel**\n\nRefer to the link below on an end to\nend [Example of MPE](https://github.com/singnet/wiki/tree/master/multiPartyEscrowContract/front-to-back-examples)\nAt the moment treasurer server is a part of snet-daemon command line interface.\n\n```bash\n./snetd-linux-amd64-v6.2.1 claim --channel-id 0\n```\n\n**Full list of commands, use --help to get more information:**\n\n```bash\n./snetd-linux-amd64-v6.2.1 --help\n\nUsage:\n  snetd [flags]\n  snetd [command]\n\nAvailable Commands:\n  channel     Manage operations on payment channels\n  freecall    Manage operations on free call users\n  help        Help about any command\n  init        Write basic configuration to file\n  init-full   Write full default configuration to file\n  list        List channels, claims in progress, etc\n  serve       Is the default option which starts the Daemon.\n  version     List the current version of the Daemon.\n\nFlags:\n  -c, --config string   config file (default \"snetd.config.json\")\n  -h, --help            help for snetd\n\nUse \"snetd [command] --help\" for more information about a command.\n```\n\n## Build \u0026 Development \u003ca name=\"build\"\u003e\u003c/a\u003e\n\nThese instructions are intended to facilitate the development and testing of SingularityNET Daemon.\n\n### Prerequisites and dependencies\n\nRecommended versions:\n\n* [Go 1.24+](https://golang.org/dl/)\n* [Protoc 31.1+](https://github.com/protocolbuffers/protobuf/releases)\n\n**Protoc (libprotoc), golang and $GOPATH/bin are recommended to be in environment variables.**\n\n### Installing\n\n* Clone the git repository (for example, $GOPATH/src/github.com/singnet/)\n\n```bash\ngit clone git@github.com:singnet/snet-daemon.git\ncd snet-daemon\n```\n\n**Install dependencies and generate bindings**\n\nBash\n\n```bash\n./scripts/install_deps\n```\n\nPowerShell\n\n```powershell\n./scripts/powershell/install_deps.ps1\n```\n\n**Build snet-daemon**. Please note using ldflags, the latest tagged version, sha1 revision and the build time are set as\npart of the build. You need to pass the version as shown in the example below:\n\n```bash\n./scripts/build \u003clinux/windows/darwin\u003e \u003camd64/arm/arm64\u003e \u003cversion\u003e\n```\n\n**Examples**\n\nBash:\n\n```bash\n./scripts/build linux amd64 v6.2.1\n```\n\nPowershell:\n\n```powershell\n./scripts/powershell/build.ps1 linux amd64 v6.2.1\n```\n\nThe final binaries will be in the `/build` folder.\n\n#### Docker\n\n1. Build the docker image:\n\n```\ndocker build -t snet-daemon:v6.2.1 --build-arg VERSION=v6.2.1 . \n```\n\n2. Prepare config and certificates:\n\n```\nmkdir ./snet-config/\n```\n\nsnet-config/\n\n```\n  snetd.config.json\n  ca.pem\n  client.pem\n  client-key.pem\n  localhost.crt\n  localhost.key\n  ...anything else your setup needs\n```\n\n3. Run the docker image:\n\nPort mapping must match daemon_endpoint.\nThe daemon listens on the port specified in snetd.config.json → daemon_endpoint (e.g., 0.0.0.0:8080).\nWhen you run the container, the right-hand side of -p HOST:CONTAINER must equal that port.\n\n```bash\ndocker run -d --rm --name snetd -v \"$(pwd)/snet-config:/etc/singnet:ro\" -p 8080:8080 snet-daemon:v6.2.1\n```\n\npowershell:\n\n```powershell\ndocker run -d --rm --name snetd -v \"$( PWD )\\snet-config:/etc/singnet:ro\" -p 8080:8080 snet-daemon:v6.2.1\n```\n\n#### Multi-compiling\n\nIf you want to build daemon for several platforms, run `./scripts/build-all \u003cversion\u003e` instead\nof `./scripts/build`.\n\nYou can edit the script to choose the specific platforms, but by default it will build for Linux, Darwin (OSX), and\nWindows.\n\n#### Unit Testing\n\n```bash\n./scripts/test\n``` \n\nor\n\n```bash\ngo test ./...\n```\n\n### Fixing errors\n\nIf daemon panic with `panic: proto: file \"?.proto\" is already registered`\nyou should set environment var `GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn`\n\n### Blockchain network config\n\nYou can edit `ethereum_json_rpc_http_endpoint` in `resources/blockchain_network_config.json` before ./scripts/build.\n\n### Signatures in Daemon\n\n* [Payment Signatures](/escrow/README.md).\n\n## Versioning\n\nWe use [SemVer](http://semver.org/) for versioning. For the versions available, see the\n[tags on this repository](https://github.com/singnet/snet-daemon/tags).\n\n## License\n\nThis project is licensed under the MIT License - see the\n[LICENSE](https://github.com/singnet/snet-daemon/blob/master/LICENSE) file for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingnet%2Fsnet-daemon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsingnet%2Fsnet-daemon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingnet%2Fsnet-daemon/lists"}