{"id":31580054,"url":"https://github.com/lit-protocol/lit-rust-sdk","last_synced_at":"2026-03-05T08:02:37.689Z","repository":{"id":309675884,"uuid":"1037060077","full_name":"LIT-Protocol/lit-rust-sdk","owner":"LIT-Protocol","description":"A fully native Rust implementation of the Lit JS SDK","archived":false,"fork":false,"pushed_at":"2025-12-31T18:53:26.000Z","size":340,"stargazers_count":7,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-02T18:51:10.914Z","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/LIT-Protocol.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-08-13T02:22:26.000Z","updated_at":"2025-12-31T18:53:30.000Z","dependencies_parsed_at":"2025-08-13T08:14:59.643Z","dependency_job_id":"5f1d5c8e-05dd-496f-8e43-da8a0cc255dc","html_url":"https://github.com/LIT-Protocol/lit-rust-sdk","commit_stats":null,"previous_names":["lit-protocol/lit-rust-sdk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LIT-Protocol/lit-rust-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIT-Protocol%2Flit-rust-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIT-Protocol%2Flit-rust-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIT-Protocol%2Flit-rust-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIT-Protocol%2Flit-rust-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LIT-Protocol","download_url":"https://codeload.github.com/LIT-Protocol/lit-rust-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LIT-Protocol%2Flit-rust-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30115662,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T03:40:26.266Z","status":"ssl_error","status_checked_at":"2026-03-05T03:39:15.902Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2025-10-05T21:06:00.350Z","updated_at":"2026-03-05T08:02:37.675Z","avatar_url":"https://github.com/LIT-Protocol.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lit Protocol Rust SDK\n\n[![CI](https://github.com/LIT-Protocol/lit-rust-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/LIT-Protocol/lit-rust-sdk/actions/workflows/ci.yml)\n[![Documentation](https://docs.rs/lit-rust-sdk/badge.svg)](https://docs.rs/lit-rust-sdk/latest/lit_rust_sdk/)\n\nA native Rust implementation of the Lit Protocol SDK, providing programmatic access to the Lit Network for distributed key management, conditional access control, and programmable signing.\n\nCurrently in Beta and only supports Datil, DatilDev, and DatilTest networks.\n\n## Features\n\n- **Local Session Signatures**: Execute Lit Actions using only your Ethereum wallet (no PKP required)\n- **PKP Management**: Mint and manage Programmable Key Pairs (PKPs)\n- **Session Signatures**: Generate and manage session signatures for authentication\n- **Lit Actions**: Execute JavaScript code on the Lit Network with access to PKP signing capabilities\n- **Capacity Delegation**: Delegate network capacity using Rate Limit NFTs\n- **Multi-Network Support**: Connect to Datil, DatilDev, and DatilTest networks\n- **Ethereum Wallet Integration**: Native support for Ethereum wallet authentication\n\n## Installation\n\nAdd this to your `Cargo.toml`:\n\n```toml\n[dependencies]\nlit-rust-sdk = \"0.2.0\"\ntokio = { version = \"1.40\", features = [\"full\"] }\n```\n\n## Quick Start\n\n### Basic Connection\n\n```rust\nuse lit_rust_sdk::{LitNetwork, LitNodeClient, LitNodeClientConfig};\nuse std::time::Duration;\n\n#[tokio::main]\nasync fn main() {\n    // Configure the client\n    let config = LitNodeClientConfig {\n        lit_network: LitNetwork::DatilDev,\n        alert_when_unauthorized: true,\n        debug: true,\n        connect_timeout: Duration::from_secs(30),\n        check_node_attestation: false,\n    };\n\n    // Create and connect to the Lit Network\n    let mut client = LitNodeClient::new(config)\n        .await\n        .expect(\"Failed to create client\");\n\n    client.connect().await.expect(\"Failed to connect\");\n\n    println!(\"Connected to {} nodes\", client.connected_nodes().len());\n}\n```\n\n### Executing a Lit Action (Simple Approach - No PKP Required)\n\nFor most use cases, you can execute Lit Actions using only your Ethereum wallet without needing to mint PKPs:\n\n```rust\nuse lit_rust_sdk::{\n    auth::load_wallet_from_env,\n    types::{LitAbility, LitResourceAbilityRequest, LitResourceAbilityRequestResource},\n    ExecuteJsParams, LitNetwork, LitNodeClient, LitNodeClientConfig,\n};\nuse std::time::Duration;\n\nconst HELLO_WORLD_LIT_ACTION: \u0026str = r#\"\nconst go = async () =\u003e {\n  console.log(\"Hello from Lit Action!\");\n  Lit.Actions.setResponse({ response: \"Hello World from Rust SDK!\" });\n};\ngo();\n\"#;\n\n#[tokio::main]\nasync fn main() {\n    // Load wallet from environment variable\n    let wallet = load_wallet_from_env()\n        .expect(\"Failed to load wallet from ETHEREUM_PRIVATE_KEY env var\");\n\n    // Configure and connect to Lit Network\n    let config = LitNodeClientConfig {\n        lit_network: LitNetwork::DatilDev,\n        alert_when_unauthorized: true,\n        debug: true,\n        connect_timeout: Duration::from_secs(30),\n        check_node_attestation: false,\n    };\n\n    let mut client = LitNodeClient::new(config)\n        .await\n        .expect(\"Failed to create client\");\n\n    client.connect().await.expect(\"Failed to connect\");\n\n    // Create resource ability requests for Lit Action execution\n    let resource_ability_requests = vec![LitResourceAbilityRequest {\n        resource: LitResourceAbilityRequestResource {\n            resource: \"*\".to_string(),\n            resource_prefix: \"lit-litaction\".to_string(),\n        },\n        ability: LitAbility::LitActionExecution.to_string(),\n    }];\n\n    // Generate session signatures with your wallet (no PKP needed!)\n    let expiration = (chrono::Utc::now() + chrono::Duration::minutes(10)).to_rfc3339();\n    let session_sigs = client\n        .get_local_session_sigs(\u0026wallet, resource_ability_requests, \u0026expiration, vec![])\n        .await\n        .expect(\"Failed to create local session signatures\");\n\n    // Execute the Lit Action\n    let execute_params = ExecuteJsParams {\n        code: Some(HELLO_WORLD_LIT_ACTION.to_string()),\n        ipfs_id: None,\n        session_sigs,\n        auth_methods: None,\n        js_params: None,\n    };\n\n    let response = client\n        .execute_js(execute_params)\n        .await\n        .expect(\"Failed to execute Lit Action\");\n\n    println!(\"Response: {:?}\", response.response);\n    println!(\"Logs: {}\", response.logs);\n}\n```\n\n### Executing a Lit Action (With PKP Signing)\n\n```rust\nuse lit_rust_sdk::{\n    auth::{load_wallet_from_env, EthWalletProvider},\n    types::{LitAbility, LitResourceAbilityRequest, LitResourceAbilityRequestResource},\n    ExecuteJsParams, LitNetwork, LitNodeClient, LitNodeClientConfig,\n};\nuse std::time::Duration;\n\nconst HELLO_WORLD_LIT_ACTION: \u0026str = r#\"\nconst go = async () =\u003e {\n  console.log(\"Hello from Lit Action!\");\n  Lit.Actions.setResponse({ response: \"Hello World!\" });\n};\ngo();\n\"#;\n\n#[tokio::main]\nasync fn main() {\n    // Load wallet from environment\n    let wallet = load_wallet_from_env()\n        .expect(\"Failed to load wallet\");\n\n    // Create and connect client\n    let config = LitNodeClientConfig {\n        lit_network: LitNetwork::DatilDev,\n        alert_when_unauthorized: true,\n        debug: true,\n        connect_timeout: Duration::from_secs(30),\n        check_node_attestation: false,\n    };\n\n    let mut client = LitNodeClient::new(config)\n        .await\n        .expect(\"Failed to create client\");\n\n    client.connect().await.expect(\"Failed to connect\");\n\n    // Create auth method\n    let auth_method = EthWalletProvider::authenticate(\u0026wallet, \u0026client)\n        .await\n        .expect(\"Failed to create auth method\");\n\n    // Create resource ability requests\n    let resource_ability_requests = vec![LitResourceAbilityRequest {\n        resource: LitResourceAbilityRequestResource {\n            resource: \"*\".to_string(),\n            resource_prefix: \"lit-litaction\".to_string(),\n        },\n        ability: LitAbility::LitActionExecution.to_string(),\n    }];\n\n    // Get session signatures\n    let expiration = chrono::Utc::now() + chrono::Duration::minutes(10);\n    let session_sigs = client\n        .get_pkp_session_sigs(\n            \u0026pkp_public_key,\n            \u0026pkp_eth_address,\n            vec![],\n            vec![auth_method],\n            resource_ability_requests,\n            \u0026expiration.to_rfc3339(),\n        )\n        .await\n        .expect(\"Failed to get session signatures\");\n\n    // Execute the Lit Action\n    let execute_params = ExecuteJsParams {\n        code: Some(HELLO_WORLD_LIT_ACTION.to_string()),\n        ipfs_id: None,\n        session_sigs,\n        auth_methods: None,\n        js_params: None,\n    };\n\n    let response = client.execute_js(execute_params)\n        .await\n        .expect(\"Failed to execute Lit Action\");\n\n    println!(\"Response: {:?}\", response.response);\n    println!(\"Logs: {}\", response.logs);\n}\n```\n\n## Core Concepts\n\n### PKPs (Programmable Key Pairs)\n\nPKPs are distributed ECDSA key pairs that can be programmed with signing logic. The private key never exists in any single location.\n\n```rust\nuse lit_rust_sdk::blockchain::{resolve_address, Contract, PKPNFT};\nuse alloy::{network::EthereumWallet, primitives::U256, providers::ProviderBuilder};\n\n// Mint a new PKP\nlet pkp_nft_address = resolve_address(Contract::PKPNFT, LitNetwork::Datil)\n    .await\n    .expect(\"Failed to resolve PKP NFT contract\");\n\nlet pkp_nft = PKPNFT::new(pkp_nft_address, provider);\n\nlet mint_cost = pkp_nft.mintCost().call().await?;\nlet key_type = U256::from(2); // ECDSA key type\n\nlet tx = pkp_nft.mintNext(key_type).value(mint_cost);\nlet receipt = tx.send().await?.get_receipt().await?;\n```\n\n### Session Signatures\n\nSession signatures provide temporary authentication for interacting with the Lit Network.\n\n```rust\nlet session_sigs = client\n    .get_pkp_session_sigs(\n        \u0026pkp_public_key,    // PKP public key in hex format\n        \u0026pkp_eth_address,   // PKP's Ethereum address\n        capacity_auth_sigs, // Optional capacity delegation signatures\n        auth_methods,       // Authentication methods (e.g., wallet signature)\n        resource_ability_requests, // Permissions being requested\n        \u0026expiration,        // RFC3339 timestamp for expiration\n    )\n    .await?;\n```\n\n### Local Session Signatures (No PKP Required)\n\nFor simpler use cases where you don't need PKP signing capabilities, you can create session signatures directly with your wallet. This allows you to execute Lit Actions without minting or managing PKPs.\n\n```rust\nuse lit_rust_sdk::{\n    auth::load_wallet_from_env,\n    types::{LitAbility, LitResourceAbilityRequest, LitResourceAbilityRequestResource},\n    ExecuteJsParams, LitNetwork, LitNodeClient, LitNodeClientConfig,\n};\n\n// Load your Ethereum wallet\nlet wallet = load_wallet_from_env().expect(\"Failed to load wallet\");\n\n// Create resource ability requests for Lit Action execution\nlet resource_ability_requests = vec![LitResourceAbilityRequest {\n    resource: LitResourceAbilityRequestResource {\n        resource: \"*\".to_string(),\n        resource_prefix: \"lit-litaction\".to_string(),\n    },\n    ability: LitAbility::LitActionExecution.to_string(),\n}];\n\n// Set expiration for session signatures\nlet expiration = (chrono::Utc::now() + chrono::Duration::minutes(10)).to_rfc3339();\n\n// Generate local session signatures using only your wallet\nlet session_sigs = client\n    .get_local_session_sigs(\n        \u0026wallet,\n        resource_ability_requests,\n        \u0026expiration,\n        vec![],\n    )\n    .await?;\n\n// Execute Lit Actions with these session signatures\nlet lit_action_code = r#\"\nconst go = async () =\u003e {\n  console.log(\"Hello from Lit Action!\");\n  Lit.Actions.setResponse({ response: \"Executed without PKP!\" });\n};\ngo();\n\"#;\n\nlet execute_params = ExecuteJsParams {\n    code: Some(lit_action_code.to_string()),\n    ipfs_id: None,\n    session_sigs,\n    auth_methods: None,\n    js_params: None,\n};\n\nlet response = client.execute_js(execute_params).await?;\n```\n\n**Local Session Signatures:**\n\n- **No PKP Required**: Execute Lit Actions using only your Ethereum wallet\n- **Must have Ethereum wallet**: You must have an Ethereum wallet / local private key. Not suitable for cases where a PKP is the only wallet the user has.\n- **Can still use PKP signing**: Can still sign with a PKP owned or controlled by the local wallet.\n\n### Lit Actions\n\nLit Actions are JavaScript functions that execute on the Lit Network with access to PKP signing capabilities.\n\n#### Signing Example\n\n```rust\nlet signing_lit_action = r#\"\nconst go = async () =\u003e {\n  const utf8Encode = new TextEncoder();\n  const toSign = utf8Encode.encode('Message to sign');\n  const publicKey = \"\u003cPKP_PUBLIC_KEY\u003e\";\n  const sigName = \"sig1\";\n\n  const sigShare = await Lit.Actions.signEcdsa({\n    toSign,\n    publicKey,\n    sigName\n  });\n};\ngo();\n\"#;\n\nlet execute_params = ExecuteJsParams {\n    code: Some(signing_lit_action),\n    ipfs_id: None,\n    session_sigs,\n    auth_methods: None,\n    js_params: None,\n};\n\nlet response = client.execute_js(execute_params).await?;\n```\n\n#### Passing Auth Methods to Lit Actions\n\nYou can pass additional auth methods that will be accessible via `Lit.Auth`:\n\n```rust\n// Create multiple auth methods\nlet auth_method1 = EthWalletProvider::authenticate(\u0026wallet1, \u0026client).await?;\nlet auth_method2 = EthWalletProvider::authenticate(\u0026wallet2, \u0026client).await?;\n\nlet execute_params = ExecuteJsParams {\n    code: Some(lit_action_code),\n    ipfs_id: None,\n    session_sigs,\n    auth_methods: Some(vec![auth_method1, auth_method2]),\n    js_params: None,\n};\n\n// Inside the Lit Action, access auth methods via:\n// Lit.Auth.authMethodContexts[0].userId\n// Lit.Auth.authMethodContexts[0].authMethodType\n```\n\n### Capacity Delegation\n\nDelegate network capacity to PKPs using Rate Limit NFTs:\n\n```rust\nuse lit_rust_sdk::blockchain::RateLimitNFT;\n\n// Mint a Rate Limit NFT\nlet rate_limit_nft = RateLimitNFT::new(rate_limit_address, provider);\n\nlet expires_at = U256::from(timestamp);\nlet cost = rate_limit_nft\n    .calculateCost(requests_per_kilosecond, expires_at)\n    .call()\n    .await?;\n\nlet tx = rate_limit_nft.mint(expires_at).value(cost);\nlet receipt = tx.send().await?.get_receipt().await?;\n\n// Create capacity delegation signature\nlet capacity_auth_sig = EthWalletProvider::create_capacity_delegation_auth_sig(\n    \u0026wallet,\n    \u0026rate_limit_nft_token_id,\n    \u0026[pkp_eth_address], // Delegate to PKP\n    \"10\", // Number of uses\n).await?;\n\n// Use in session signature generation\nlet session_sigs = client.get_pkp_session_sigs(\n    \u0026pkp_public_key,\n    \u0026pkp_eth_address,\n    vec![capacity_auth_sig], // Include capacity delegation\n    vec![auth_method],\n    resource_ability_requests,\n    \u0026expiration,\n).await?;\n```\n\n## Environment Variables\n\nThe SDK expects the following environment variables for authentication:\n\n```bash\n# Required for wallet authentication\nETHEREUM_PRIVATE_KEY=your_private_key_here\n\n# Required for PKP operations (if using existing PKP)\nPKP_PUBLIC_KEY=0x...\nPKP_TOKEN_ID=...\nPKP_ETH_ADDRESS=0x...\n```\n\n## Network Configuration\n\nThe SDK supports multiple Lit Networks:\n\n- `LitNetwork::Datil` - Production network\n- `LitNetwork::DatilDev` - Development network (recommended for testing)\n- `LitNetwork::DatilTest` - Test network\n\nEach network has different characteristics:\n\n- **Datil**: Production environment with real assets\n- **DatilDev**: Development environment with test assets, faster iteration\n- **DatilTest**: Test environment for integration testing\n\n## Testing\n\nRun the test suite:\n\n```bash\n# Run all tests\ncargo test -- --nocapture\n\n# Run specific test\ncargo test test_execute_js_hello_world -- --nocapture\n\n# Run with debug output\nRUST_LOG=debug cargo test -- --nocapture\n```\n\n## API Reference\n\n### LitNodeClient\n\nThe main client for interacting with the Lit Network.\n\n#### Methods\n\n- `new(config: LitNodeClientConfig) -\u003e Result\u003cSelf\u003e` - Create a new client\n- `connect() -\u003e Result\u003c()\u003e` - Connect to the Lit Network\n- `is_ready() -\u003e bool` - Check if client is connected and ready\n- `connected_nodes() -\u003e Vec\u003cString\u003e` - Get list of connected node URLs\n- `get_connection_state() -\u003e ConnectionState` - Get detailed connection state\n- `execute_js(params: ExecuteJsParams) -\u003e Result\u003cExecuteJsResponse\u003e` - Execute a Lit Action\n- `get_pkp_session_sigs(...) -\u003e Result\u003cSessionSignatures\u003e` - Generate session signatures with PKP\n- `get_local_session_sigs(wallet: \u0026PrivateKeySigner, resource_ability_requests: Vec\u003cLitResourceAbilityRequest\u003e, expiration: \u0026str) -\u003e Result\u003cSessionSignatures\u003e` - Generate session signatures without PKP\n\n### Authentication\n\n#### EthWalletProvider\n\nProvides Ethereum wallet-based authentication.\n\n- `authenticate(wallet: \u0026PrivateKeySigner, client: \u0026LitNodeClient) -\u003e Result\u003cAuthMethod\u003e`\n- `create_capacity_delegation_auth_sig(...) -\u003e Result\u003cAuthSig\u003e`\n- `load_wallet_from_env() -\u003e Result\u003cPrivateKeySigner\u003e`\n\n### Types\n\n#### ExecuteJsParams\n\n```rust\npub struct ExecuteJsParams {\n    pub code: Option\u003cString\u003e,           // JavaScript code to execute\n    pub ipfs_id: Option\u003cString\u003e,        // IPFS CID of code\n    pub session_sigs: SessionSignatures, // Session signatures for auth\n    pub auth_methods: Option\u003cVec\u003cAuthMethod\u003e\u003e, // Additional auth methods\n    pub js_params: Option\u003cserde_json::Value\u003e, // Parameters to pass to JS\n}\n```\n\n#### ExecuteJsResponse\n\n```rust\npub struct ExecuteJsResponse {\n    pub response: serde_json::Value,    // Response from Lit Action\n    pub logs: String,                   // Console logs from execution\n    pub signatures: Option\u003cHashMap\u003cString, String\u003e\u003e, // Generated signatures\n}\n```\n\n## Examples\n\n### Complete Workflow: Mint PKP and Execute Action\n\nSee `tests/execute_js_test.rs::test_execute_js_with_capacity_delegation_datil` for a complete example that:\n\n1. Mints a new PKP NFT\n2. Mints a Rate Limit NFT for capacity\n3. Creates capacity delegation\n4. Generates session signatures\n5. Executes a Lit Action\n\n### Local Session Signatures (No PKP)\n\nSee `tests/local_session_sigs_test.rs` for examples of executing Lit Actions without PKPs:\n\n- `test_local_session_sigs_hello_world` - Basic Lit Action execution with local session signatures\n- `test_local_session_sigs_with_params` - Advanced Lit Action with computations and parameters\n\n### Authentication Methods\n\nSee `tests/execute_js_test.rs::test_execute_js_with_auth_methods` for an example of passing multiple authentication methods to a Lit Action.\n\n## Troubleshooting\n\n### Connection Issues\n\nIf you're having trouble connecting to the network:\n\n1. Ensure you're using the correct network (DatilDev is recommended for testing)\n2. Check your internet connection\n3. Verify firewall settings allow HTTPS connections\n4. Enable debug mode in the client configuration\n\n### Authentication Failures\n\nIf authentication is failing:\n\n1. Verify your `ETHEREUM_PRIVATE_KEY` is correctly set\n2. Ensure the wallet has sufficient balance for gas fees\n3. Check that PKP credentials match (public key, token ID, ETH address)\n\n### Lit Action Execution Errors\n\nCommon issues and solutions:\n\n- **\"Unauthorized\"**: Check session signatures haven't expired\n- **\"Invalid signature\"**: Verify PKP public key format (should include 0x prefix)\n- **\"Rate limit exceeded\"**: Ensure Rate Limit NFT has sufficient capacity\n\n## Contributing\n\nContributions are welcome! Please ensure all tests pass before submitting a PR:\n\n```bash\ncargo test -- --nocapture\ncargo fmt\ncargo clippy\n```\n\n### Running Tests Locally\n\n```bash\n# Run all tests (requires environment variables)\ncargo test -- --nocapture\n\n# Run only local session signature tests (simpler setup)\ncargo test local_session_sigs -- --nocapture\n\n# Run specific test\ncargo test test_connect_to_lit_network -- --nocapture\n```\n\n## License\n\nSee LICENSE file in the repository root.\n\n## Resources\n\n- [Lit Protocol Documentation](https://developer.litprotocol.com/)\n- [JavaScript SDK API Reference](https://v7-api-doc-lit-js-sdk.vercel.app/)\n- [GitHub Repository](https://github.com/LIT-Protocol/lit-rust-sdk)\n\n## Support\n\nFor issues and questions:\n\n- Open an issue on GitHub\n- Visit the [Lit Protocol Discord](https://litgateway.com/discord)\n- Check the [official documentation](https://developer.litprotocol.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flit-protocol%2Flit-rust-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flit-protocol%2Flit-rust-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flit-protocol%2Flit-rust-sdk/lists"}