From 09782d739d181f6a4b8f2803b16cc441dac3a01a Mon Sep 17 00:00:00 2001 From: Navid Filsaraee Date: Wed, 7 Oct 2026 00:32:19 +0330 Subject: [PATCH] feat: add settlement dismissal and cancellation RPCs --- ledger/v1/msg.proto | 10 ++++++++++ ledger/v1/srv.proto | 3 +++ wallet/v1/internal_srv.proto | 4 ++++ wallet/v1/msg.proto | 12 ++++++++++++ 4 files changed, 29 insertions(+) diff --git a/ledger/v1/msg.proto b/ledger/v1/msg.proto index ab70fea..7d955c7 100644 --- a/ledger/v1/msg.proto +++ b/ledger/v1/msg.proto @@ -253,3 +253,13 @@ message RetrySettlementRequest { message RetrySettlementResponse { Settlement settlement = 1; } + +message IgnoreSettlementRequest { + string settlement_id = 1; + string actor_id = 2; + string reason = 3; +} + +message IgnoreSettlementResponse { + Settlement settlement = 1; +} diff --git a/ledger/v1/srv.proto b/ledger/v1/srv.proto index 2043c16..8af4666 100644 --- a/ledger/v1/srv.proto +++ b/ledger/v1/srv.proto @@ -23,4 +23,7 @@ service GeneralLedgerService { rpc GetSettlement(GetSettlementRequest) returns (Settlement); // Restricted operator command. Requires the configured x-admin-token metadata. rpc RetrySettlement(RetrySettlementRequest) returns (RetrySettlementResponse); + // Operator-reviewed, terminal dismissal. Does not confirm or reverse payment. + // Requires x-admin-token and a recorded reason; only unlocked failed settlements. + rpc IgnoreSettlement(IgnoreSettlementRequest) returns (IgnoreSettlementResponse); } diff --git a/wallet/v1/internal_srv.proto b/wallet/v1/internal_srv.proto index b9e621a..572a8f3 100644 --- a/wallet/v1/internal_srv.proto +++ b/wallet/v1/internal_srv.proto @@ -31,6 +31,10 @@ service InternalWalletSrv { rpc AdminDeactivateAsset(AdminDeactivateAssetReq) returns (base.v1.StatusRes); rpc AdminApproveIRTWithdrawal(AdminApproveIRTWithdrawalReq) returns (base.v1.StatusRes); + // Cancels an unapproved request and releases its reservation atomically. + rpc AdminCancelIRTWithdrawal(AdminCancelIRTWithdrawalReq) returns (base.v1.StatusRes); + // Cancel only an undecided ICO agreement, atomically against user acceptance. + rpc AdminCancelICOAgreement(AdminCancelICOAgreementReq) returns (base.v1.StatusRes); // Bank statement receipts are checked and confirmed through the wallet owner. // Confirmation is idempotent by bank_transaction_number. diff --git a/wallet/v1/msg.proto b/wallet/v1/msg.proto index 8615518..f8a7a14 100644 --- a/wallet/v1/msg.proto +++ b/wallet/v1/msg.proto @@ -898,3 +898,15 @@ message AdminDeactivateAssetReq { message AdminAssetMutationRes { int64 asset_id = 1; } + +// Administrative cancellation never changes a decided agreement or moves funds. +message AdminCancelICOAgreementReq { + uint64 agreement_id = 1; + int64 actor_user_id = 2; +} + +message AdminCancelIRTWithdrawalReq { + uint64 withdraw_log_id = 1; + string reason = 2; + int64 actor_user_id = 3; +}