Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
c7d526a
chore: initial
zeljkoX Jul 11, 2025
e61b83e
feat: add repos logic and config processing logic
zeljkoX Jul 14, 2025
0caa42c
chore: fixes
zeljkoX Jul 14, 2025
ceccf20
Merge branch 'main' into plat-6679-implement-startup-logic-to-populat…
zeljkoX Jul 14, 2025
6623d2b
chore: imprve env sync_nonce and add service info log
zeljkoX Jul 14, 2025
f80f4d8
chore: lint
zeljkoX Jul 14, 2025
90facb5
chore: add notifications crud endpoints
zeljkoX Jul 14, 2025
f710068
Merge branch 'main' into plat-6681-expose-crud-api-endpoints
zeljkoX Jul 14, 2025
835801d
chore: add notification request validations
zeljkoX Jul 14, 2025
d474cba
chore: initial work for notificaitons crud
zeljkoX Jul 15, 2025
186e70f
chore: fix openapi generation
zeljkoX Jul 15, 2025
034007f
chore: improvements
zeljkoX Jul 15, 2025
f1f21cb
chore: improvements
zeljkoX Jul 15, 2025
7bf8cde
chore: improvements
zeljkoX Jul 15, 2025
e834a5d
chore: impr
zeljkoX Jul 15, 2025
c506b55
chore: intial signers crud impl
zeljkoX Jul 16, 2025
7e70191
chore: improvements
zeljkoX Jul 16, 2025
f716393
chore: refactor
zeljkoX Jul 16, 2025
9510190
chore: impr
zeljkoX Jul 17, 2025
4891c5e
feat: Plat-6842 notifications CRUD endpoints (#362)
zeljkoX Jul 17, 2025
21ce870
refactor + remove vault cloud due to deprecation of service
zeljkoX Jul 18, 2025
bb2d2bc
chore: impr
zeljkoX Jul 18, 2025
87500fa
chore: fix clippy
zeljkoX Jul 18, 2025
486d52f
chore: fixes
zeljkoX Jul 18, 2025
63aae5a
chore: add noboost comments
zeljkoX Jul 18, 2025
c4c7ea8
chore: typo
zeljkoX Jul 18, 2025
7a63ab9
chore: stellar
zeljkoX Jul 18, 2025
21d798e
chore: noboost
zeljkoX Jul 18, 2025
23bac0c
feat: plat-6845 implement relayer models
zeljkoX Jul 21, 2025
7efc625
chore: improvements
zeljkoX Jul 22, 2025
7ce87ce
chore: improvements
zeljkoX Jul 22, 2025
dfc121f
feat: Plat-6843 signers crud endpoints (#366)
zeljkoX Jul 22, 2025
6f11c17
chore: impr
zeljkoX Jul 22, 2025
b9c98b6
chore: implement merge patch logic for relayer
zeljkoX Jul 22, 2025
615dda6
chore: improvements
zeljkoX Jul 22, 2025
eac5c06
chore: improvements
zeljkoX Jul 23, 2025
eceabe7
chore: impr
zeljkoX Jul 23, 2025
12d5285
chore: clippy
zeljkoX Jul 23, 2025
925e60d
chore: cleanup
zeljkoX Jul 23, 2025
259b812
chore: add controller tests
zeljkoX Jul 23, 2025
917bf31
chore: more contrller tests
zeljkoX Jul 23, 2025
93d2dcc
chore: resolve bug
zeljkoX Jul 23, 2025
0abe630
chore: tests
zeljkoX Jul 24, 2025
995664e
chore: more tests
zeljkoX Jul 24, 2025
5a7fde2
chore: fixes
zeljkoX Jul 24, 2025
5603fdb
chore: impr
zeljkoX Jul 24, 2025
3b3962e
chore: add nosemgrep rule
zeljkoX Jul 24, 2025
f8e098b
feat: securely store secrets in storage
zeljkoX Jul 25, 2025
42c507e
chore: allow starting service with empty config
zeljkoX Jul 26, 2025
1d9eb55
chore: improvements
zeljkoX Jul 27, 2025
9476fab
chore: clippy
zeljkoX Jul 28, 2025
957117c
chore: pr suggestions
zeljkoX Jul 28, 2025
0ae26db
feat: Plat-6845 relayers crud endpoints (#378)
zeljkoX Jul 28, 2025
13fe94d
chore: impr
zeljkoX Jul 28, 2025
03a0cdb
chore: improvements
zeljkoX Jul 28, 2025
0a6959e
Merge branch 'plat-6681-expose-crud-api-endpoints-2' into plat-6678-i…
zeljkoX Jul 28, 2025
070c916
chore: format
zeljkoX Jul 28, 2025
0e43020
chore: improvements
zeljkoX Jul 28, 2025
2f94b8c
feat: plat-6864 impre response schema and revert some model name chan…
zeljkoX Jul 28, 2025
4150138
chore: PR suggestion
zeljkoX Jul 29, 2025
d39f39f
feat: Plat-6678 implement logic for securely storing secrets in repos…
zeljkoX Jul 29, 2025
8cfa3a4
feat: Plat-6864 add sdk examples for newly exposed api (#393)
zeljkoX Jul 29, 2025
9a325d2
Merge branch 'main' into plat-6681-expose-crud-api-endpoints-2
zeljkoX Jul 29, 2025
a737765
chore: imprive lcov ingore rules
zeljkoX Jul 29, 2025
f7b51aa
chore: fix regex
zeljkoX Jul 29, 2025
0b7c7b8
chore: attempt
zeljkoX Jul 29, 2025
b63d45e
chore: attempt
zeljkoX Jul 29, 2025
ce6c02a
Merge branch 'main' into plat-6681-expose-crud-api-endpoints-2
zeljkoX Jul 30, 2025
f4fa14f
chore: remove empty file
zeljkoX Jul 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -231,23 +231,22 @@ jobs:
LLVM_PROFILE_FILE: unit-%p-%m.profraw
RUSTFLAGS: -Cinstrument-coverage
RUST_TEST_THREADS: 1
run: cargo hack llvm-cov --locked --lib --ignore-filename-regex "(.*/relayer_docs\.rs$|src/repositories/.*/.*_redis\.rs$)" --lcov --output-path unit-lcov.info

run: cargo hack llvm-cov --locked --lib --ignore-filename-regex "(src/api/routes/docs/.*_docs\.rs$|src/repositories/.*/.*_redis\.rs$)" --lcov --output-path unit-lcov.info
# Integration tests coverage
- name: Run Integration Tests and Generate Coverage Report
env:
LLVM_PROFILE_FILE: integration-%p-%m.profraw
RUSTFLAGS: -Cinstrument-coverage
RUST_TEST_THREADS: 1
run: cargo hack llvm-cov --locked --ignore-filename-regex ".*/relayer_docs\.rs$" --lcov --output-path integration-lcov.info --test integration
run: cargo hack llvm-cov --locked --ignore-filename-regex "(src/api/routes/docs/.*_docs\.rs$|src/repositories/.*/.*_redis\.rs$)" --lcov --output-path integration-lcov.info --test integration

# Properties tests coverage
- name: Run Properties Tests
env:
LLVM_PROFILE_FILE: properties-%p-%m.profraw
RUSTFLAGS: -Cinstrument-coverage
RUST_TEST_THREADS: 1
run: cargo hack llvm-cov --locked --ignore-filename-regex ".*/relayer_docs\.rs$" --lcov --output-path properties-lcov.info --test properties
run: cargo hack llvm-cov --locked --ignore-filename-regex "(src/api/routes/docs/.*_docs\.rs$|src/repositories/.*/.*_redis\.rs$)" --lcov --output-path properties-lcov.info --test properties

# Upload unit coverage
- name: Upload Unit Coverage to Codecov
Expand Down
48 changes: 48 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ async-trait = "0.1"
actix-rt = "2.0.0"
alloy = { version = "0.9", features = ["full"] }
serde_json = "1"
json-patch = "4.0"
strum = { version = "0.27", default-features = false, features = ["derive"] }
strum_macros = "0.27"
serde = { version = "1.0", features = ["derive", "alloc"] }
Expand Down Expand Up @@ -75,6 +76,7 @@ secrets = { version = "1.2"}
libsodium-sys = "0.2.7"
zeroize = "1.8"
subtle = "2.6"
aes-gcm = "0.10"
ed25519-dalek = "2.2"
stellar-strkey = "0.0.13"
soroban-rs = "0.2.5"
Expand Down Expand Up @@ -115,6 +117,10 @@ path = "helpers/create_key.rs"
name = "generate_uuid"
path = "helpers/generate_uuid.rs"

[[example]]
name = "generate_encryption_key"
path = "helpers/generate_encyption_key.rs"

[[example]]
name = "generate_openapi"
path = "helpers/generate_openapi.rs"
Expand Down
63 changes: 0 additions & 63 deletions docs/modules/ROOT/pages/signers.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ OpenZeppelin Relayer supports the following signer types:

- `local`: Keystore file signer
- `vault`: HashiCorp Vault secret signer
- `vault_cloud`: Hosted HashiCorp Vault secret signer
- `vault_transit`: HashiCorp Vault Transit signer
- `turnkey`: Turnkey signer
- `google_cloud_kms`: Google Cloud KMS signer
Expand All @@ -57,11 +56,6 @@ The following table shows which signer types are compatible with each network ty
|✅ Supported
|❌ Not supported

|`vault_cloud`
|✅ Supported
|✅ Supported
|❌ Not supported

|`vault_transit`
|❌ Not supported
|✅ Supported
Expand Down Expand Up @@ -214,63 +208,6 @@ Configuration fields:
| The mount point for the Secrets engine in Vault. Defaults to `secret` if not explicitly specified. Optional.
|===

=== Vault Cloud Signer

Uses HashiCorp Vault Cloud (HCP Vault) for key management.

[source,json]
----
{
"id": "vault-cloud-signer",
"type": "vault_cloud",
"config": {
"client_id": "your-client-id",
"client_secret": {
"type": "env",
"value": "VAULT_CLOUD_CLIENT_SECRET"
},
"org_id": "your-org-id",
"project_id": "your-project-id",
"app_name": "relayer-app",
"key_name": "signing-key"
}
}
----

Configuration fields:
[cols="1,1,2"]
|===
|Field |Type |Description

| client_id
| String
| The client identifier used to authenticate with Vault Cloud

| client_secret.type
| String
| Type of value source (`env` or `plain`)

| client_secret.value
| String
| The Vault secret value, or the environment variable name where the secret value is stored

| org_id
| String
| The organization ID for your Vault Cloud account

| project_id
| String
| The project ID that uniquely identifies your Vault Cloud project

| app_name
| String
| The name of the application integrating with Vault Cloud

| key_name
| String
| The name of the cryptographic key used for signing or encryption operations in Vault Cloud
|===

=== Vault Transit Signer

Uses HashiCorp Vault's Transit secrets engine for cryptographic operations.
Expand Down
1 change: 0 additions & 1 deletion docs/modules/ROOT/pages/solana.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ For detailed network configuration options, see the xref:network_configuration.a
- `google_cloud_kms` (hosted)
- `local` (local)
- `vault` (local)
- `vault_cloud` (local)

[NOTE]
====
Expand Down
54 changes: 54 additions & 0 deletions helpers/generate_encyption_key.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
//! Encryption Key Generation Tool
//!
//! This tool generates a random 32-byte base64-encoded encryption key and prints it to the console.
//!
//! Other tools can be used to generate key like:
//!
//! ```bash
//! openssl rand -base64 32
//! ```
//!
//! # Usage
//!
//! ```bash
//! cargo run --example generate_encryption_key
//! ```
use eyre::Result;
use openzeppelin_relayer::utils::generate_encryption_key;

/// Main entry point for encryption key generation tool
fn main() -> Result<()> {
let encryption_key = generate_encryption_key();
println!("Generated new encryption key: {}", encryption_key);
Ok(())
}

#[cfg(test)]
mod tests {
use super::*;
use base64::{engine::general_purpose, Engine as _};

#[test]
fn test_encryption_key_generation() {
let key = generate_encryption_key();

let key_string = key;
assert!(!key_string.is_empty(), "Generated key should not be empty");

// Verify it's valid base64
let decoded = general_purpose::STANDARD.decode(&key_string);
assert!(decoded.is_ok(), "Generated key is not valid base64");

// Verify it's 32 bytes when decoded
let decoded_bytes = decoded.unwrap();
assert_eq!(decoded_bytes.len(), 32, "Decoded key should be 32 bytes");
}

#[test]
fn test_multiple_keys_are_different() {
let key1 = generate_encryption_key();
let key2 = generate_encryption_key();

assert_ne!(key1, key2, "Two generated keys should be different");
}
}
4 changes: 4 additions & 0 deletions src/api/controllers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
//!
//! * `relayer` - Transaction and relayer management endpoints
//! * `plugin` - Plugin endpoints
//! * `notifications` - Notification management endpoints
//! * `signers` - Signer management endpoints

pub mod notification;
pub mod plugin;
pub mod relayer;
pub mod signer;
Loading
Loading