{"id":42254591,"url":"https://github.com/bandprotocol/fkms","last_synced_at":"2026-01-27T05:18:33.321Z","repository":{"id":314840280,"uuid":"979818211","full_name":"bandprotocol/fkms","owner":"bandprotocol","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-15T04:17:48.000Z","size":98,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-15T06:23:27.599Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bandprotocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2025-05-08T05:47:46.000Z","updated_at":"2025-08-18T14:23:49.000Z","dependencies_parsed_at":"2025-09-15T06:23:30.781Z","dependency_job_id":"2a2ebf07-3830-4a2e-83bf-46ca61fa109d","html_url":"https://github.com/bandprotocol/fkms","commit_stats":null,"previous_names":["bandprotocol/fkms"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bandprotocol/fkms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bandprotocol%2Ffkms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bandprotocol%2Ffkms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bandprotocol%2Ffkms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bandprotocol%2Ffkms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bandprotocol","download_url":"https://codeload.github.com/bandprotocol/fkms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bandprotocol%2Ffkms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28803650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T03:44:14.111Z","status":"ssl_error","status_checked_at":"2026-01-27T03:43:33.507Z","response_time":168,"last_error":"SSL_read: 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":[],"created_at":"2026-01-27T05:18:32.800Z","updated_at":"2026-01-27T05:18:33.316Z","avatar_url":"https://github.com/bandprotocol.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FKMS: Falcon Key Management Service\n\n## Overview\n\n`fkms` is a Key Management Service (KMS) written in Rust, designed to sign transactions originating from [Falcon](https://github.com/bandprotocol/falcon). It provides secure key management and signing capabilities for EVM-compatible blockchains, supporting both local and AWS KMS-backed signers. The service exposes a gRPC API for signing and key management operations, and is designed to be easily configurable and extensible with middleware (e.g., authentication).\n\n## Prerequisites\nBefore building and running `fkms`, ensure the following dependency is installed:\n- [Rust](https://www.rust-lang.org/tools/install)\n\n\n\n## Installation\n\n1. **Clone the repository:**\n   ```sh\n   git clone https://github.com/bandprotocol/fkms.git\n   cd fkms\n   ```\n2. **Build and install the binary:**\n\n    By default, the `fkms` binary is compiled with the local feature enabled, supporting local key management. If you wish to enable additional features (such as AWS KMS integration), you can specify them explicitly during installation:\n    - Default (local signer only)\n      ```sh\n      cargo install --path .\n      ```\n    - With AWS KMS support:\n      ```sh\n      cargo install --path . --features aws\n      ```\n    - Both local and AWS KMS support:\n      ```sh\n      cargo install --path . --features local,aws\n      ```\n   This will compile and install the fkms executable \n\n## Configuration\n\nThe default configuration file is located at `$HOME/.fkms/config.toml`. You can generate a default config with:\n\n```sh\nfkms config init\n```\n\n### Example `config.toml`\n\n```toml\n[server]\nhost = \"127.0.0.1\"\nport = 50051\n\n[logging]\nlog_level = \"\"\n\n[signer_config]\n\n# Local signers using various sources\n[[signer_config.local_signer_configs]]\ntype = \"private_key\"\nenv_variable = \"PRIVATE_KEY_1\"\nencoding = \"hex\"\n\n[[signer_config.local_signer_configs]]\ntype         = \"mnemonic\"\nenv_variable = \"MNEMONIC_1\"\ncoin_type = 60\naccount = 0\nindex = 0\n```\n\n### Supported Local Signer Types\n\n| Type          | Description                                    | Required Fields                                |\n| --------------| ---------------------------------------------- | -----------------------------------------------|\n| `private_key` | Load private key from an environment variable  | `env_variable`, `encoding`                     |\n| `mnemonic`    | Load mnemonic from an environment variable     | `env_variable`, `coin_type`, `account`, `index`|\n\n## Encoding Options\n- `hex`: The key is encoded in hexadecimal (0-9, a-f)\n- `base64`: The key is base64-encoded\n\n\u003e Environment variable must be defined in a `.env` file or via  shell environment.\n\u003e Example .env file:\n```env\nPRIVATE_KEY_1=abc123456789deadbeef...\nMNEMONIC=\"test test test test test test test test test test test junk\"\n```\n\n## Usage\n\n### CLI Commands\n\n- **Initialize config:**\n  ```sh\n  fkms config init [--path \u003cconfig-path\u003e] [--override]\n  ```\n- **Validate config:**\n  ```sh\n  fkms config validate [--path \u003cconfig-path\u003e]\n  ```\n- **List keys:**\n  ```sh\n  fkms key list [--path \u003cconfig-path\u003e]\n  ```\n- **Start server:**\n  ```sh\n  fkms start [--path \u003cconfig-path\u003e]\n  ```\n\n## API\n\n### Generate protobufs (Rust)\nThe Rust server uses `tonic-build`. Rebuilding the project regenerates server/client code:\n\n```sh\ncargo clean\ncargo build\n```\n\nThe gRPC API is defined in [`proto/fkms/v1/signer.proto`](proto/fkms/v1/signer.proto):\n\n- `SignEvm(SignEvmRequest)`: Sign a message with a given address\n- `GetSignerAddresses(GetSignerAddressesRequest)`: List available signer addresses\n\n### Example: SignEvmRequest\n\n```proto\nmessage SignEvmRequest {\n  string address = 1;\n  bytes message = 2;\n}\n```\n\n### Example: GetSignerAddressesResponse\n\n```proto\nmessage GetSignerAddressesResponse {\n  repeated string addresses = 1;\n}\n```\n\n## Extending\n\n- **Middleware:** Add authentication or other middleware by enabling the `middleware` feature and configuring as needed.\n- **AWS KMS:** Enable the `aws` feature and configure AWS signers in the config.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandprotocol%2Ffkms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbandprotocol%2Ffkms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandprotocol%2Ffkms/lists"}