From 7dfa9675abc5e2e25bb9e5681c7de86a56cfbb30 Mon Sep 17 00:00:00 2001 From: Julianemeka Date: Thu, 4 Jun 2026 02:06:32 +0000 Subject: [PATCH] feat: add ping health check endpoint (#87) - Implement ping function returning ledger timestamp - Add unit test for ping - Document ping in README and CHANGELOG --- CHANGELOG.md | 1 + README.md | 9 +++++++++ contracts/payment-processing-contract/src/lib.rs | 7 +++++++ contracts/payment-processing-contract/src/test.rs | 9 +++++++++ 4 files changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 158407a..70a944b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +- Add `ping` endpoint to return current ledger timestamp for health monitoring. - Remove unused `StorageError` variant from the payment contract ABI. - Harden payment and refund flows against external token transfer re-entrancy by committing state before external calls. - Add best-effort zero/burn admin address validation and test coverage for invalid admin assignment. diff --git a/README.md b/README.md index 768eb27..a74922f 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,15 @@ stellar contract invoke --id $CONTRACT_ID --source-account --network local -- get_version ``` +#### `ping` + +Health check endpoint. Returns the current ledger timestamp (u64). + +```bash +stellar contract invoke --id $CONTRACT_ID --source-account --network local \ + -- ping +``` + #### `upgrade` Upgrades the contract WASM in-place. Admin only. Existing storage and contract address are preserved. diff --git a/contracts/payment-processing-contract/src/lib.rs b/contracts/payment-processing-contract/src/lib.rs index abd76c2..7998898 100644 --- a/contracts/payment-processing-contract/src/lib.rs +++ b/contracts/payment-processing-contract/src/lib.rs @@ -57,6 +57,13 @@ impl PaymentContract { storage::get_contract_version(&env) } + // ── Health check ────────────────────────────────────────────────────────── + + /// Health check endpoint. Returns the current ledger timestamp. + pub fn ping(env: Env) -> u64 { + env.ledger().timestamp() + } + // ── Merchant management ─────────────────────────────────────────────────── pub fn register_merchant( diff --git a/contracts/payment-processing-contract/src/test.rs b/contracts/payment-processing-contract/src/test.rs index f6228c5..6607228 100644 --- a/contracts/payment-processing-contract/src/test.rs +++ b/contracts/payment-processing-contract/src/test.rs @@ -227,6 +227,15 @@ fn test_get_version_after_set_admin() { assert_eq!(client.get_version(), 1); } +#[test] +fn test_ping() { + let (env, client) = setup(); + env.ledger().with_mut(|li| { + li.timestamp = 12345; + }); + assert_eq!(client.ping(), 12345); +} + // ── Merchant tests ──────────────────────────────────────────────────────────── #[test]