diff --git a/.proto/withdrawals.proto b/.proto/withdrawals.proto index 8c43c7f..120abff 100644 --- a/.proto/withdrawals.proto +++ b/.proto/withdrawals.proto @@ -1,62 +1,236 @@ syntax = "proto3"; -option csharp_namespace = "Swisschain.Sirius.Api.ApiContract.V2.Withdrawals"; +option csharp_namespace = "Swisschain.Sirius.Api.ApiContract.Withdrawal"; +import "aml.proto"; import "common.proto"; +import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; -package swisschain.sirius.api.v2.withdrawals; +package swisschain.sirius.api.withdrawals; -service WithdrawalService { +service Withdrawals { + rpc Search (WithdrawalSearchRequest) returns (WithdrawalSearchResponse); rpc Execute (WithdrawalExecuteRequest) returns (WithdrawalExecuteResponse); + rpc GetUpdates (WithdrawalUpdateSearchRequest) returns (stream WithdrawalUpdateArrayResponse); + rpc Estimate(WithdrawalEstimateRequest) returns (EstimateTransactionResponse); } -message WithdrawalExecuteRequest { - string idempotency_id = 1; - WithdrawalDocument document = 2; - bytes signature = 3; +// Search + +message WithdrawalSearchRequest { + google.protobuf.Int64Value id = 1; + google.protobuf.Int64Value broker_account_id = 2; + google.protobuf.Int64Value account_id = 3; + google.protobuf.Int64Value asset_id = 4; + google.protobuf.StringValue blockchain_id = 5; + repeated WithdrawalState state = 6; + google.protobuf.StringValue transaction_id = 7; + repeated WithdrawalErrorCode error_code = 8; + google.protobuf.Int64Value operation_id = 9; + google.protobuf.StringValue destination_address = 10; + google.protobuf.StringValue destination_tag = 11; + swisschain.sirius.api.common.NullableTagType destination_tag_type = 12; + swisschain.sirius.api.common.PaginationInt64 pagination = 13; + google.protobuf.StringValue account_reference_id = 14; + google.protobuf.Int64Value user_id = 15; + google.protobuf.StringValue user_native_id = 16; } -message WithdrawalDocument { - map properties = 1; - int64 asset_id = 2; - int64 broker_account_id = 3; - DestinationDetails destination_details = 4; - swisschain.sirius.api.common.BigDecimal amount = 5; - swisschain.sirius.api.common.FeePayer fee_payer = 6; +message WithdrawalSearchResponse { + oneof result { + WithdrawalSearchResponseBody body = 1; + swisschain.sirius.api.common.ErrorResponseBody error = 2; + } } -message DestinationDetails { - string address = 1; - DestinationTag destination_tag = 2; +message WithdrawalSearchResponseBody { + swisschain.sirius.api.common.PaginatedInt64Response pagination = 1; + repeated WithdrawalResponse items = 2; } -message DestinationTag { - google.protobuf.StringValue value = 2; - swisschain.sirius.api.common.TagType type = 3; +// Execute + +message WithdrawalExecuteRequest { + string request_id = 1; + // JSON: version; brokerAccountId; accountId; assetId; amount; destinationDetails; accountReferenceId; withdrawalReferenceId; userNativeId + string document = 2; + string signature = 3; } message WithdrawalExecuteResponse { - oneof result { - WithdrawalExecutePayload payload = 1; - WithdrawalExecuteError error = 2; - } + oneof result { + WithdrawalExecuteResponseBody body = 1; + WithdrawalExecuteErrorResponseBody error = 2; + } +} + +message WithdrawalExecuteResponseBody { + WithdrawalResponse withdrawal = 1; +} + +message WithdrawalExecuteErrorResponseBody { + + enum ErrorCode { + UNKNOWN = 0; + INVALID_PARAMETERS = 1; + IS_NOT_AUTHORIZED = 2; + NOT_FOUND = 3; + NOT_ENOUGH_BALANCE = 4; + INVALID_ADDRESS = 5; + AMOUNT_IS_TOO_LOW = 6; + } + + ErrorCode error_code = 1; + string error_message = 2; +} + +// GetUpdates + +message WithdrawalUpdateSearchRequest { + google.protobuf.Int64Value withdrawal_id = 1; + google.protobuf.Int64Value broker_account_id = 2; + google.protobuf.Int64Value account_id = 3; + google.protobuf.Int64Value asset_id = 4; + google.protobuf.StringValue blockchain_id = 5; + repeated WithdrawalState state = 6; + google.protobuf.StringValue transaction_id = 7; + repeated WithdrawalErrorCode error_code = 8; + google.protobuf.Int64Value operation_id = 9; + google.protobuf.StringValue destination_address = 10; + google.protobuf.StringValue destination_tag = 11; + swisschain.sirius.api.common.NullableTagType destination_tag_type = 12; + google.protobuf.Int64Value withdrawal_update_id = 13; + google.protobuf.Int64Value cursor = 14; + google.protobuf.StringValue account_reference_id = 15; + google.protobuf.Int64Value user_id = 16; + google.protobuf.StringValue user_native_id = 17; + google.protobuf.StringValue stream_id = 18; } -message WithdrawalExecutePayload { - int64 id = 1; +message WithdrawalUpdateArrayResponse { + repeated WithdrawalUpdateResponse items = 1; +} + +message WithdrawalUpdateResponse { + int64 withdrawal_update_id = 1; + WithdrawalResponse withdrawal = 2; +} + +// Common + +enum WithdrawalState { + PROCESSING = 0; + EXECUTING = 1; + SENT = 2; + COMPLETED = 3; + FAILED = 4; + POLICY_VALIDATION = 5; + SIGNING = 6; + REJECTED = 7; + AML_VALIDATION = 8; + AML_FAILED = 9; + AML_REVIEWED = 10; + NOTIFYING_AML = 11; + REFUNDED = 12; + AML_FAILURE_ACCEPTING = 13; + ON_CHAIN = 14; + ESTIMATING = 15; + OUT_OF_GAS = 16; } -message WithdrawalExecuteError { - enum ErrorCode { - UNKNOWN = 0; - INVALID_PARAMETERS = 1; - DOMAIN_PROBLEM = 2; +message DestinationDetails { + string address = 1; + google.protobuf.StringValue tag = 2; + swisschain.sirius.api.common.NullableTagType tag_type = 3; +} + +enum WithdrawalErrorCode { + NOT_ENOUGH_BALANCE = 0; + INVALID_DESTINATION_ADDRESS = 1; + DESTINATION_TAG_REQUIRED = 2; TECHNICAL_PROBLEM = 3; - NOT_AUTHORIZED = 4; - NOT_ENOUGH_BALANCE = 5; + VALIDATION_REJECTED = 4; + SIGNING_REJECTED = 5; + AMOUNT_IS_TOO_SMALL = 6; + FEE_LIMIT_EXCEEDED = 7; + TRANSACTION_EXPIRED = 8; + FEE_TOO_LOW = 9; + INVALID_PARAMETERS = 10; +} + +message WithdrawalError { + WithdrawalErrorCode code = 1; + string message = 2; +} + +message WithdrawalResponse { + int64 id = 1; + int64 broker_account_id = 2; + string broker_account_name = 3; + swisschain.sirius.api.common.BrokerAccountDetails broker_account_details = 4; + google.protobuf.Int64Value account_id = 5; + google.protobuf.StringValue account_reference_id = 7; + int64 asset_id = 8; + + google.protobuf.StringValue asset_address = 10; + swisschain.sirius.api.common.BigDecimal amount = 11; + string blockchain_id = 12; + string blockchain_name = 13; + repeated swisschain.sirius.api.common.Fee actualFees = 14; + DestinationDetails destination_details = 15; + WithdrawalState state = 16; + swisschain.sirius.api.common.TransactionInfo transaction_info = 17; + WithdrawalError error = 18; + google.protobuf.Int64Value operation_id = 19; + int64 required_confirmations_count = 20; + TransferContext transfer_context = 21; + ValidatorContext validator_context = 22; + google.protobuf.Timestamp created_at = 23; + google.protobuf.Timestamp updated_at = 24; + google.protobuf.Int64Value user_id = 25; + google.protobuf.StringValue user_native_id = 26; + swisschain.sirius.api.aml.AmlChecks aml_checks = 27; + repeated swisschain.sirius.api.common.Fee expectedFees = 28; + swisschain.sirius.api.common.FeePayer fee_payer = 29; +} + +message TransferContext { + google.protobuf.StringValue account_reference_id = 1; + google.protobuf.StringValue withdrawal_reference_id = 2; + google.protobuf.StringValue document = 3; + google.protobuf.StringValue signature = 4; + RequestContext request_context = 5; +} + +message RequestContext { + google.protobuf.StringValue user_id = 1; + google.protobuf.StringValue api_key_id = 2; + google.protobuf.StringValue ip = 3; + google.protobuf.Timestamp timestamp = 4; +} + +message ValidatorContext { + google.protobuf.StringValue document = 1; + google.protobuf.StringValue signature = 2; +} + +message WithdrawalEstimateRequest { + string request_id = 1; + int64 broker_account_id = 2; + int64 asset_id = 3; + swisschain.sirius.api.common.BigDecimal amount = 4; + DestinationDetails destination_details = 5; + swisschain.sirius.api.common.FeePayer fee_payer = 6; +} + +message EstimateTransactionResponse { + oneof body { + EstimateTransactionResponseBody result = 1; + swisschain.sirius.api.common.ErrorResponseBody error = 2; } +} - ErrorCode code = 1; - string message = 2; +message EstimateTransactionResponseBody { + swisschain.sirius.api.common.Fee fee = 1; } \ No newline at end of file