From c264ab01ae243e0db8063a23534d53cb3e8b1b8a Mon Sep 17 00:00:00 2001 From: fireblocks_dx_team Date: Tue, 10 Nov 2026 12:10:03 +0000 Subject: [PATCH] Generated SDK #3049470904 --- .openapi-generator/FILES | 21 +- CHANGELOG.md | 290 ------------------ README.md | 18 +- docs/FeeInfo.md | 2 + docs/RoleFeeInfo.md | 31 ++ docs/TradeClass.md | 29 ++ docs/TradingApi.md | 123 ++++++++ docs/TradingPair.md | 42 +++ docs/TradingPairSide.md | 15 + docs/TradingPairsListPage.md | 31 ++ docs/TransactionResponse.md | 2 +- ...agementBetaApi.md => UTXOManagementApi.md} | 58 ++-- docs/UtxoInputSelection.md | 2 +- docs/UtxoSelectionFilters.md | 2 +- docs/UtxoSelectionParams.md | 2 +- docs/VaultsApi.md | 24 +- fireblocks/__init__.py | 9 +- fireblocks/api/__init__.py | 2 +- fireblocks/api/trading_api.py | 270 +++++++++++++++- ...ent_beta_api.py => utxo_management_api.py} | 14 +- fireblocks/api/vaults_api.py | 24 +- fireblocks/client.py | 12 +- fireblocks/configuration.py | 2 +- fireblocks/models/__init__.py | 5 + fireblocks/models/fee_info.py | 15 +- fireblocks/models/role_fee_info.py | 90 ++++++ fireblocks/models/trade_class.py | 46 +++ fireblocks/models/trading_pair.py | 136 ++++++++ fireblocks/models/trading_pair_side.py | 39 +++ fireblocks/models/trading_pairs_list_page.py | 105 +++++++ fireblocks/models/transaction_response.py | 2 +- fireblocks/models/utxo_input_selection.py | 2 +- fireblocks/models/utxo_selection_filters.py | 2 +- fireblocks/models/utxo_selection_params.py | 2 +- pyproject.toml | 2 +- setup.py | 2 +- test/fireblocks/test_client.py | 6 +- test/test_add_connected_account_request.py | 4 +- ...stry_create_proof_of_ownership_response.py | 4 +- test/test_audit_log_entry.py | 4 +- test/test_extra_parameters.py | 2 +- test/test_fee_info.py | 8 +- test/test_role_fee_info.py | 54 ++++ test/test_soroban_call_data.py | 4 +- test/test_trade_class.py | 35 +++ test/test_trading_api.py | 7 + test/test_trading_pair.py | 70 +++++ test/test_trading_pair_side.py | 35 +++ test/test_trading_pairs_list_page.py | 56 ++++ test/test_transaction_response.py | 8 +- ...e_connected_account_credentials_request.py | 4 +- ...eta_api.py => test_utxo_management_api.py} | 8 +- 52 files changed, 1376 insertions(+), 406 deletions(-) delete mode 100644 CHANGELOG.md create mode 100644 docs/RoleFeeInfo.md create mode 100644 docs/TradeClass.md create mode 100644 docs/TradingPair.md create mode 100644 docs/TradingPairSide.md create mode 100644 docs/TradingPairsListPage.md rename docs/{UTXOManagementBetaApi.md => UTXOManagementApi.md} (83%) rename fireblocks/api/{utxo_management_beta_api.py => utxo_management_api.py} (97%) create mode 100644 fireblocks/models/role_fee_info.py create mode 100644 fireblocks/models/trade_class.py create mode 100644 fireblocks/models/trading_pair.py create mode 100644 fireblocks/models/trading_pair_side.py create mode 100644 fireblocks/models/trading_pairs_list_page.py create mode 100644 test/test_role_fee_info.py create mode 100644 test/test_trade_class.py create mode 100644 test/test_trading_pair.py create mode 100644 test/test_trading_pair_side.py create mode 100644 test/test_trading_pairs_list_page.py rename test/{test_utxo_management_beta_api.py => test_utxo_management_api.py} (89%) diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 307e0a4a..1d8a59f0 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -905,6 +905,7 @@ docs/RewardsInfo.md docs/RiskLevelEnum.md docs/RoleDetails.md docs/RoleDetails2.md +docs/RoleFeeInfo.md docs/RoleGrantee.md docs/Rule.md docs/RuleActionEnum.md @@ -1183,9 +1184,13 @@ docs/TokensPaginatedResponse.md docs/TotalSupplyItemDto.md docs/TotalSupplyPagedResponse.md docs/TotalSupplyPagedResponse2.md +docs/TradeClass.md docs/TradingAccountType.md docs/TradingApi.md docs/TradingErrorSchema.md +docs/TradingPair.md +docs/TradingPairSide.md +docs/TradingPairsListPage.md docs/TradingProvider.md docs/Transaction.md docs/TransactionConfigurations.md @@ -1287,7 +1292,7 @@ docs/TxLog.md docs/TypedMessageTransactionStatusEnum.md docs/USWireAddress.md docs/USWireDestination.md -docs/UTXOManagementBetaApi.md +docs/UTXOManagementApi.md docs/UnfreezeTransactionResponse.md docs/UnmanagedWallet.md docs/UnspentInput.md @@ -1439,7 +1444,7 @@ fireblocks/api/transactions_api.py fireblocks/api/travel_rule_api.py fireblocks/api/user_groups_beta_api.py fireblocks/api/users_api.py -fireblocks/api/utxo_management_beta_api.py +fireblocks/api/utxo_management_api.py fireblocks/api/vaults_api.py fireblocks/api/web3_connections_api.py fireblocks/api/webhooks_api.py @@ -2324,6 +2329,7 @@ fireblocks/models/rewards_info.py fireblocks/models/risk_level_enum.py fireblocks/models/role_details.py fireblocks/models/role_details2.py +fireblocks/models/role_fee_info.py fireblocks/models/role_grantee.py fireblocks/models/rule.py fireblocks/models/rule_action_enum.py @@ -2595,8 +2601,12 @@ fireblocks/models/tr_link_vasp_list_dto.py fireblocks/models/tr_link_vasp_national_identification.py fireblocks/models/tr_link_verdict.py fireblocks/models/tr_link_verdict_enum.py +fireblocks/models/trade_class.py fireblocks/models/trading_account_type.py fireblocks/models/trading_error_schema.py +fireblocks/models/trading_pair.py +fireblocks/models/trading_pair_side.py +fireblocks/models/trading_pairs_list_page.py fireblocks/models/trading_provider.py fireblocks/models/transaction.py fireblocks/models/transaction_configurations.py @@ -3714,6 +3724,7 @@ test/test_rewards_info.py test/test_risk_level_enum.py test/test_role_details.py test/test_role_details2.py +test/test_role_fee_info.py test/test_role_grantee.py test/test_rule.py test/test_rule_action_enum.py @@ -3992,9 +4003,13 @@ test/test_tr_link_vasp_list_dto.py test/test_tr_link_vasp_national_identification.py test/test_tr_link_verdict.py test/test_tr_link_verdict_enum.py +test/test_trade_class.py test/test_trading_account_type.py test/test_trading_api.py test/test_trading_error_schema.py +test/test_trading_pair.py +test/test_trading_pair_side.py +test/test_trading_pairs_list_page.py test/test_trading_provider.py test/test_transaction.py test/test_transaction_configurations.py @@ -4142,7 +4157,7 @@ test/test_utxo_input2.py test/test_utxo_input_selection.py test/test_utxo_label_failure.py test/test_utxo_labels_error_response.py -test/test_utxo_management_beta_api.py +test/test_utxo_management_api.py test/test_utxo_output.py test/test_utxo_selection_config_entry.py test/test_utxo_selection_config_response.py diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 56869b47..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,290 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v36.0.0](https://github.com/fireblocks/py-sdk/compare/v24.0.0...v36.0.0) - 2026-11-04 - -### Merged - -- Generated SDK #3026276285 [`#168`](https://github.com/fireblocks/py-sdk/pull/168) - -## [v24.0.0](https://github.com/fireblocks/py-sdk/compare/v23.0.0...v24.0.0) - 2026-07-23 - -### Merged - -- Generated SDK #2700459745 (major) [`#146`](https://github.com/fireblocks/py-sdk/pull/146) - -## [v23.0.0](https://github.com/fireblocks/py-sdk/compare/v22.0.0...v23.0.0) - 2026-07-01 - -### Merged - -- Generated SDK #1180 [`#145`](https://github.com/fireblocks/py-sdk/pull/145) - -## [v22.0.0](https://github.com/fireblocks/py-sdk/compare/v21.0.0...v22.0.0) - 2026-06-28 - -### Merged - -- Generated SDK #5347 [`#144`](https://github.com/fireblocks/py-sdk/pull/144) - -## [v21.0.0](https://github.com/fireblocks/py-sdk/compare/v20.0.0...v21.0.0) - 2026-06-11 - -### Merged - -- Generated SDK #5364 [`#142`](https://github.com/fireblocks/py-sdk/pull/142) - -## [v20.0.0](https://github.com/fireblocks/py-sdk/compare/v19.1.0...v20.0.0) - 2026-06-02 - -### Merged - -- Generated SDK #2839 (major) [`#141`](https://github.com/fireblocks/py-sdk/pull/141) - -## [v19.1.0](https://github.com/fireblocks/py-sdk/compare/v19.0.0...v19.1.0) - 2026-05-27 - -### Merged - -- Generated SDK #2710 (minor) [`#140`](https://github.com/fireblocks/py-sdk/pull/140) - -## [v19.0.0](https://github.com/fireblocks/py-sdk/compare/v18.0.0...v19.0.0) - 2026-05-17 - -### Merged - -- Generated SDK #7742 (major) [`#139`](https://github.com/fireblocks/py-sdk/pull/139) - -## [v18.0.0](https://github.com/fireblocks/py-sdk/compare/v17.0.0...v18.0.0) - 2026-05-07 - -### Merged - -- Generated SDK #3222 (major) [`#138`](https://github.com/fireblocks/py-sdk/pull/138) - -## [v17.0.0](https://github.com/fireblocks/py-sdk/compare/v16.0.0...v17.0.0) - 2026-04-20 - -### Merged - -- Generated SDK #9605 (major) [`#137`](https://github.com/fireblocks/py-sdk/pull/137) - -## [v16.0.0](https://github.com/fireblocks/py-sdk/compare/v15.0.0...v16.0.0) - 2026-04-06 - -### Merged - -- Generated SDK #3331 [`#135`](https://github.com/fireblocks/py-sdk/pull/135) - -## [v15.0.0](https://github.com/fireblocks/py-sdk/compare/v14.1.0...v15.0.0) - 2026-03-15 - -### Merged - -- Generated SDK #3733 (major) [`#129`](https://github.com/fireblocks/py-sdk/pull/129) - -## [v14.1.0](https://github.com/fireblocks/py-sdk/compare/v14.0.0...v14.1.0) - 2026-02-26 - -### Merged - -- Generated SDK #2167 [`#127`](https://github.com/fireblocks/py-sdk/pull/127) - -## [v14.0.0](https://github.com/fireblocks/py-sdk/compare/v13.0.0...v14.0.0) - 2026-02-03 - -### Merged - -- Generated SDK #4746 [`#123`](https://github.com/fireblocks/py-sdk/pull/123) - -## [v13.0.0](https://github.com/fireblocks/py-sdk/compare/v12.1.2...v13.0.0) - 2025-11-13 - -### Merged - -- Generated SDK #5834 [`#121`](https://github.com/fireblocks/py-sdk/pull/121) - -## [v12.1.2](https://github.com/fireblocks/py-sdk/compare/v12.1.1...v12.1.2) - 2025-10-22 - -### Merged - -- Generated SDK #8293 [`#120`](https://github.com/fireblocks/py-sdk/pull/120) - -## [v12.1.1](https://github.com/fireblocks/py-sdk/compare/v12.1.0...v12.1.1) - 2025-09-29 - -### Merged - -- Generated SDK #6061 [`#119`](https://github.com/fireblocks/py-sdk/pull/119) - -## [v12.1.0](https://github.com/fireblocks/py-sdk/compare/v12.0.0...v12.1.0) - 2025-09-09 - -### Merged - -- Generated SDK #4521 [`#118`](https://github.com/fireblocks/py-sdk/pull/118) - -## [v12.0.0](https://github.com/fireblocks/py-sdk/compare/v11.2.0...v12.0.0) - 2025-09-01 - -### Merged - -- Generated SDK #7741 [`#117`](https://github.com/fireblocks/py-sdk/pull/117) - -## [v11.2.0](https://github.com/fireblocks/py-sdk/compare/v11.1.0...v11.2.0) - 2025-08-18 - -### Merged - -- Generated SDK #3302 [`#116`](https://github.com/fireblocks/py-sdk/pull/116) - -## [v11.1.0](https://github.com/fireblocks/py-sdk/compare/v11.0.0...v11.1.0) - 2025-08-11 - -### Merged - -- Generated SDK #1782 [`#115`](https://github.com/fireblocks/py-sdk/pull/115) - -## [v11.0.0](https://github.com/fireblocks/py-sdk/compare/v10.4.0...v11.0.0) - 2025-07-15 - -### Merged - -- Generated SDK #5610 [`#114`](https://github.com/fireblocks/py-sdk/pull/114) - -## [v10.4.0](https://github.com/fireblocks/py-sdk/compare/v10.3.0...v10.4.0) - 2025-06-29 - -### Merged - -- Generated SDK #1492 [`#113`](https://github.com/fireblocks/py-sdk/pull/113) - -## [v10.3.0](https://github.com/fireblocks/py-sdk/compare/v10.2.0...v10.3.0) - 2025-06-18 - -### Merged - -- Generated SDK #4009 [`#112`](https://github.com/fireblocks/py-sdk/pull/112) - -## [v10.2.0](https://github.com/fireblocks/py-sdk/compare/v10.1.1...v10.2.0) - 2025-06-04 - -### Merged - -- Generated SDK #8912 [`#111`](https://github.com/fireblocks/py-sdk/pull/111) - -## [v10.1.1](https://github.com/fireblocks/py-sdk/compare/v10.1.0...v10.1.1) - 2025-05-18 - -### Merged - -- Generated SDK #5019 [`#110`](https://github.com/fireblocks/py-sdk/pull/110) - -## [v10.1.0](https://github.com/fireblocks/py-sdk/compare/v10.0.0...v10.1.0) - 2025-05-07 - -### Merged - -- Generated SDK #7076 [`#107`](https://github.com/fireblocks/py-sdk/pull/107) - -## [v10.0.0](https://github.com/fireblocks/py-sdk/compare/v9.0.1...v10.0.0) - 2025-04-20 - -### Merged - -- Generated SDK #4794 [`#105`](https://github.com/fireblocks/py-sdk/pull/105) - -## [v9.0.1](https://github.com/fireblocks/py-sdk/compare/v9.0.0...v9.0.1) - 2025-04-07 - -### Merged - -- Generated SDK #3065 [`#104`](https://github.com/fireblocks/py-sdk/pull/104) - -## [v9.0.0](https://github.com/fireblocks/py-sdk/compare/v8.0.0...v9.0.0) - 2025-03-27 - -### Merged - -- Generated SDK #619 [`#102`](https://github.com/fireblocks/py-sdk/pull/102) - -## [v8.0.0](https://github.com/fireblocks/py-sdk/compare/v7.1.0...v8.0.0) - 2025-03-17 - -### Merged - -- Generated SDK #645 [`#101`](https://github.com/fireblocks/py-sdk/pull/101) -- Generated SDK #726 [`#99`](https://github.com/fireblocks/py-sdk/pull/99) - -## [v7.1.0](https://github.com/fireblocks/py-sdk/compare/v7.0.1...v7.1.0) - 2025-02-25 - -### Merged - -- Generated SDK #9833 [`#96`](https://github.com/fireblocks/py-sdk/pull/96) - -## [v7.0.1](https://github.com/fireblocks/py-sdk/compare/v7.0.0...v7.0.1) - 2025-02-12 - -### Merged - -- Generated SDK #4262 [`#95`](https://github.com/fireblocks/py-sdk/pull/95) - -## [v7.0.0](https://github.com/fireblocks/py-sdk/compare/v6.0.0...v7.0.0) - 2025-02-02 - -### Merged - -- Generated SDK #538 [`#92`](https://github.com/fireblocks/py-sdk/pull/92) - -## [v6.0.0](https://github.com/fireblocks/py-sdk/compare/v5.0.0...v6.0.0) - 2025-01-08 - -### Merged - -- Generated SDK #8699 [`#89`](https://github.com/fireblocks/py-sdk/pull/89) - -## [v5.0.0](https://github.com/fireblocks/py-sdk/compare/v4.0.0...v5.0.0) - 2024-12-05 - -### Merged - -- Generated SDK #1430 [`#85`](https://github.com/fireblocks/py-sdk/pull/85) -- Update python-package.yml, deprecate macos-12 [`#86`](https://github.com/fireblocks/py-sdk/pull/86) - -## [v4.0.0](https://github.com/fireblocks/py-sdk/compare/v3.0.0...v4.0.0) - 2024-10-31 - -### Merged - -- Generated SDK #5184 [`#82`](https://github.com/fireblocks/py-sdk/pull/82) - -## [v3.0.0](https://github.com/fireblocks/py-sdk/compare/v2.1.0...v3.0.0) - 2024-09-17 - -### Merged - -- Generated SDK #237 [`#81`](https://github.com/fireblocks/py-sdk/pull/81) - -## [v2.1.0](https://github.com/fireblocks/py-sdk/compare/v2.0.0...v2.1.0) - 2024-07-25 - -### Merged - -- Generated SDK #6749 [`#78`](https://github.com/fireblocks/py-sdk/pull/78) - -## [v2.0.0](https://github.com/fireblocks/py-sdk/compare/v1.0.4...v2.0.0) - 2024-07-17 - -### Merged - -- Generated SDK #6152 [`#76`](https://github.com/fireblocks/py-sdk/pull/76) -- Generated SDK #7647 [`#73`](https://github.com/fireblocks/py-sdk/pull/73) -- Generated SDK #7984 [`#70`](https://github.com/fireblocks/py-sdk/pull/70) - -## [v1.0.4](https://github.com/fireblocks/py-sdk/compare/v1.0.3...v1.0.4) - 2024-06-26 - -### Merged - -- Generated SDK #5779 [`#69`](https://github.com/fireblocks/py-sdk/pull/69) -- Generated SDK #913 [`#68`](https://github.com/fireblocks/py-sdk/pull/68) -- Generated SDK #1353 [`#67`](https://github.com/fireblocks/py-sdk/pull/67) -- Generated SDK #9982 [`#66`](https://github.com/fireblocks/py-sdk/pull/66) -- Generated SDK #1362 [`#65`](https://github.com/fireblocks/py-sdk/pull/65) -- Generated SDK #3652 [`#64`](https://github.com/fireblocks/py-sdk/pull/64) - -## [v1.0.3](https://github.com/fireblocks/py-sdk/compare/v1.0.2...v1.0.3) - 2024-06-06 - -### Merged - -- Generated SDK #2648 [`#30`](https://github.com/fireblocks/py-sdk/pull/30) - -## [v1.0.2](https://github.com/fireblocks/py-sdk/compare/v0.0.2-beta...v1.0.2) - 2024-06-04 - -### Merged - -- version 1.0.2 [`#25`](https://github.com/fireblocks/py-sdk/pull/25) -- version 1.0.0 [`#24`](https://github.com/fireblocks/py-sdk/pull/24) - -## v0.0.2-beta - 2024-05-30 - -### Merged - -- version 0.0.2-beta [`#23`](https://github.com/fireblocks/py-sdk/pull/23) -- Update .bumpversion.cfg [`#14`](https://github.com/fireblocks/py-sdk/pull/14) -- Update setup.py [`#13`](https://github.com/fireblocks/py-sdk/pull/13) -- Bug Fixes [`#12`](https://github.com/fireblocks/py-sdk/pull/12) -- update support for beta in bumpversion [`#11`](https://github.com/fireblocks/py-sdk/pull/11) -- Update setup.py [`#10`](https://github.com/fireblocks/py-sdk/pull/10) -- Update setup.py [`#9`](https://github.com/fireblocks/py-sdk/pull/9) -- Added Idempotency & NCW headers support [`#7`](https://github.com/fireblocks/py-sdk/pull/7) -- Added Idempotency & NCW headers support [`#8`](https://github.com/fireblocks/py-sdk/pull/8) -- Update setup.py [`#5`](https://github.com/fireblocks/py-sdk/pull/5) -- API Support Updates [`#4`](https://github.com/fireblocks/py-sdk/pull/4) diff --git a/README.md b/README.md index 4937cb2f..6fd3c5f7 100644 --- a/README.md +++ b/README.md @@ -664,6 +664,7 @@ Class | Method | HTTP request | Description *TradingApi* | [**get_order**](docs/TradingApi.md#get_order) | **GET** /trading/orders/{orderId} | Get order details *TradingApi* | [**get_order_requirements**](docs/TradingApi.md#get_order_requirements) | **GET** /trading/orders/{orderId}/requirement | Get order requirement details for an order *TradingApi* | [**get_orders**](docs/TradingApi.md#get_orders) | **GET** /trading/orders | Get orders +*TradingApi* | [**get_trading_pairs**](docs/TradingApi.md#get_trading_pairs) | **GET** /trading/pairs | Get trading pairs *TradingApi* | [**get_trading_provider_by_id**](docs/TradingApi.md#get_trading_provider_by_id) | **GET** /trading/providers/{providerId} | Get trading provider by ID *TradingApi* | [**get_trading_providers**](docs/TradingApi.md#get_trading_providers) | **GET** /trading/providers | Get providers *TradingApi* | [**submit_order_requirements**](docs/TradingApi.md#submit_order_requirements) | **POST** /trading/orders/{orderId}/requirement/data | Submit a response to an order requirement @@ -689,12 +690,12 @@ Class | Method | HTTP request | Description *TravelRuleApi* | [**set_vasp_for_vault**](docs/TravelRuleApi.md#set_vasp_for_vault) | **POST** /screening/travel_rule/vault/{vaultAccountId}/vasp | Assign VASP to vault *TravelRuleApi* | [**update_vasp**](docs/TravelRuleApi.md#update_vasp) | **PUT** /screening/travel_rule/vasp/update | Add jsonDidKey to VASP details *TravelRuleApi* | [**validate_full_travel_rule_transaction**](docs/TravelRuleApi.md#validate_full_travel_rule_transaction) | **POST** /screening/travel_rule/transaction/validate/full | Validate Full Travel Rule Transaction -*UTXOManagementBetaApi* | [**get_utxo_selection_config**](docs/UTXOManagementBetaApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config -*UTXOManagementBetaApi* | [**get_utxos**](docs/UTXOManagementBetaApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) -*UTXOManagementBetaApi* | [**get_vault_asset_utxo_selection_config**](docs/UTXOManagementBetaApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config -*UTXOManagementBetaApi* | [**update_utxo_labels**](docs/UTXOManagementBetaApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs -*UTXOManagementBetaApi* | [**upsert_utxo_selection_config**](docs/UTXOManagementBetaApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config -*UTXOManagementBetaApi* | [**upsert_vault_asset_utxo_selection_config**](docs/UTXOManagementBetaApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config +*UTXOManagementApi* | [**get_utxo_selection_config**](docs/UTXOManagementApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config +*UTXOManagementApi* | [**get_utxos**](docs/UTXOManagementApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) +*UTXOManagementApi* | [**get_vault_asset_utxo_selection_config**](docs/UTXOManagementApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config +*UTXOManagementApi* | [**update_utxo_labels**](docs/UTXOManagementApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs +*UTXOManagementApi* | [**upsert_utxo_selection_config**](docs/UTXOManagementApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config +*UTXOManagementApi* | [**upsert_vault_asset_utxo_selection_config**](docs/UTXOManagementApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config *UserGroupsBetaApi* | [**create_user_group**](docs/UserGroupsBetaApi.md#create_user_group) | **POST** /management/user_groups | Create user group *UserGroupsBetaApi* | [**delete_user_group**](docs/UserGroupsBetaApi.md#delete_user_group) | **DELETE** /management/user_groups/{groupId} | Delete user group *UserGroupsBetaApi* | [**get_user_group**](docs/UserGroupsBetaApi.md#get_user_group) | **GET** /management/user_groups/{groupId} | Get user group @@ -1643,6 +1644,7 @@ Class | Method | HTTP request | Description - [RiskLevelEnum](docs/RiskLevelEnum.md) - [RoleDetails](docs/RoleDetails.md) - [RoleDetails2](docs/RoleDetails2.md) + - [RoleFeeInfo](docs/RoleFeeInfo.md) - [RoleGrantee](docs/RoleGrantee.md) - [Rule](docs/Rule.md) - [RuleActionEnum](docs/RuleActionEnum.md) @@ -1914,8 +1916,12 @@ Class | Method | HTTP request | Description - [TotalSupplyItemDto](docs/TotalSupplyItemDto.md) - [TotalSupplyPagedResponse](docs/TotalSupplyPagedResponse.md) - [TotalSupplyPagedResponse2](docs/TotalSupplyPagedResponse2.md) + - [TradeClass](docs/TradeClass.md) - [TradingAccountType](docs/TradingAccountType.md) - [TradingErrorSchema](docs/TradingErrorSchema.md) + - [TradingPair](docs/TradingPair.md) + - [TradingPairSide](docs/TradingPairSide.md) + - [TradingPairsListPage](docs/TradingPairsListPage.md) - [TradingProvider](docs/TradingProvider.md) - [Transaction](docs/Transaction.md) - [TransactionConfigurations](docs/TransactionConfigurations.md) diff --git a/docs/FeeInfo.md b/docs/FeeInfo.md index c4dd92d2..96a38611 100644 --- a/docs/FeeInfo.md +++ b/docs/FeeInfo.md @@ -16,6 +16,8 @@ Name | Type | Description | Notes **relay_id** | **str** | The vault account ID of the relay | [optional] **relay_name** | **str** | The name of the tenant, only for THIRD_PARTY relays | [optional] **fee_usd** | **str** | The USD value of the fee | [optional] +**sender** | [**RoleFeeInfo**](RoleFeeInfo.md) | | [optional] +**recipient** | [**RoleFeeInfo**](RoleFeeInfo.md) | | [optional] ## Example diff --git a/docs/RoleFeeInfo.md b/docs/RoleFeeInfo.md new file mode 100644 index 00000000..3b2adb98 --- /dev/null +++ b/docs/RoleFeeInfo.md @@ -0,0 +1,31 @@ +# RoleFeeInfo + +**Early Access.** What the transfer cost the Fireblocks wallet of one role (`sender` or `recipient`). Currently reported for TON only. Unlike `networkFee`, which describes the transfer as a whole, these amounts are always the cost to the wallet of that role, so the two can differ, for example for a `recipient`. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**fees_deducted** | **str** | The total amount of TON deducted from the wallet because of the transfer, in TON, as a decimal string with nine decimals (like `networkFee`). - `sender` of a native TON transfer: the wallet's own fees plus the forwarding fees of the messages it sent. - `sender` of a Jetton (token) transfer: what the wallet actually lost. This is its own fees plus the TON it attached to cover the token wallets, minus any excess returned to it. If the excess is returned to the sender, the fee of receiving it is included. If the excess goes to any other wallet, the full attached TON is counted. When one external message carries several Jetton transfers (a multi-send), the loss is that of the whole message: every excess that came back to the wallet is subtracted. - `recipient` of a native TON transfer: the fees of the transaction that received the transfer, including gas. - `recipient` of a Jetton transfer: the fees of the notification transaction, usually a few nanoTON of storage fees. `\"0.000000000\"` when the transfer carried no forward amount, because the wallet then has no transaction of its own and pays nothing. | [optional] +**value_credited** | **str** | The gross amount of TON that arrived at the wallet together with the token notification (the forward amount), in TON, as a decimal string with nine decimals. Set only for the `recipient` of a Jetton (token) transfer, and omitted when the amount is zero or the notification bounced. `valueCredited` is not subtracted from `feesDeducted`. The net change of the wallet's TON balance caused by the transfer is `valueCredited` minus `feesDeducted`. | [optional] + +## Example + +```python +from fireblocks.models.role_fee_info import RoleFeeInfo + +# TODO update the JSON string below +json = "{}" +# create an instance of RoleFeeInfo from a JSON string +role_fee_info_instance = RoleFeeInfo.from_json(json) +# print the JSON string representation of the object +print(RoleFeeInfo.to_json()) + +# convert the object into a dict +role_fee_info_dict = role_fee_info_instance.to_dict() +# create an instance of RoleFeeInfo from a dict +role_fee_info_from_dict = RoleFeeInfo.from_dict(role_fee_info_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TradeClass.md b/docs/TradeClass.md new file mode 100644 index 00000000..7dff2b63 --- /dev/null +++ b/docs/TradeClass.md @@ -0,0 +1,29 @@ +# TradeClass + +The class of trade a pair represents, derived from the asset class of each leg, the chains those assets settle on, where the trade executes, and the trading side: * **SWAP_DEFI** - Exchange between two crypto assets on the same chain, executed on-chain * **SWAP_CEFI** - Exchange between two crypto assets on the same chain, executed through a provider account * **BRIDGE_DEFI** - Exchange between two crypto assets on different chains, executed on-chain * **BRIDGE_CEFI** - Exchange between two crypto assets on different chains, executed through a provider account * **INTERNAL_LEDGER** - Exchange between two crypto assets settled on a provider's internal ledger, within a single provider account. Not split by chain, because neither leg settles on-chain while the trade executes * **ON_RAMP** - Buying a crypto asset with a fiat asset * **OFF_RAMP** - Selling a crypto asset for a fiat asset * **FX** - Exchange between two fiat assets * **OTC** - A pair quoted by an OTC desk: firm, short-lived RFQ commitments against a dealer, executed on credit rather than against an order book. Takes precedence over the asset-class values, so an OTC desk selling USDC for USD is `OTC`, not `OFF_RAMP` * **UNKNOWN** - The class could not be resolved, e.g. when the chain of an asset could not be determined. Callers should not route on a pair with this class + +## Enum + +* `SWAP_DEFI` (value: `'SWAP_DEFI'`) + +* `SWAP_CEFI` (value: `'SWAP_CEFI'`) + +* `BRIDGE_DEFI` (value: `'BRIDGE_DEFI'`) + +* `BRIDGE_CEFI` (value: `'BRIDGE_CEFI'`) + +* `INTERNAL_LEDGER` (value: `'INTERNAL_LEDGER'`) + +* `ON_RAMP` (value: `'ON_RAMP'`) + +* `OFF_RAMP` (value: `'OFF_RAMP'`) + +* `FX` (value: `'FX'`) + +* `OTC` (value: `'OTC'`) + +* `UNKNOWN` (value: `'UNKNOWN'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TradingApi.md b/docs/TradingApi.md index 74baffb2..3a2f338a 100644 --- a/docs/TradingApi.md +++ b/docs/TradingApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**get_order**](TradingApi.md#get_order) | **GET** /trading/orders/{orderId} | Get order details [**get_order_requirements**](TradingApi.md#get_order_requirements) | **GET** /trading/orders/{orderId}/requirement | Get order requirement details for an order [**get_orders**](TradingApi.md#get_orders) | **GET** /trading/orders | Get orders +[**get_trading_pairs**](TradingApi.md#get_trading_pairs) | **GET** /trading/pairs | Get trading pairs [**get_trading_provider_by_id**](TradingApi.md#get_trading_provider_by_id) | **GET** /trading/providers/{providerId} | Get trading provider by ID [**get_trading_providers**](TradingApi.md#get_trading_providers) | **GET** /trading/providers | Get providers [**submit_order_requirements**](TradingApi.md#submit_order_requirements) | **POST** /trading/orders/{orderId}/requirement/data | Submit a response to an order requirement @@ -644,6 +645,128 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_trading_pairs** +> TradingPairsListPage get_trading_pairs(base_asset=base_asset, quote_asset=quote_asset, base_chain=base_chain, quote_chain=quote_chain, base_rail=base_rail, quote_rail=quote_rail, side=side, trade_class=trade_class, provider_id=provider_id, account_id=account_id, prefunded=prefunded, min=min, max=max, page_size=page_size, page_cursor=page_cursor) + +Get trading pairs + +Retrieve the base/quote trading pairs supported by the tenant's trading providers. All filters are optional and combined with AND. + +A provider can return several rows for one pair, one per side and per connected account, each with its own `tradeClass`. Rows may use the wildcard `*` asset ID or the `BOTH` side and are returned unexpanded (see the `baseAsset`, `side` and `baseChain` filters for how they match). + +**Examples** + - Which providers support ETH/USDC: `?baseAsset=ETH"eAsset=USDC`. Add `providerId` to check one provider; an empty `data` array means it does not support the pair. + - All pairs of one account: `?providerId=ACME&accountId=`. Page through large results with `pageSize` and `pageCursor`. + - Everything you can buy with euro: `?baseAsset=EUR&tradeClass=ON_RAMP`. + +**Endpoint Permission:** Owner, Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + +For detailed information about error codes and troubleshooting, please refer to our [API Error Codes documentation](https://developers.fireblocks.com/reference/api-error-codes). + + +### Example + + +```python +from fireblocks.models.trade_class import TradeClass +from fireblocks.models.trading_pair_side import TradingPairSide +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage +from fireblocks.models.transfer_rail import TransferRail +from fireblocks.client import Fireblocks +from fireblocks.client_configuration import ClientConfiguration +from fireblocks.exceptions import ApiException +from fireblocks.base_path import BasePath +from pprint import pprint + +# load the secret key content from a file +with open('your_secret_key_file_path', 'r') as file: + secret_key_value = file.read() + +# build the configuration +configuration = ClientConfiguration( + api_key="your_api_key", + secret_key=secret_key_value, + base_path=BasePath.Sandbox, # or set it directly to a string "https://sandbox-api.fireblocks.io/v1" +) + + +# Enter a context with an instance of the API client +with Fireblocks(configuration) as fireblocks: + base_asset = 'base_asset_example' # str | Filter by base asset ID. Also matches `*` rows on the chain of this asset. (optional) + quote_asset = 'quote_asset_example' # str | Filter by quote asset ID. Also matches `*` rows on the chain of this asset. (optional) + base_chain = 'base_chain_example' # str | Filter by base asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. (optional) + quote_chain = 'quote_chain_example' # str | Filter by quote asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. (optional) + base_rail = fireblocks.TransferRail() # TransferRail | Filter by base asset transfer rail. (optional) + quote_rail = fireblocks.TransferRail() # TransferRail | Filter by quote asset transfer rail. (optional) + side = fireblocks.TradingPairSide() # TradingPairSide | Filter by trading side. `BUY` or `SELL` also matches rows whose side is `BOTH`; `BOTH` matches rows of any side. (optional) + trade_class = fireblocks.TradeClass() # TradeClass | Filter by trade class. (optional) + provider_id = ['provider_id_example'] # List[str] | Filter by provider ID. Repeat the parameter to match any of several providers, up to 50. (optional) + account_id = ['account_id_example'] # List[str] | Filter by connected account ID. Repeat the parameter to match any of several accounts, up to 50. (optional) + prefunded = True # bool | Filter by whether the pair requires prefunding. (optional) + min = 'min_example' # str | An order-size filter, not a bound on the result. Only returns pairs whose own `min` field (the smallest base-asset amount the pair accepts) is at most this value, i.e. pairs that can serve an order of this size. For example, `min=10` returns pairs with a `min` of 10 or less. (optional) + max = 'max_example' # str | An order-size filter, not a bound on the result. Only returns pairs whose own `max` field (the largest base-asset amount the pair accepts) is at least this value. For example, `max=1000` returns pairs with a `max` of 1000 or more. (optional) + page_size = 100 # int | Page size for pagination. (optional) (default to 100) + page_cursor = 'page_cursor_example' # str | Page cursor for pagination. (optional) + + try: + # Get trading pairs + api_response = fireblocks.trading.get_trading_pairs(base_asset=base_asset, quote_asset=quote_asset, base_chain=base_chain, quote_chain=quote_chain, base_rail=base_rail, quote_rail=quote_rail, side=side, trade_class=trade_class, provider_id=provider_id, account_id=account_id, prefunded=prefunded, min=min, max=max, page_size=page_size, page_cursor=page_cursor).result() + print("The response of TradingApi->get_trading_pairs:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling TradingApi->get_trading_pairs: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **base_asset** | **str**| Filter by base asset ID. Also matches `*` rows on the chain of this asset. | [optional] + **quote_asset** | **str**| Filter by quote asset ID. Also matches `*` rows on the chain of this asset. | [optional] + **base_chain** | **str**| Filter by base asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. | [optional] + **quote_chain** | **str**| Filter by quote asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. | [optional] + **base_rail** | [**TransferRail**](.md)| Filter by base asset transfer rail. | [optional] + **quote_rail** | [**TransferRail**](.md)| Filter by quote asset transfer rail. | [optional] + **side** | [**TradingPairSide**](.md)| Filter by trading side. `BUY` or `SELL` also matches rows whose side is `BOTH`; `BOTH` matches rows of any side. | [optional] + **trade_class** | [**TradeClass**](.md)| Filter by trade class. | [optional] + **provider_id** | [**List[str]**](str.md)| Filter by provider ID. Repeat the parameter to match any of several providers, up to 50. | [optional] + **account_id** | [**List[str]**](str.md)| Filter by connected account ID. Repeat the parameter to match any of several accounts, up to 50. | [optional] + **prefunded** | **bool**| Filter by whether the pair requires prefunding. | [optional] + **min** | **str**| An order-size filter, not a bound on the result. Only returns pairs whose own `min` field (the smallest base-asset amount the pair accepts) is at most this value, i.e. pairs that can serve an order of this size. For example, `min=10` returns pairs with a `min` of 10 or less. | [optional] + **max** | **str**| An order-size filter, not a bound on the result. Only returns pairs whose own `max` field (the largest base-asset amount the pair accepts) is at least this value. For example, `max=1000` returns pairs with a `max` of 1000 or more. | [optional] + **page_size** | **int**| Page size for pagination. | [optional] [default to 100] + **page_cursor** | **str**| Page cursor for pagination. | [optional] + +### Return type + +[**TradingPairsListPage**](TradingPairsListPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Trading pairs response | * X-Request-ID -
| +**400** | Bad request: invalid input parameters, malformed request body, or validation failure. | * X-Request-ID -
| +**401** | Unauthorized. Missing / invalid JWT token in Authorization header. | * X-Request-ID -
| +**403** | Forbidden: insufficient permissions, disabled feature, or restricted access. | * X-Request-ID -
| +**429** | Rate limit exceeded: slow down and retry later. | * X-Request-ID -
| +**5XX** | Internal error while processing the request. | * X-Request-ID -
| +**0** | Error Response | * X-Request-ID -
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_trading_provider_by_id** > TradingProvider get_trading_provider_by_id(provider_id) diff --git a/docs/TradingPair.md b/docs/TradingPair.md new file mode 100644 index 00000000..3ebc5137 --- /dev/null +++ b/docs/TradingPair.md @@ -0,0 +1,42 @@ +# TradingPair + +A supported base/quote asset pair for a provider, optionally scoped to a specific connected account, for a given trading side (BUY/SELL, or `BOTH`), with the transfer rails and amount limits that apply to it. `baseAssetId` / `quoteAssetId` may be the wildcard `*`, meaning any asset on `baseChain` / `quoteChain`; such a row is not expanded. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**provider_id** | **str** | The provider that supports this pair. | +**account_id** | **str** | The connected account the pair is scoped to. Absent for direct-access providers, and for provider-level pairs that describe what a provider supports before any account is connected. Its absence therefore does not imply the provider is direct-access. | [optional] +**base_asset_id** | **str** | Fireblocks asset ID of the base asset, or `*` for any asset on `baseChain`. A `*` value always comes with `baseChain` set. | +**quote_asset_id** | **str** | Fireblocks asset ID of the quote asset, or `*` for any asset on `quoteChain`. A `*` value always comes with `quoteChain` set. | +**base_chain** | **str** | Blockchain `legacyId` of the base asset (e.g. `ETH`, `BASECHAIN_ETH`, `ETH-AETH`, `SOL`). Set for leaf crypto assets; absent for fiat and virtual assets. | [optional] +**quote_chain** | **str** | Blockchain `legacyId` of the quote asset (e.g. `ETH`, `BASECHAIN_ETH`, `ETH-AETH`, `SOL`). Set for leaf crypto assets; absent for fiat and virtual assets. | [optional] +**side** | [**TradingPairSide**](TradingPairSide.md) | | +**trade_class** | [**TradeClass**](TradeClass.md) | | +**base_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] +**quote_asset_rail** | [**TransferRail**](TransferRail.md) | | [optional] +**prefunded** | **bool** | Whether the provider requires the funds to be prefunded on the provider account before the order can execute. | [optional] +**min** | **str** | Minimum amount of the base asset for this pair/side, as a decimal string. | [optional] +**max** | **str** | Maximum amount of the base asset for this pair/side, as a decimal string. | [optional] + +## Example + +```python +from fireblocks.models.trading_pair import TradingPair + +# TODO update the JSON string below +json = "{}" +# create an instance of TradingPair from a JSON string +trading_pair_instance = TradingPair.from_json(json) +# print the JSON string representation of the object +print(TradingPair.to_json()) + +# convert the object into a dict +trading_pair_dict = trading_pair_instance.to_dict() +# create an instance of TradingPair from a dict +trading_pair_from_dict = TradingPair.from_dict(trading_pair_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TradingPairSide.md b/docs/TradingPairSide.md new file mode 100644 index 00000000..2ad87274 --- /dev/null +++ b/docs/TradingPairSide.md @@ -0,0 +1,15 @@ +# TradingPairSide + +Side of a trading pair. Same as `Side`, plus `BOTH`, meaning the pair applies to both BUY and SELL. + +## Enum + +* `BUY` (value: `'BUY'`) + +* `SELL` (value: `'SELL'`) + +* `BOTH` (value: `'BOTH'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TradingPairsListPage.md b/docs/TradingPairsListPage.md new file mode 100644 index 00000000..4195a591 --- /dev/null +++ b/docs/TradingPairsListPage.md @@ -0,0 +1,31 @@ +# TradingPairsListPage + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[TradingPair]**](TradingPair.md) | List of trading pairs. | +**total** | **int** | Total number of trading pairs matching the query. Best-effort count; may be absent when results are aggregated across multiple providers. | [optional] +**next** | **str** | A cursor for the next page of results, if available. | [optional] + +## Example + +```python +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage + +# TODO update the JSON string below +json = "{}" +# create an instance of TradingPairsListPage from a JSON string +trading_pairs_list_page_instance = TradingPairsListPage.from_json(json) +# print the JSON string representation of the object +print(TradingPairsListPage.to_json()) + +# convert the object into a dict +trading_pairs_list_page_dict = trading_pairs_list_page_instance.to_dict() +# create an instance of TradingPairsListPage from a dict +trading_pairs_list_page_from_dict = TradingPairsListPage.from_dict(trading_pairs_list_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TransactionResponse.md b/docs/TransactionResponse.md index d6151829..4cd5c922 100644 --- a/docs/TransactionResponse.md +++ b/docs/TransactionResponse.md @@ -68,7 +68,7 @@ Name | Type | Description | Notes **error_description** | **str** | The transaction's revert reason. This field will be returned when `subStatus` = 'SMART_CONTRACT_EXECUTION_FAILED'. | [optional] **replaced_tx_hash** | **str** | if the transaction is a replace by fee (RBF) transaction, this is the hash of the transsaction that was replaced | [optional] **nonce** | **str** | blockchain nonce for the transaction | [optional] -**blockchain_info** | **object** | A JSON used to store additional data that is blockchain-specific. | [optional] +**blockchain_info** | **object** | A JSON used to store additional data that is blockchain-specific. **TON (Early Access).** For TON transfers the object contains: | Field | Description | | --- | --- | | `tonTransferType` | `NATIVE` for a TON transfer, `JETTON` for a token transfer. | | `hashes` | Hex hashes of the transfer: `externalIncoming`, and either `tonTransfer` (native) or `jettonTransfer` (Jetton). | | `messageContent` | The message body (comment) of the transfer, as a base64 string. | | `isFeeExcess` | `true` only on the transaction that records the excess TON returned by a Jetton transfer to one of your wallets other than the sender. That transaction is a plain native transfer to the wallet, its top-level `feeInfo` has only a `recipient` struct, like any regular recipient. Omitted otherwise. | | `feeBreakdowns` | The fee details of the wallets of your workspace in the transfer: one entry per wallet. Available when the feature is enabled for your workspace. The totals of each wallet are in the top-level `feeInfo` of the transaction, in its `sender` and `recipient` structs (`feesDeducted`, `valueCredited`). | All amounts inside `feeBreakdowns` are integer strings in **nanoTON** (1 TON = 1,000,000,000 nanoTON), unlike the top-level `feeInfo`, which is in TON. Each entry of `feeBreakdowns` contains: | Field | Description | | --- | --- | | `role` | `SENDER` or `RECIPIENT`: the role of the wallet in the transfer. | | `address` | The wallet, as `raw` and `userFriendly` addresses. | | `txHash` | The hash of the wallet's own on-chain transaction. Omitted for a Jetton `recipient` with no transaction of its own (see below). | | `feeBreakdown.totalOutMsgsForwardFees` | The sum of the forwarding fees of the messages sent by the wallet's transaction. | | `feeBreakdown.chainReported` | The fee components reported by the blockchain for the wallet's transaction: `totalFees`, `storageFees`, `gasFees`, `actionFees` and `forwardFees`, and, when applicable, `importFee`, `bounceFees` and `actionFine`. `totalFees` is the sum of `storageFees`, `importFee`, `gasFees`, `actionFees` and `bounceFees`. | | `feeBreakdown.fundingSpent` | The rest of the sender's loss beyond the fees in this entry: for a Jetton `sender`, the TON the wallet attached to fund the token wallets and did not get back; for a wallet that sends through a second transaction of its own (a Highload wallet), also the fees of that transaction. For the same wallet, `feeInfo.<role>.feesDeducted` = `totalFees` + `totalOutMsgsForwardFees` + `fundingSpent` (`fundingSpent` is 0 when absent), converted from nanoTON to TON. | A Jetton transfer sent without a forward amount sends the recipient no notification, so the recipient wallet has no transaction and pays nothing: its entry has no `txHash`, all its figures are `\"0\"` and `feeInfo.recipient.feesDeducted` is `\"0.000000000\"`. An amount that could not be established from on-chain data is reported as no entry and no struct in `feeInfo` for that role. Only the wallets that belong to the notified workspace appear in `feeBreakdowns`. A transfer between two wallets of your own workspace is a single transaction and carries an entry for each wallet (tell them apart by `role`), and the top-level `feeInfo` has both a `sender` and a `recipient` struct. `blockchainInfo` is kept to 2,048 characters. When a very long message pushes a TON transfer over that, the optional details are dropped to make it fit: `feeBreakdowns` go first when the message fits without them, `messageContent` goes when the breakdowns fit without it, and both go when neither does. The `hashes`, `tonTransferType`, `isFeeExcess` and the top-level `feeInfo` are always kept. Example of a Jetton transfer sent from one of your wallets (addresses and hashes are placeholders): ```json { \"tonTransferType\": \"JETTON\", \"hashes\": { \"externalIncoming\": \"0000000000000000000000000000000000000000000000000000000000000001\", \"jettonTransfer\": \"0000000000000000000000000000000000000000000000000000000000000002\" }, \"messageContent\": \"te6cckEBAQEAAgAAAEysuc0=\", \"feeBreakdowns\": [ { \"address\": { \"raw\": \"0:0000000000000000000000000000000000000000000000000000000000000003\", \"userFriendly\": \"0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" }, \"txHash\": \"0000000000000000000000000000000000000000000000000000000000000004\", \"feeBreakdown\": { \"totalOutMsgsForwardFees\": \"86046\", \"chainReported\": { \"totalFees\": \"475291\", \"storageFees\": \"1\", \"gasFees\": \"220534\", \"actionFees\": \"43022\", \"forwardFees\": \"129068\", \"importFee\": \"211734\" }, \"fundingSpent\": \"17125078\" } } ] } ``` | [optional] ## Example diff --git a/docs/UTXOManagementBetaApi.md b/docs/UTXOManagementApi.md similarity index 83% rename from docs/UTXOManagementBetaApi.md rename to docs/UTXOManagementApi.md index 8da171b4..e45ba0d6 100644 --- a/docs/UTXOManagementBetaApi.md +++ b/docs/UTXOManagementApi.md @@ -1,15 +1,15 @@ -# fireblocks.UTXOManagementBetaApi +# fireblocks.UTXOManagementApi All URIs are relative to *https://api.fireblocks.io/v1* Method | HTTP request | Description ------------- | ------------- | ------------- -[**get_utxo_selection_config**](UTXOManagementBetaApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config -[**get_utxos**](UTXOManagementBetaApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) -[**get_vault_asset_utxo_selection_config**](UTXOManagementBetaApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config -[**update_utxo_labels**](UTXOManagementBetaApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs -[**upsert_utxo_selection_config**](UTXOManagementBetaApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config -[**upsert_vault_asset_utxo_selection_config**](UTXOManagementBetaApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config +[**get_utxo_selection_config**](UTXOManagementApi.md#get_utxo_selection_config) | **GET** /utxo_management/selection_config | Get UTXO selection config +[**get_utxos**](UTXOManagementApi.md#get_utxos) | **GET** /utxo_management/{vaultAccountId}/{assetId}/unspent_outputs | List unspent outputs (UTXOs) +[**get_vault_asset_utxo_selection_config**](UTXOManagementApi.md#get_vault_asset_utxo_selection_config) | **GET** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Get vault and asset UTXO selection config +[**update_utxo_labels**](UTXOManagementApi.md#update_utxo_labels) | **PATCH** /utxo_management/{vaultAccountId}/{assetId}/labels | Attach or detach labels to/from UTXOs +[**upsert_utxo_selection_config**](UTXOManagementApi.md#upsert_utxo_selection_config) | **PUT** /utxo_management/selection_config | Upsert UTXO selection config +[**upsert_vault_asset_utxo_selection_config**](UTXOManagementApi.md#upsert_vault_asset_utxo_selection_config) | **PUT** /utxo_management/{vaultAccountId}/{assetId}/selection_config | Upsert vault and asset UTXO selection config # **get_utxo_selection_config** @@ -18,7 +18,6 @@ Method | HTTP request | Description Get UTXO selection config Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. -**Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. ### Example @@ -49,11 +48,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get UTXO selection config - api_response = fireblocks.utxo_management_beta.get_utxo_selection_config().result() - print("The response of UTXOManagementBetaApi->get_utxo_selection_config:\n") + api_response = fireblocks.utxo_management.get_utxo_selection_config().result() + print("The response of UTXOManagementApi->get_utxo_selection_config:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->get_utxo_selection_config: %s\n" % e) + print("Exception when calling UTXOManagementApi->get_utxo_selection_config: %s\n" % e) ``` @@ -90,7 +89,6 @@ No authorization required List unspent outputs (UTXOs) Returns a paginated list of unspent transaction outputs (UTXOs) for a UTXO-based asset in a vault account, with optional filters for labels, statuses, amounts, and more. -**Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. ### Example @@ -136,11 +134,11 @@ with Fireblocks(configuration) as fireblocks: try: # List unspent outputs (UTXOs) - api_response = fireblocks.utxo_management_beta.get_utxos(vault_account_id, asset_id, page_cursor=page_cursor, page_size=page_size, sort=sort, order=order, include_all_labels=include_all_labels, include_any_labels=include_any_labels, exclude_any_labels=exclude_any_labels, include_statuses=include_statuses, address=address, tx_hash=tx_hash, tx_id=tx_id, min_amount=min_amount, max_amount=max_amount).result() - print("The response of UTXOManagementBetaApi->get_utxos:\n") + api_response = fireblocks.utxo_management.get_utxos(vault_account_id, asset_id, page_cursor=page_cursor, page_size=page_size, sort=sort, order=order, include_all_labels=include_all_labels, include_any_labels=include_any_labels, exclude_any_labels=exclude_any_labels, include_statuses=include_statuses, address=address, tx_hash=tx_hash, tx_id=tx_id, min_amount=min_amount, max_amount=max_amount).result() + print("The response of UTXOManagementApi->get_utxos:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->get_utxos: %s\n" % e) + print("Exception when calling UTXOManagementApi->get_utxos: %s\n" % e) ``` @@ -194,7 +192,6 @@ No authorization required Get vault and asset UTXO selection config Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. -**Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. ### Example @@ -227,11 +224,11 @@ with Fireblocks(configuration) as fireblocks: try: # Get vault and asset UTXO selection config - api_response = fireblocks.utxo_management_beta.get_vault_asset_utxo_selection_config(vault_account_id, asset_id).result() - print("The response of UTXOManagementBetaApi->get_vault_asset_utxo_selection_config:\n") + api_response = fireblocks.utxo_management.get_vault_asset_utxo_selection_config(vault_account_id, asset_id).result() + print("The response of UTXOManagementApi->get_vault_asset_utxo_selection_config:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->get_vault_asset_utxo_selection_config: %s\n" % e) + print("Exception when calling UTXOManagementApi->get_vault_asset_utxo_selection_config: %s\n" % e) ``` @@ -290,9 +287,6 @@ A UTXO removed within the last hour is reported as `NOT_FOUND` with `NOT_LABELLABLE` after about an hour. A `400` without `failures` means the request itself is malformed. -**Note:** These endpoints are currently in beta and might be subject to -changes. - Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. @@ -329,11 +323,11 @@ with Fireblocks(configuration) as fireblocks: try: # Attach or detach labels to/from UTXOs - api_response = fireblocks.utxo_management_beta.update_utxo_labels(vault_account_id, asset_id, attach_detach_utxo_labels_request, idempotency_key=idempotency_key).result() - print("The response of UTXOManagementBetaApi->update_utxo_labels:\n") + api_response = fireblocks.utxo_management.update_utxo_labels(vault_account_id, asset_id, attach_detach_utxo_labels_request, idempotency_key=idempotency_key).result() + print("The response of UTXOManagementApi->update_utxo_labels:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->update_utxo_labels: %s\n" % e) + print("Exception when calling UTXOManagementApi->update_utxo_labels: %s\n" % e) ``` @@ -377,7 +371,6 @@ No authorization required Upsert UTXO selection config Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. -**Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. ### Example @@ -411,11 +404,11 @@ with Fireblocks(configuration) as fireblocks: try: # Upsert UTXO selection config - api_response = fireblocks.utxo_management_beta.upsert_utxo_selection_config(upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() - print("The response of UTXOManagementBetaApi->upsert_utxo_selection_config:\n") + api_response = fireblocks.utxo_management.upsert_utxo_selection_config(upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() + print("The response of UTXOManagementApi->upsert_utxo_selection_config:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->upsert_utxo_selection_config: %s\n" % e) + print("Exception when calling UTXOManagementApi->upsert_utxo_selection_config: %s\n" % e) ``` @@ -456,7 +449,6 @@ No authorization required Upsert vault and asset UTXO selection config Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. -**Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. ### Example @@ -492,11 +484,11 @@ with Fireblocks(configuration) as fireblocks: try: # Upsert vault and asset UTXO selection config - api_response = fireblocks.utxo_management_beta.upsert_vault_asset_utxo_selection_config(vault_account_id, asset_id, upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() - print("The response of UTXOManagementBetaApi->upsert_vault_asset_utxo_selection_config:\n") + api_response = fireblocks.utxo_management.upsert_vault_asset_utxo_selection_config(vault_account_id, asset_id, upsert_utxo_selection_config_request, idempotency_key=idempotency_key).result() + print("The response of UTXOManagementApi->upsert_vault_asset_utxo_selection_config:\n") pprint(api_response) except Exception as e: - print("Exception when calling UTXOManagementBetaApi->upsert_vault_asset_utxo_selection_config: %s\n" % e) + print("Exception when calling UTXOManagementApi->upsert_vault_asset_utxo_selection_config: %s\n" % e) ``` diff --git a/docs/UtxoInputSelection.md b/docs/UtxoInputSelection.md index 93201561..81eb9e7d 100644 --- a/docs/UtxoInputSelection.md +++ b/docs/UtxoInputSelection.md @@ -1,6 +1,6 @@ # UtxoInputSelection -Explicitly control which UTXOs to include or exclude. This feature is currently in beta and might be subject to changes. +Explicitly control which UTXOs to include or exclude. ## Properties diff --git a/docs/UtxoSelectionFilters.md b/docs/UtxoSelectionFilters.md index 84e89f1c..bc0586c2 100644 --- a/docs/UtxoSelectionFilters.md +++ b/docs/UtxoSelectionFilters.md @@ -1,6 +1,6 @@ # UtxoSelectionFilters -Narrow the UTXO candidate pool. All specified filters are AND-ed together. This feature is currently in beta and might be subject to changes. +Narrow the UTXO candidate pool. All specified filters are AND-ed together. ## Properties diff --git a/docs/UtxoSelectionParams.md b/docs/UtxoSelectionParams.md index b7fed3a7..f654867d 100644 --- a/docs/UtxoSelectionParams.md +++ b/docs/UtxoSelectionParams.md @@ -1,6 +1,6 @@ # UtxoSelectionParams -For UTXO-based blockchains only. Controls which UTXOs are used for automatic selection. Cannot be used together with extraParameters.inputsSelection. This feature is currently in beta and might be subject to changes. +For UTXO-based blockchains only. Controls which UTXOs are used for automatic selection. Cannot be used together with extraParameters.inputsSelection. ## Properties diff --git a/docs/VaultsApi.md b/docs/VaultsApi.md index b8944dbb..1bf669a7 100644 --- a/docs/VaultsApi.md +++ b/docs/VaultsApi.md @@ -1292,12 +1292,12 @@ with Fireblocks(configuration) as fireblocks: vault_account_id = 'vault_account_id_example' # str | The ID of the vault account asset_id = 'asset_id_example' # str | The ID of the asset manual_signging = True # bool | False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device. (optional) - include_all_labels = ['include_all_labels_example'] # List[str] | Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) - include_any_labels = ['include_any_labels_example'] # List[str] | Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) - exclude_any_labels = ['exclude_any_labels_example'] # List[str] | Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) - address = 'address_example' # str | Only include UTXOs from this specific address. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) - min_amount = 'min_amount_example' # str | Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) - max_amount = 'max_amount_example' # str | Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. (optional) + include_all_labels = ['include_all_labels_example'] # List[str] | Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. (optional) + include_any_labels = ['include_any_labels_example'] # List[str] | Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. (optional) + exclude_any_labels = ['exclude_any_labels_example'] # List[str] | Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. (optional) + address = 'address_example' # str | Only include UTXOs from this specific address. Requires the UTXO Manager. (optional) + min_amount = 'min_amount_example' # str | Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. (optional) + max_amount = 'max_amount_example' # str | Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. (optional) try: # Get max spendable amount in a transaction @@ -1318,12 +1318,12 @@ Name | Type | Description | Notes **vault_account_id** | **str**| The ID of the vault account | **asset_id** | **str**| The ID of the asset | **manual_signging** | **bool**| False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device. | [optional] - **include_all_labels** | [**List[str]**](str.md)| Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] - **include_any_labels** | [**List[str]**](str.md)| Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] - **exclude_any_labels** | [**List[str]**](str.md)| Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] - **address** | **str**| Only include UTXOs from this specific address. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] - **min_amount** | **str**| Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] - **max_amount** | **str**| Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. | [optional] + **include_all_labels** | [**List[str]**](str.md)| Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. | [optional] + **include_any_labels** | [**List[str]**](str.md)| Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. | [optional] + **exclude_any_labels** | [**List[str]**](str.md)| Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. | [optional] + **address** | **str**| Only include UTXOs from this specific address. Requires the UTXO Manager. | [optional] + **min_amount** | **str**| Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. | [optional] + **max_amount** | **str**| Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. | [optional] ### Return type diff --git a/fireblocks/__init__.py b/fireblocks/__init__.py index d08c78ba..5f37de45 100644 --- a/fireblocks/__init__.py +++ b/fireblocks/__init__.py @@ -14,7 +14,7 @@ Do not edit the class manually. """ # noqa: E501 -__version__ = "36.0.0" +__version__ = "0.0.0" # import apis into sdk package from fireblocks.api.api_user_api import ApiUserApi @@ -69,7 +69,7 @@ from fireblocks.api.trading_api import TradingApi from fireblocks.api.transactions_api import TransactionsApi from fireblocks.api.travel_rule_api import TravelRuleApi -from fireblocks.api.utxo_management_beta_api import UTXOManagementBetaApi +from fireblocks.api.utxo_management_api import UTXOManagementApi from fireblocks.api.user_groups_beta_api import UserGroupsBetaApi from fireblocks.api.users_api import UsersApi from fireblocks.api.vaults_api import VaultsApi @@ -1399,6 +1399,7 @@ from fireblocks.models.risk_level_enum import RiskLevelEnum from fireblocks.models.role_details import RoleDetails from fireblocks.models.role_details2 import RoleDetails2 +from fireblocks.models.role_fee_info import RoleFeeInfo from fireblocks.models.role_grantee import RoleGrantee from fireblocks.models.rule import Rule from fireblocks.models.rule_action_enum import RuleActionEnum @@ -1824,8 +1825,12 @@ from fireblocks.models.total_supply_item_dto import TotalSupplyItemDto from fireblocks.models.total_supply_paged_response import TotalSupplyPagedResponse from fireblocks.models.total_supply_paged_response2 import TotalSupplyPagedResponse2 +from fireblocks.models.trade_class import TradeClass from fireblocks.models.trading_account_type import TradingAccountType from fireblocks.models.trading_error_schema import TradingErrorSchema +from fireblocks.models.trading_pair import TradingPair +from fireblocks.models.trading_pair_side import TradingPairSide +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage from fireblocks.models.trading_provider import TradingProvider from fireblocks.models.transaction import Transaction from fireblocks.models.transaction_configurations import TransactionConfigurations diff --git a/fireblocks/api/__init__.py b/fireblocks/api/__init__.py index 1e69bf55..6166ed1f 100644 --- a/fireblocks/api/__init__.py +++ b/fireblocks/api/__init__.py @@ -49,7 +49,7 @@ from fireblocks.api.trading_api import TradingApi from fireblocks.api.transactions_api import TransactionsApi from fireblocks.api.travel_rule_api import TravelRuleApi -from fireblocks.api.utxo_management_beta_api import UTXOManagementBetaApi +from fireblocks.api.utxo_management_api import UTXOManagementApi from fireblocks.api.user_groups_beta_api import UserGroupsBetaApi from fireblocks.api.users_api import UsersApi from fireblocks.api.vaults_api import VaultsApi diff --git a/fireblocks/api/trading_api.py b/fireblocks/api/trading_api.py index 408a4b15..d32586a4 100644 --- a/fireblocks/api/trading_api.py +++ b/fireblocks/api/trading_api.py @@ -18,7 +18,7 @@ from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated -from pydantic import Field, StrictBytes, StrictStr, field_validator +from pydantic import Field, StrictBool, StrictBytes, StrictStr, field_validator from typing import List, Optional, Tuple, Union from typing_extensions import Annotated from fireblocks.models.create_offers_request import CreateOffersRequest @@ -34,7 +34,11 @@ from fireblocks.models.rates_request import RatesRequest from fireblocks.models.rates_response import RatesResponse from fireblocks.models.submit_order_requirement_request import SubmitOrderRequirementRequest +from fireblocks.models.trade_class import TradeClass +from fireblocks.models.trading_pair_side import TradingPairSide +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage from fireblocks.models.trading_provider import TradingProvider +from fireblocks.models.transfer_rail import TransferRail from fireblocks.api_client import ApiClient, RequestSerialized from fireblocks.api_response import ApiResponse @@ -1152,6 +1156,270 @@ def _get_orders_serialize( + @validate_call + def get_trading_pairs( + self, + base_asset: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True)]], Field(description="Filter by base asset ID. Also matches `*` rows on the chain of this asset.")] = None, + quote_asset: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True)]], Field(description="Filter by quote asset ID. Also matches `*` rows on the chain of this asset.")] = None, + base_chain: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True)]], Field(description="Filter by base asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain.")] = None, + quote_chain: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True)]], Field(description="Filter by quote asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain.")] = None, + base_rail: Annotated[Optional[TransferRail], Field(description="Filter by base asset transfer rail.")] = None, + quote_rail: Annotated[Optional[TransferRail], Field(description="Filter by quote asset transfer rail.")] = None, + side: Annotated[Optional[TradingPairSide], Field(description="Filter by trading side. `BUY` or `SELL` also matches rows whose side is `BOTH`; `BOTH` matches rows of any side.")] = None, + trade_class: Annotated[Optional[TradeClass], Field(description="Filter by trade class.")] = None, + provider_id: Annotated[Optional[Annotated[List[Annotated[str, Field(min_length=1, strict=True)]], Field(max_length=50)]], Field(description="Filter by provider ID. Repeat the parameter to match any of several providers, up to 50.")] = None, + account_id: Annotated[Optional[Annotated[List[Annotated[str, Field(min_length=1, strict=True)]], Field(max_length=50)]], Field(description="Filter by connected account ID. Repeat the parameter to match any of several accounts, up to 50.")] = None, + prefunded: Annotated[Optional[StrictBool], Field(description="Filter by whether the pair requires prefunding.")] = None, + min: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="An order-size filter, not a bound on the result. Only returns pairs whose own `min` field (the smallest base-asset amount the pair accepts) is at most this value, i.e. pairs that can serve an order of this size. For example, `min=10` returns pairs with a `min` of 10 or less.")] = None, + max: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="An order-size filter, not a bound on the result. Only returns pairs whose own `max` field (the largest base-asset amount the pair accepts) is at least this value. For example, `max=1000` returns pairs with a `max` of 1000 or more.")] = None, + page_size: Annotated[Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field(description="Page size for pagination.")] = None, + page_cursor: Annotated[Optional[StrictStr], Field(description="Page cursor for pagination.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Future[ApiResponse[TradingPairsListPage]]: + """Get trading pairs + + Retrieve the base/quote trading pairs supported by the tenant's trading providers. All filters are optional and combined with AND. A provider can return several rows for one pair, one per side and per connected account, each with its own `tradeClass`. Rows may use the wildcard `*` asset ID or the `BOTH` side and are returned unexpanded (see the `baseAsset`, `side` and `baseChain` filters for how they match). **Examples** - Which providers support ETH/USDC: `?baseAsset=ETH"eAsset=USDC`. Add `providerId` to check one provider; an empty `data` array means it does not support the pair. - All pairs of one account: `?providerId=ACME&accountId=`. Page through large results with `pageSize` and `pageCursor`. - Everything you can buy with euro: `?baseAsset=EUR&tradeClass=ON_RAMP`. **Endpoint Permission:** Owner, Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. For detailed information about error codes and troubleshooting, please refer to our [API Error Codes documentation](https://developers.fireblocks.com/reference/api-error-codes). + + :param base_asset: Filter by base asset ID. Also matches `*` rows on the chain of this asset. + :type base_asset: str + :param quote_asset: Filter by quote asset ID. Also matches `*` rows on the chain of this asset. + :type quote_asset: str + :param base_chain: Filter by base asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. + :type base_chain: str + :param quote_chain: Filter by quote asset blockchain `legacyId` (e.g. `ETH`, `BASECHAIN_ETH`, `SOL`). Matches both concrete-asset rows and `*` rows on that chain. + :type quote_chain: str + :param base_rail: Filter by base asset transfer rail. + :type base_rail: TransferRail + :param quote_rail: Filter by quote asset transfer rail. + :type quote_rail: TransferRail + :param side: Filter by trading side. `BUY` or `SELL` also matches rows whose side is `BOTH`; `BOTH` matches rows of any side. + :type side: TradingPairSide + :param trade_class: Filter by trade class. + :type trade_class: TradeClass + :param provider_id: Filter by provider ID. Repeat the parameter to match any of several providers, up to 50. + :type provider_id: List[str] + :param account_id: Filter by connected account ID. Repeat the parameter to match any of several accounts, up to 50. + :type account_id: List[str] + :param prefunded: Filter by whether the pair requires prefunding. + :type prefunded: bool + :param min: An order-size filter, not a bound on the result. Only returns pairs whose own `min` field (the smallest base-asset amount the pair accepts) is at most this value, i.e. pairs that can serve an order of this size. For example, `min=10` returns pairs with a `min` of 10 or less. + :type min: str + :param max: An order-size filter, not a bound on the result. Only returns pairs whose own `max` field (the largest base-asset amount the pair accepts) is at least this value. For example, `max=1000` returns pairs with a `max` of 1000 or more. + :type max: str + :param page_size: Page size for pagination. + :type page_size: int + :param page_cursor: Page cursor for pagination. + :type page_cursor: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + + _param = self._get_trading_pairs_serialize( + base_asset=base_asset, + quote_asset=quote_asset, + base_chain=base_chain, + quote_chain=quote_chain, + base_rail=base_rail, + quote_rail=quote_rail, + side=side, + trade_class=trade_class, + provider_id=provider_id, + account_id=account_id, + prefunded=prefunded, + min=min, + max=max, + page_size=page_size, + page_cursor=page_cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "TradingPairsListPage", + '400': "TradingErrorSchema", + '401': "TradingErrorSchema", + '403': "TradingErrorSchema", + '429': "TradingErrorSchema", + '5XX': "TradingErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + _operation_id="get_trading_pairs", + ) + + def _get_trading_pairs_serialize( + self, + base_asset, + quote_asset, + base_chain, + quote_chain, + base_rail, + quote_rail, + side, + trade_class, + provider_id, + account_id, + prefunded, + min, + max, + page_size, + page_cursor, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'providerId': 'multi', + 'accountId': 'multi', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if base_asset is not None: + + _query_params.append(('baseAsset', base_asset)) + + if quote_asset is not None: + + _query_params.append(('quoteAsset', quote_asset)) + + if base_chain is not None: + + _query_params.append(('baseChain', base_chain)) + + if quote_chain is not None: + + _query_params.append(('quoteChain', quote_chain)) + + if base_rail is not None: + + _query_params.append(('baseRail', base_rail.value)) + + if quote_rail is not None: + + _query_params.append(('quoteRail', quote_rail.value)) + + if side is not None: + + _query_params.append(('side', side.value)) + + if trade_class is not None: + + _query_params.append(('tradeClass', trade_class.value)) + + if provider_id is not None: + + _query_params.append(('providerId', provider_id)) + + if account_id is not None: + + _query_params.append(('accountId', account_id)) + + if prefunded is not None: + + _query_params.append(('prefunded', prefunded)) + + if min is not None: + + _query_params.append(('min', min)) + + if max is not None: + + _query_params.append(('max', max)) + + if page_size is not None: + + _query_params.append(('pageSize', page_size)) + + if page_cursor is not None: + + _query_params.append(('pageCursor', page_cursor)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/trading/pairs', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def get_trading_provider_by_id( self, diff --git a/fireblocks/api/utxo_management_beta_api.py b/fireblocks/api/utxo_management_api.py similarity index 97% rename from fireblocks/api/utxo_management_beta_api.py rename to fireblocks/api/utxo_management_api.py index e693e2a7..c79cccc2 100644 --- a/fireblocks/api/utxo_management_beta_api.py +++ b/fireblocks/api/utxo_management_api.py @@ -33,7 +33,7 @@ from fireblocks.validation_utils import validate_not_empty_string -class UTXOManagementBetaApi: +class UTXOManagementApi: """NOTE: This class is auto generated by OpenAPI Generator Ref: https://openapi-generator.tech @@ -64,7 +64,7 @@ def get_utxo_selection_config( ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: """Get UTXO selection config - Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + Returns the workspace-level configured selection strategy and the effective strategy after runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this workspace, otherwise `ASC`. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -201,7 +201,7 @@ def get_utxos( ) -> Future[ApiResponse[ListUtxosResponse]]: """List unspent outputs (UTXOs) - Returns a paginated list of unspent transaction outputs (UTXOs) for a UTXO-based asset in a vault account, with optional filters for labels, statuses, amounts, and more. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + Returns a paginated list of unspent transaction outputs (UTXOs) for a UTXO-based asset in a vault account, with optional filters for labels, statuses, amounts, and more. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. :param vault_account_id: The ID of the vault account (required) :type vault_account_id: str @@ -447,7 +447,7 @@ def get_vault_asset_utxo_selection_config( ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: """Get vault and asset UTXO selection config - Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. + Returns the config stored at this vault-and-asset scope, if any, and the effective strategy after workspace fallback and runtime resolution. `ADAPTIVE` is the recommended strategy. When no row is stored at this scope and none is inherited from the workspace (source `DEFAULT`), `effective` is `ADAPTIVE` if adaptive selection is serving for this scope, otherwise `ASC`. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor, Viewer. :param vault_account_id: The ID of the vault account. (required) :type vault_account_id: str @@ -587,7 +587,7 @@ def update_utxo_labels( ) -> Future[ApiResponse[AttachDetachUtxoLabelsResponse]]: """Attach or detach labels to/from UTXOs - Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. The request is all-or-nothing: if any identifier cannot be labelled, no UTXO is labelled and the request fails with `400`. The response lists every failed identifier in `failures`, each with its own `reason` — use it, not the status, to decide what to do: - `NOT_FOUND` — not found in this vault and asset. - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. A UTXO removed within the last hour is reported as `NOT_FOUND` with `utxoStatus: REMOVED`; if it does not reappear, it becomes `NOT_LABELLABLE` after about an hour. A `400` without `failures` means the request itself is malformed. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. + Attach or detach labels to/from UTXOs in a vault account. Labels can be used for organizing and filtering UTXOs. Labels are applied additively — `labelsToAttach` adds to the existing label set and `labelsToDetach` removes from it. Neither operation replaces the full set. The request is all-or-nothing: if any identifier cannot be labelled, no UTXO is labelled and the request fails with `400`. The response lists every failed identifier in `failures`, each with its own `reason` — use it, not the status, to decide what to do: - `NOT_FOUND` — not found in this vault and asset. - `NOT_LABELLABLE` — spent, or removed, and can no longer be labelled. A UTXO removed within the last hour is reported as `NOT_FOUND` with `utxoStatus: REMOVED`; if it does not reappear, it becomes `NOT_LABELLABLE` after about an hour. A `400` without `failures` means the request itself is malformed. Endpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor. :param vault_account_id: The ID of the vault account (required) :type vault_account_id: str @@ -751,7 +751,7 @@ def upsert_utxo_selection_config( ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: """Upsert UTXO selection config - Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + Creates or updates the workspace-level UTXO selection strategy. `ADAPTIVE` is recommended. Endpoint Permission: Admin, Non-Signing Admin. :param upsert_utxo_selection_config_request: (required) :type upsert_utxo_selection_config_request: UpsertUtxoSelectionConfigRequest @@ -902,7 +902,7 @@ def upsert_vault_asset_utxo_selection_config( ) -> Future[ApiResponse[UtxoSelectionConfigResponse]]: """Upsert vault and asset UTXO selection config - Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. **Note:** These endpoints are currently in beta and might be subject to changes. Endpoint Permission: Admin, Non-Signing Admin. + Creates or updates the UTXO selection strategy for this vault account and asset. `ADAPTIVE` is recommended. Endpoint Permission: Admin, Non-Signing Admin. :param vault_account_id: The ID of the vault account. (required) :type vault_account_id: str diff --git a/fireblocks/api/vaults_api.py b/fireblocks/api/vaults_api.py index 456985d8..c5fcab89 100644 --- a/fireblocks/api/vaults_api.py +++ b/fireblocks/api/vaults_api.py @@ -2311,12 +2311,12 @@ def get_max_spendable_amount( vault_account_id: Annotated[StrictStr, Field(description="The ID of the vault account")], asset_id: Annotated[StrictStr, Field(description="The ID of the asset")], manual_signging: Annotated[Optional[StrictBool], Field(description="False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device.")] = None, - include_all_labels: Annotated[Optional[List[StrictStr]], Field(description="Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, - include_any_labels: Annotated[Optional[List[StrictStr]], Field(description="Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, - exclude_any_labels: Annotated[Optional[List[StrictStr]], Field(description="Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, - address: Annotated[Optional[StrictStr], Field(description="Only include UTXOs from this specific address. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, - min_amount: Annotated[Optional[StrictStr], Field(description="Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, - max_amount: Annotated[Optional[StrictStr], Field(description="Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes.")] = None, + include_all_labels: Annotated[Optional[List[StrictStr]], Field(description="Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager.")] = None, + include_any_labels: Annotated[Optional[List[StrictStr]], Field(description="Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager.")] = None, + exclude_any_labels: Annotated[Optional[List[StrictStr]], Field(description="Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager.")] = None, + address: Annotated[Optional[StrictStr], Field(description="Only include UTXOs from this specific address. Requires the UTXO Manager.")] = None, + min_amount: Annotated[Optional[StrictStr], Field(description="Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager.")] = None, + max_amount: Annotated[Optional[StrictStr], Field(description="Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager.")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2340,17 +2340,17 @@ def get_max_spendable_amount( :type asset_id: str :param manual_signging: False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device. :type manual_signging: bool - :param include_all_labels: Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param include_all_labels: Only include UTXOs that have ALL of these labels (AND logic). Requires the UTXO Manager. :type include_all_labels: List[str] - :param include_any_labels: Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param include_any_labels: Only include UTXOs that have ANY of these labels (OR logic). Requires the UTXO Manager. :type include_any_labels: List[str] - :param exclude_any_labels: Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param exclude_any_labels: Exclude UTXOs that have ANY of these labels. Requires the UTXO Manager. :type exclude_any_labels: List[str] - :param address: Only include UTXOs from this specific address. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param address: Only include UTXOs from this specific address. Requires the UTXO Manager. :type address: str - :param min_amount: Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param min_amount: Minimum UTXO amount in the asset's base unit. Requires the UTXO Manager. :type min_amount: str - :param max_amount: Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. This feature is currently in beta and might be subject to changes. + :param max_amount: Maximum UTXO amount in the asset's base unit. Requires the UTXO Manager. :type max_amount: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request diff --git a/fireblocks/client.py b/fireblocks/client.py index b634bb40..fc6e0fab 100644 --- a/fireblocks/client.py +++ b/fireblocks/client.py @@ -66,7 +66,7 @@ from fireblocks.api.trading_api import TradingApi from fireblocks.api.transactions_api import TransactionsApi from fireblocks.api.travel_rule_api import TravelRuleApi -from fireblocks.api.utxo_management_beta_api import UTXOManagementBetaApi +from fireblocks.api.utxo_management_api import UTXOManagementApi from fireblocks.api.user_groups_beta_api import UserGroupsBetaApi from fireblocks.api.users_api import UsersApi from fireblocks.api.vaults_api import VaultsApi @@ -135,7 +135,7 @@ def __init__(self, configuration: ClientConfiguration = None): self._trading = None self._transactions = None self._travel_rule = None - self._utxo_management_beta = None + self._utxo_management = None self._user_groups_beta = None self._users = None self._vaults = None @@ -450,10 +450,10 @@ def travel_rule(self) -> TravelRuleApi: return self._travel_rule @property - def utxo_management_beta(self) -> UTXOManagementBetaApi: - if self._utxo_management_beta is None: - self._utxo_management_beta = UTXOManagementBetaApi(self._api_client) - return self._utxo_management_beta + def utxo_management(self) -> UTXOManagementApi: + if self._utxo_management is None: + self._utxo_management = UTXOManagementApi(self._api_client) + return self._utxo_management @property def user_groups_beta(self) -> UserGroupsBetaApi: diff --git a/fireblocks/configuration.py b/fireblocks/configuration.py index 7982d346..c1a025c0 100644 --- a/fireblocks/configuration.py +++ b/fireblocks/configuration.py @@ -550,7 +550,7 @@ def to_debug_report(self) -> str: "OS: {env}\n" "Python Version: {pyversion}\n" "Version of the API: 1.6.2\n" - "SDK Package Version: 36.0.0".format(env=sys.platform, pyversion=sys.version) + "SDK Package Version: 0.0.0".format(env=sys.platform, pyversion=sys.version) ) def get_host_settings(self) -> List[HostSetting]: diff --git a/fireblocks/models/__init__.py b/fireblocks/models/__init__.py index 5963b927..d723cfcc 100644 --- a/fireblocks/models/__init__.py +++ b/fireblocks/models/__init__.py @@ -880,6 +880,7 @@ from fireblocks.models.risk_level_enum import RiskLevelEnum from fireblocks.models.role_details import RoleDetails from fireblocks.models.role_details2 import RoleDetails2 +from fireblocks.models.role_fee_info import RoleFeeInfo from fireblocks.models.role_grantee import RoleGrantee from fireblocks.models.rule import Rule from fireblocks.models.rule_action_enum import RuleActionEnum @@ -1151,8 +1152,12 @@ from fireblocks.models.total_supply_item_dto import TotalSupplyItemDto from fireblocks.models.total_supply_paged_response import TotalSupplyPagedResponse from fireblocks.models.total_supply_paged_response2 import TotalSupplyPagedResponse2 +from fireblocks.models.trade_class import TradeClass from fireblocks.models.trading_account_type import TradingAccountType from fireblocks.models.trading_error_schema import TradingErrorSchema +from fireblocks.models.trading_pair import TradingPair +from fireblocks.models.trading_pair_side import TradingPairSide +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage from fireblocks.models.trading_provider import TradingProvider from fireblocks.models.transaction import Transaction from fireblocks.models.transaction_configurations import TransactionConfigurations diff --git a/fireblocks/models/fee_info.py b/fireblocks/models/fee_info.py index 6e52508a..9c75bae5 100644 --- a/fireblocks/models/fee_info.py +++ b/fireblocks/models/fee_info.py @@ -20,6 +20,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.role_fee_info import RoleFeeInfo from typing import Optional, Set from typing_extensions import Self @@ -37,7 +38,9 @@ class FeeInfo(BaseModel): relay_id: Optional[StrictStr] = Field(default=None, description="The vault account ID of the relay", alias="relayId") relay_name: Optional[StrictStr] = Field(default=None, description="The name of the tenant, only for THIRD_PARTY relays", alias="relayName") fee_usd: Optional[StrictStr] = Field(default=None, description="The USD value of the fee", alias="feeUSD") - __properties: ClassVar[List[str]] = ["networkFee", "serviceFee", "gasPrice", "L1networkFee", "L2networkFee", "paidByRelay", "relayType", "relayId", "relayName", "feeUSD"] + sender: Optional[RoleFeeInfo] = None + recipient: Optional[RoleFeeInfo] = None + __properties: ClassVar[List[str]] = ["networkFee", "serviceFee", "gasPrice", "L1networkFee", "L2networkFee", "paidByRelay", "relayType", "relayId", "relayName", "feeUSD", "sender", "recipient"] @field_validator('relay_type') def relay_type_validate_enum(cls, value): @@ -88,6 +91,12 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of sender + if self.sender: + _dict['sender'] = self.sender.to_dict() + # override the default output from pydantic by calling `to_dict()` of recipient + if self.recipient: + _dict['recipient'] = self.recipient.to_dict() return _dict @classmethod @@ -109,7 +118,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "relayType": obj.get("relayType"), "relayId": obj.get("relayId"), "relayName": obj.get("relayName"), - "feeUSD": obj.get("feeUSD") + "feeUSD": obj.get("feeUSD"), + "sender": RoleFeeInfo.from_dict(obj["sender"]) if obj.get("sender") is not None else None, + "recipient": RoleFeeInfo.from_dict(obj["recipient"]) if obj.get("recipient") is not None else None }) return _obj diff --git a/fireblocks/models/role_fee_info.py b/fireblocks/models/role_fee_info.py new file mode 100644 index 00000000..03eb1076 --- /dev/null +++ b/fireblocks/models/role_fee_info.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class RoleFeeInfo(BaseModel): + """ + **Early Access.** What the transfer cost the Fireblocks wallet of one role (`sender` or `recipient`). Currently reported for TON only. Unlike `networkFee`, which describes the transfer as a whole, these amounts are always the cost to the wallet of that role, so the two can differ, for example for a `recipient`. + """ # noqa: E501 + fees_deducted: Optional[StrictStr] = Field(default=None, description="The total amount of TON deducted from the wallet because of the transfer, in TON, as a decimal string with nine decimals (like `networkFee`). - `sender` of a native TON transfer: the wallet's own fees plus the forwarding fees of the messages it sent. - `sender` of a Jetton (token) transfer: what the wallet actually lost. This is its own fees plus the TON it attached to cover the token wallets, minus any excess returned to it. If the excess is returned to the sender, the fee of receiving it is included. If the excess goes to any other wallet, the full attached TON is counted. When one external message carries several Jetton transfers (a multi-send), the loss is that of the whole message: every excess that came back to the wallet is subtracted. - `recipient` of a native TON transfer: the fees of the transaction that received the transfer, including gas. - `recipient` of a Jetton transfer: the fees of the notification transaction, usually a few nanoTON of storage fees. `\"0.000000000\"` when the transfer carried no forward amount, because the wallet then has no transaction of its own and pays nothing.", alias="feesDeducted") + value_credited: Optional[StrictStr] = Field(default=None, description="The gross amount of TON that arrived at the wallet together with the token notification (the forward amount), in TON, as a decimal string with nine decimals. Set only for the `recipient` of a Jetton (token) transfer, and omitted when the amount is zero or the notification bounced. `valueCredited` is not subtracted from `feesDeducted`. The net change of the wallet's TON balance caused by the transfer is `valueCredited` minus `feesDeducted`.", alias="valueCredited") + __properties: ClassVar[List[str]] = ["feesDeducted", "valueCredited"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of RoleFeeInfo from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of RoleFeeInfo from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "feesDeducted": obj.get("feesDeducted"), + "valueCredited": obj.get("valueCredited") + }) + return _obj + + diff --git a/fireblocks/models/trade_class.py b/fireblocks/models/trade_class.py new file mode 100644 index 00000000..3f5eb7c6 --- /dev/null +++ b/fireblocks/models/trade_class.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class TradeClass(str, Enum): + """ + The class of trade a pair represents, derived from the asset class of each leg, the chains those assets settle on, where the trade executes, and the trading side: * **SWAP_DEFI** - Exchange between two crypto assets on the same chain, executed on-chain * **SWAP_CEFI** - Exchange between two crypto assets on the same chain, executed through a provider account * **BRIDGE_DEFI** - Exchange between two crypto assets on different chains, executed on-chain * **BRIDGE_CEFI** - Exchange between two crypto assets on different chains, executed through a provider account * **INTERNAL_LEDGER** - Exchange between two crypto assets settled on a provider's internal ledger, within a single provider account. Not split by chain, because neither leg settles on-chain while the trade executes * **ON_RAMP** - Buying a crypto asset with a fiat asset * **OFF_RAMP** - Selling a crypto asset for a fiat asset * **FX** - Exchange between two fiat assets * **OTC** - A pair quoted by an OTC desk: firm, short-lived RFQ commitments against a dealer, executed on credit rather than against an order book. Takes precedence over the asset-class values, so an OTC desk selling USDC for USD is `OTC`, not `OFF_RAMP` * **UNKNOWN** - The class could not be resolved, e.g. when the chain of an asset could not be determined. Callers should not route on a pair with this class + """ + + """ + allowed enum values + """ + SWAP_DEFI = 'SWAP_DEFI' + SWAP_CEFI = 'SWAP_CEFI' + BRIDGE_DEFI = 'BRIDGE_DEFI' + BRIDGE_CEFI = 'BRIDGE_CEFI' + INTERNAL_LEDGER = 'INTERNAL_LEDGER' + ON_RAMP = 'ON_RAMP' + OFF_RAMP = 'OFF_RAMP' + FX = 'FX' + OTC = 'OTC' + UNKNOWN = 'UNKNOWN' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of TradeClass from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/trading_pair.py b/fireblocks/models/trading_pair.py new file mode 100644 index 00000000..e9dbeec1 --- /dev/null +++ b/fireblocks/models/trading_pair.py @@ -0,0 +1,136 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from fireblocks.models.trade_class import TradeClass +from fireblocks.models.trading_pair_side import TradingPairSide +from fireblocks.models.transfer_rail import TransferRail +from typing import Optional, Set +from typing_extensions import Self + +class TradingPair(BaseModel): + """ + A supported base/quote asset pair for a provider, optionally scoped to a specific connected account, for a given trading side (BUY/SELL, or `BOTH`), with the transfer rails and amount limits that apply to it. `baseAssetId` / `quoteAssetId` may be the wildcard `*`, meaning any asset on `baseChain` / `quoteChain`; such a row is not expanded. + """ # noqa: E501 + provider_id: Annotated[str, Field(min_length=1, strict=True)] = Field(description="The provider that supports this pair.", alias="providerId") + account_id: Optional[StrictStr] = Field(default=None, description="The connected account the pair is scoped to. Absent for direct-access providers, and for provider-level pairs that describe what a provider supports before any account is connected. Its absence therefore does not imply the provider is direct-access.", alias="accountId") + base_asset_id: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Fireblocks asset ID of the base asset, or `*` for any asset on `baseChain`. A `*` value always comes with `baseChain` set.", alias="baseAssetId") + quote_asset_id: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Fireblocks asset ID of the quote asset, or `*` for any asset on `quoteChain`. A `*` value always comes with `quoteChain` set.", alias="quoteAssetId") + base_chain: Optional[Annotated[str, Field(min_length=1, strict=True)]] = Field(default=None, description="Blockchain `legacyId` of the base asset (e.g. `ETH`, `BASECHAIN_ETH`, `ETH-AETH`, `SOL`). Set for leaf crypto assets; absent for fiat and virtual assets.", alias="baseChain") + quote_chain: Optional[Annotated[str, Field(min_length=1, strict=True)]] = Field(default=None, description="Blockchain `legacyId` of the quote asset (e.g. `ETH`, `BASECHAIN_ETH`, `ETH-AETH`, `SOL`). Set for leaf crypto assets; absent for fiat and virtual assets.", alias="quoteChain") + side: TradingPairSide + trade_class: TradeClass = Field(alias="tradeClass") + base_asset_rail: Optional[TransferRail] = Field(default=None, alias="baseAssetRail") + quote_asset_rail: Optional[TransferRail] = Field(default=None, alias="quoteAssetRail") + prefunded: Optional[StrictBool] = Field(default=None, description="Whether the provider requires the funds to be prefunded on the provider account before the order can execute.") + min: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="Minimum amount of the base asset for this pair/side, as a decimal string.") + max: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="Maximum amount of the base asset for this pair/side, as a decimal string.") + __properties: ClassVar[List[str]] = ["providerId", "accountId", "baseAssetId", "quoteAssetId", "baseChain", "quoteChain", "side", "tradeClass", "baseAssetRail", "quoteAssetRail", "prefunded", "min", "max"] + + @field_validator('min') + def min_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^\d+(\.\d+)?$", value): + raise ValueError(r"must validate the regular expression /^\d+(\.\d+)?$/") + return value + + @field_validator('max') + def max_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^\d+(\.\d+)?$", value): + raise ValueError(r"must validate the regular expression /^\d+(\.\d+)?$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of TradingPair from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of TradingPair from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "providerId": obj.get("providerId"), + "accountId": obj.get("accountId"), + "baseAssetId": obj.get("baseAssetId"), + "quoteAssetId": obj.get("quoteAssetId"), + "baseChain": obj.get("baseChain"), + "quoteChain": obj.get("quoteChain"), + "side": obj.get("side"), + "tradeClass": obj.get("tradeClass"), + "baseAssetRail": obj.get("baseAssetRail"), + "quoteAssetRail": obj.get("quoteAssetRail"), + "prefunded": obj.get("prefunded"), + "min": obj.get("min"), + "max": obj.get("max") + }) + return _obj + + diff --git a/fireblocks/models/trading_pair_side.py b/fireblocks/models/trading_pair_side.py new file mode 100644 index 00000000..5c51fa3a --- /dev/null +++ b/fireblocks/models/trading_pair_side.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class TradingPairSide(str, Enum): + """ + Side of a trading pair. Same as `Side`, plus `BOTH`, meaning the pair applies to both BUY and SELL. + """ + + """ + allowed enum values + """ + BUY = 'BUY' + SELL = 'SELL' + BOTH = 'BOTH' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of TradingPairSide from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/fireblocks/models/trading_pairs_list_page.py b/fireblocks/models/trading_pairs_list_page.py new file mode 100644 index 00000000..23fe8a84 --- /dev/null +++ b/fireblocks/models/trading_pairs_list_page.py @@ -0,0 +1,105 @@ +# coding: utf-8 + +""" + Fireblocks API + + Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + + The version of the OpenAPI document: 1.6.2 + Contact: developers@fireblocks.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from fireblocks.models.trading_pair import TradingPair +from typing import Optional, Set +from typing_extensions import Self + +class TradingPairsListPage(BaseModel): + """ + TradingPairsListPage + """ # noqa: E501 + data: List[TradingPair] = Field(description="List of trading pairs.") + total: Optional[StrictInt] = Field(default=None, description="Total number of trading pairs matching the query. Best-effort count; may be absent when results are aggregated across multiple providers.") + next: Optional[StrictStr] = Field(default=None, description="A cursor for the next page of results, if available.") + __properties: ClassVar[List[str]] = ["data", "total", "next"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of TradingPairsListPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item_data in self.data: + if _item_data: + _items.append(_item_data.to_dict()) + _dict['data'] = _items + # set to None if next (nullable) is None + # and model_fields_set contains the field + if self.next is None and "next" in self.model_fields_set: + _dict['next'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of TradingPairsListPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "data": [TradingPair.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, + "total": obj.get("total"), + "next": obj.get("next") + }) + return _obj + + diff --git a/fireblocks/models/transaction_response.py b/fireblocks/models/transaction_response.py index a3a0474f..7c75a9cd 100644 --- a/fireblocks/models/transaction_response.py +++ b/fireblocks/models/transaction_response.py @@ -110,7 +110,7 @@ class TransactionResponse(BaseModel): error_description: Optional[StrictStr] = Field(default=None, description="The transaction's revert reason. This field will be returned when `subStatus` = 'SMART_CONTRACT_EXECUTION_FAILED'.", alias="errorDescription") replaced_tx_hash: Optional[StrictStr] = Field(default=None, description="if the transaction is a replace by fee (RBF) transaction, this is the hash of the transsaction that was replaced", alias="replacedTxHash") nonce: Optional[StrictStr] = Field(default=None, description="blockchain nonce for the transaction") - blockchain_info: Optional[Dict[str, Any]] = Field(default=None, description="A JSON used to store additional data that is blockchain-specific.", alias="blockchainInfo") + blockchain_info: Optional[Dict[str, Any]] = Field(default=None, description="A JSON used to store additional data that is blockchain-specific. **TON (Early Access).** For TON transfers the object contains: | Field | Description | | --- | --- | | `tonTransferType` | `NATIVE` for a TON transfer, `JETTON` for a token transfer. | | `hashes` | Hex hashes of the transfer: `externalIncoming`, and either `tonTransfer` (native) or `jettonTransfer` (Jetton). | | `messageContent` | The message body (comment) of the transfer, as a base64 string. | | `isFeeExcess` | `true` only on the transaction that records the excess TON returned by a Jetton transfer to one of your wallets other than the sender. That transaction is a plain native transfer to the wallet, its top-level `feeInfo` has only a `recipient` struct, like any regular recipient. Omitted otherwise. | | `feeBreakdowns` | The fee details of the wallets of your workspace in the transfer: one entry per wallet. Available when the feature is enabled for your workspace. The totals of each wallet are in the top-level `feeInfo` of the transaction, in its `sender` and `recipient` structs (`feesDeducted`, `valueCredited`). | All amounts inside `feeBreakdowns` are integer strings in **nanoTON** (1 TON = 1,000,000,000 nanoTON), unlike the top-level `feeInfo`, which is in TON. Each entry of `feeBreakdowns` contains: | Field | Description | | --- | --- | | `role` | `SENDER` or `RECIPIENT`: the role of the wallet in the transfer. | | `address` | The wallet, as `raw` and `userFriendly` addresses. | | `txHash` | The hash of the wallet's own on-chain transaction. Omitted for a Jetton `recipient` with no transaction of its own (see below). | | `feeBreakdown.totalOutMsgsForwardFees` | The sum of the forwarding fees of the messages sent by the wallet's transaction. | | `feeBreakdown.chainReported` | The fee components reported by the blockchain for the wallet's transaction: `totalFees`, `storageFees`, `gasFees`, `actionFees` and `forwardFees`, and, when applicable, `importFee`, `bounceFees` and `actionFine`. `totalFees` is the sum of `storageFees`, `importFee`, `gasFees`, `actionFees` and `bounceFees`. | | `feeBreakdown.fundingSpent` | The rest of the sender's loss beyond the fees in this entry: for a Jetton `sender`, the TON the wallet attached to fund the token wallets and did not get back; for a wallet that sends through a second transaction of its own (a Highload wallet), also the fees of that transaction. For the same wallet, `feeInfo..feesDeducted` = `totalFees` + `totalOutMsgsForwardFees` + `fundingSpent` (`fundingSpent` is 0 when absent), converted from nanoTON to TON. | A Jetton transfer sent without a forward amount sends the recipient no notification, so the recipient wallet has no transaction and pays nothing: its entry has no `txHash`, all its figures are `\"0\"` and `feeInfo.recipient.feesDeducted` is `\"0.000000000\"`. An amount that could not be established from on-chain data is reported as no entry and no struct in `feeInfo` for that role. Only the wallets that belong to the notified workspace appear in `feeBreakdowns`. A transfer between two wallets of your own workspace is a single transaction and carries an entry for each wallet (tell them apart by `role`), and the top-level `feeInfo` has both a `sender` and a `recipient` struct. `blockchainInfo` is kept to 2,048 characters. When a very long message pushes a TON transfer over that, the optional details are dropped to make it fit: `feeBreakdowns` go first when the message fits without them, `messageContent` goes when the breakdowns fit without it, and both go when neither does. The `hashes`, `tonTransferType`, `isFeeExcess` and the top-level `feeInfo` are always kept. Example of a Jetton transfer sent from one of your wallets (addresses and hashes are placeholders): ```json { \"tonTransferType\": \"JETTON\", \"hashes\": { \"externalIncoming\": \"0000000000000000000000000000000000000000000000000000000000000001\", \"jettonTransfer\": \"0000000000000000000000000000000000000000000000000000000000000002\" }, \"messageContent\": \"te6cckEBAQEAAgAAAEysuc0=\", \"feeBreakdowns\": [ { \"address\": { \"raw\": \"0:0000000000000000000000000000000000000000000000000000000000000003\", \"userFriendly\": \"0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" }, \"txHash\": \"0000000000000000000000000000000000000000000000000000000000000004\", \"feeBreakdown\": { \"totalOutMsgsForwardFees\": \"86046\", \"chainReported\": { \"totalFees\": \"475291\", \"storageFees\": \"1\", \"gasFees\": \"220534\", \"actionFees\": \"43022\", \"forwardFees\": \"129068\", \"importFee\": \"211734\" }, \"fundingSpent\": \"17125078\" } } ] } ```", alias="blockchainInfo") __properties: ClassVar[List[str]] = ["id", "externalTxId", "status", "subStatus", "txHash", "operation", "note", "assetId", "assetType", "source", "sourceAddress", "tag", "destination", "destinations", "destinationAddress", "destinationAddressDescription", "destinationTag", "contractCallDecodedData", "programCallDecodedData", "amountInfo", "treatAsGrossAmount", "feeInfo", "feeCurrency", "requestedFeeCurrency", "cantonDetails", "networkRecords", "createdAt", "lastUpdated", "expiresAt", "createdBy", "signedBy", "rejectedBy", "authorizationInfo", "exchangeTxId", "customerRefId", "travelRuleMessageId", "amlScreeningResult", "complianceResults", "notBroadcastByFireblocks", "dappUrl", "gasLimit", "blockchainIndex", "paidRent", "extraParameters", "signedMessages", "numOfConfirmations", "blockInfo", "index", "rewardInfo", "feePayerInfo", "gaslessInfo", "systemMessages", "addressType", "requestedAmount", "amount", "netAmount", "amountUSD", "serviceFee", "fee", "networkFee", "errorDescription", "replacedTxHash", "nonce", "blockchainInfo"] @field_validator('address_type') diff --git a/fireblocks/models/utxo_input_selection.py b/fireblocks/models/utxo_input_selection.py index 4be398c7..5c552429 100644 --- a/fireblocks/models/utxo_input_selection.py +++ b/fireblocks/models/utxo_input_selection.py @@ -26,7 +26,7 @@ class UtxoInputSelection(BaseModel): """ - Explicitly control which UTXOs to include or exclude. This feature is currently in beta and might be subject to changes. + Explicitly control which UTXOs to include or exclude. """ # noqa: E501 inputs_to_spend: Optional[List[UtxoInput]] = Field(default=None, description="Force-include specific UTXOs by txHash and index.", alias="inputsToSpend") inputs_to_exclude: Optional[List[UtxoInput]] = Field(default=None, description="Exclude specific UTXOs from selection.", alias="inputsToExclude") diff --git a/fireblocks/models/utxo_selection_filters.py b/fireblocks/models/utxo_selection_filters.py index 713c1cf2..9acfecbc 100644 --- a/fireblocks/models/utxo_selection_filters.py +++ b/fireblocks/models/utxo_selection_filters.py @@ -25,7 +25,7 @@ class UtxoSelectionFilters(BaseModel): """ - Narrow the UTXO candidate pool. All specified filters are AND-ed together. This feature is currently in beta and might be subject to changes. + Narrow the UTXO candidate pool. All specified filters are AND-ed together. """ # noqa: E501 include_all_labels: Optional[List[StrictStr]] = Field(default=None, description="Only include UTXOs that have ALL of these labels.", alias="includeAllLabels") include_any_labels: Optional[List[StrictStr]] = Field(default=None, description="Only include UTXOs that have at least one of these labels.", alias="includeAnyLabels") diff --git a/fireblocks/models/utxo_selection_params.py b/fireblocks/models/utxo_selection_params.py index 285e29e7..e67f2f40 100644 --- a/fireblocks/models/utxo_selection_params.py +++ b/fireblocks/models/utxo_selection_params.py @@ -27,7 +27,7 @@ class UtxoSelectionParams(BaseModel): """ - For UTXO-based blockchains only. Controls which UTXOs are used for automatic selection. Cannot be used together with extraParameters.inputsSelection. This feature is currently in beta and might be subject to changes. + For UTXO-based blockchains only. Controls which UTXOs are used for automatic selection. Cannot be used together with extraParameters.inputsSelection. """ # noqa: E501 selection_strategy: Optional[StrictStr] = Field(default=None, description="Optional override for the UTXO selection strategy configured at the vault/tenant level. ", alias="selectionStrategy") filters: Optional[UtxoSelectionFilters] = None diff --git a/pyproject.toml b/pyproject.toml index 1a8181c9..08a27f53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fireblocks" -version = "36.0.0" +version = "0.0.0" description = "Fireblocks API" authors = ["Fireblocks "] license = "MIT License" diff --git a/setup.py b/setup.py index 52e05128..8e55f57b 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools NAME = "fireblocks" -VERSION = "36.0.0" +VERSION = "0.0.0" PYTHON_REQUIRES = ">= 3.8" REQUIRES = [ "urllib3 >= 2.1.0, < 3.0.0", diff --git a/test/fireblocks/test_client.py b/test/fireblocks/test_client.py index 6efd2f58..c104e883 100644 --- a/test/fireblocks/test_client.py +++ b/test/fireblocks/test_client.py @@ -64,7 +64,7 @@ from fireblocks.api.trading_api import TradingApi from fireblocks.api.transactions_api import TransactionsApi from fireblocks.api.travel_rule_api import TravelRuleApi -from fireblocks.api.utxo_management_beta_api import UTXOManagementBetaApi +from fireblocks.api.utxo_management_api import UTXOManagementApi from fireblocks.api.user_groups_beta_api import UserGroupsBetaApi from fireblocks.api.users_api import UsersApi from fireblocks.api.vaults_api import VaultsApi @@ -232,8 +232,8 @@ def test_get_transactions(fireblocks_instance): def test_get_travel_rule(fireblocks_instance): assert isinstance(fireblocks_instance.travel_rule, TravelRuleApi) -def test_get_utxo_management_beta(fireblocks_instance): - assert isinstance(fireblocks_instance.utxo_management_beta, UTXOManagementBetaApi) +def test_get_utxo_management(fireblocks_instance): + assert isinstance(fireblocks_instance.utxo_management, UTXOManagementApi) def test_get_user_groups_beta(fireblocks_instance): assert isinstance(fireblocks_instance.user_groups_beta, UserGroupsBetaApi) diff --git a/test/test_add_connected_account_request.py b/test/test_add_connected_account_request.py index 2b71f745..cb01dd57 100644 --- a/test/test_add_connected_account_request.py +++ b/test/test_add_connected_account_request.py @@ -38,7 +38,7 @@ def make_instance(self, include_optional) -> AddConnectedAccountRequest: return AddConnectedAccountRequest( provider_id = 'BINANCE', display_name = 'My Binance Account', - creds = '[B@3006c89c', + creds = '[B@4a775b74', api_key = 'api_key_abc123', main_account_id = 'acc-parent-001', account_id = 'provider-acc-001', @@ -47,7 +47,7 @@ def make_instance(self, include_optional) -> AddConnectedAccountRequest: else: return AddConnectedAccountRequest( provider_id = 'BINANCE', - creds = '[B@3006c89c', + creds = '[B@4a775b74', api_key = 'api_key_abc123', ) """ diff --git a/test/test_address_registry_create_proof_of_ownership_response.py b/test/test_address_registry_create_proof_of_ownership_response.py index ea8decec..d0b01834 100644 --- a/test/test_address_registry_create_proof_of_ownership_response.py +++ b/test/test_address_registry_create_proof_of_ownership_response.py @@ -40,14 +40,14 @@ def make_instance( model = AddressRegistryCreateProofOfOwnershipResponse() if include_optional: return AddressRegistryCreateProofOfOwnershipResponse( - pdf = '[B@6163c562', + pdf = '[B@76bdf8da', export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', expires_at = '2027-08-17' ) else: return AddressRegistryCreateProofOfOwnershipResponse( - pdf = '[B@6163c562', + pdf = '[B@76bdf8da', export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', expires_at = '2027-08-17', diff --git a/test/test_audit_log_entry.py b/test/test_audit_log_entry.py index d38f10ec..1f3b5f36 100644 --- a/test/test_audit_log_entry.py +++ b/test/test_audit_log_entry.py @@ -38,13 +38,13 @@ def make_instance(self, include_optional) -> AuditLogEntry: return AuditLogEntry( timestamp = '1700000000', event_type = 'STATUS_TRANSITION', - data = '[B@44beb6a9' + data = '[B@78e0c5c2' ) else: return AuditLogEntry( timestamp = '1700000000', event_type = 'STATUS_TRANSITION', - data = '[B@44beb6a9', + data = '[B@78e0c5c2', ) """ diff --git a/test/test_extra_parameters.py b/test/test_extra_parameters.py index 5b2d6fa7..fe2ec160 100644 --- a/test/test_extra_parameters.py +++ b/test/test_extra_parameters.py @@ -41,7 +41,7 @@ def make_instance(self, include_optional) -> ExtraParameters: contract_call_data = '', program_call_data = '', soroban_call_data = fireblocks.models.soroban_call_data.SorobanCallData( - envelope_xdr = '[B@3d431770', ), + envelope_xdr = '[B@3e9618af', ), inputs_selection = { }, allow_base_asset_address = True, pii_data = { } diff --git a/test/test_fee_info.py b/test/test_fee_info.py index b68c5906..f5e35c0f 100644 --- a/test/test_fee_info.py +++ b/test/test_fee_info.py @@ -45,7 +45,13 @@ def make_instance(self, include_optional) -> FeeInfo: relay_type = 'LOCAL', relay_id = '1', relay_name = 'Tenant Name', - fee_usd = '0.0013' + fee_usd = '0.0013', + sender = fireblocks.models.role_fee_info.RoleFeeInfo( + fees_deducted = '0.017686415', + value_credited = '0.000000001', ), + recipient = fireblocks.models.role_fee_info.RoleFeeInfo( + fees_deducted = '0.017686415', + value_credited = '0.000000001', ) ) else: return FeeInfo( diff --git a/test/test_role_fee_info.py b/test/test_role_fee_info.py new file mode 100644 index 00000000..987c80a3 --- /dev/null +++ b/test/test_role_fee_info.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.role_fee_info import RoleFeeInfo + + +class TestRoleFeeInfo(unittest.TestCase): + """RoleFeeInfo unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> RoleFeeInfo: + """Test RoleFeeInfo + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `RoleFeeInfo` + """ + model = RoleFeeInfo() + if include_optional: + return RoleFeeInfo( + fees_deducted = '0.017686415', + value_credited = '0.000000001' + ) + else: + return RoleFeeInfo( + ) + """ + + def testRoleFeeInfo(self): + """Test RoleFeeInfo""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_soroban_call_data.py b/test/test_soroban_call_data.py index f6c8c923..0c0fbcbb 100644 --- a/test/test_soroban_call_data.py +++ b/test/test_soroban_call_data.py @@ -36,11 +36,11 @@ def make_instance(self, include_optional) -> SorobanCallData: model = SorobanCallData() if include_optional: return SorobanCallData( - envelope_xdr = '[B@3d431770' + envelope_xdr = '[B@3e9618af' ) else: return SorobanCallData( - envelope_xdr = '[B@3d431770', + envelope_xdr = '[B@3e9618af', ) """ diff --git a/test/test_trade_class.py b/test/test_trade_class.py new file mode 100644 index 00000000..fa3876ee --- /dev/null +++ b/test/test_trade_class.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.trade_class import TradeClass + + +class TestTradeClass(unittest.TestCase): + """TradeClass unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTradeClass(self): + """Test TradeClass""" + # inst = TradeClass() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_trading_api.py b/test/test_trading_api.py index c552c944..1ee0ab77 100644 --- a/test/test_trading_api.py +++ b/test/test_trading_api.py @@ -75,6 +75,13 @@ def test_get_orders(self) -> None: """ pass + def test_get_trading_pairs(self) -> None: + """Test case for get_trading_pairs + + Get trading pairs + """ + pass + def test_get_trading_provider_by_id(self) -> None: """Test case for get_trading_provider_by_id diff --git a/test/test_trading_pair.py b/test/test_trading_pair.py new file mode 100644 index 00000000..4c77c64a --- /dev/null +++ b/test/test_trading_pair.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.trading_pair import TradingPair + + +class TestTradingPair(unittest.TestCase): + """TradingPair unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TradingPair: + """Test TradingPair + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `TradingPair` + """ + model = TradingPair() + if include_optional: + return TradingPair( + provider_id = 'ACME', + account_id = '7f1a2b3c-9d4e-4a5b-8c6d-1e2f3a4b5c6d', + base_asset_id = 'ETH', + quote_asset_id = 'USDC', + base_chain = 'ETH', + quote_chain = 'ETH', + side = 'BUY', + trade_class = 'SWAP_DEFI', + base_asset_rail = 'BLOCKCHAIN', + quote_asset_rail = 'BLOCKCHAIN', + prefunded = False, + min = '0.01', + max = '100' + ) + else: + return TradingPair( + provider_id = 'ACME', + base_asset_id = 'ETH', + quote_asset_id = 'USDC', + side = 'BUY', + trade_class = 'SWAP_DEFI', + ) + """ + + def testTradingPair(self): + """Test TradingPair""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_trading_pair_side.py b/test/test_trading_pair_side.py new file mode 100644 index 00000000..ef19b8c0 --- /dev/null +++ b/test/test_trading_pair_side.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.trading_pair_side import TradingPairSide + + +class TestTradingPairSide(unittest.TestCase): + """TradingPairSide unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTradingPairSide(self): + """Test TradingPairSide""" + # inst = TradingPairSide() + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_trading_pairs_list_page.py b/test/test_trading_pairs_list_page.py new file mode 100644 index 00000000..2141e9e8 --- /dev/null +++ b/test/test_trading_pairs_list_page.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" +Fireblocks API + +Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) + +The version of the OpenAPI document: 1.6.2 +Contact: developers@fireblocks.com +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from fireblocks.models.trading_pairs_list_page import TradingPairsListPage + + +class TestTradingPairsListPage(unittest.TestCase): + """TradingPairsListPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TradingPairsListPage: + """Test TradingPairsListPage + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" + # uncomment below to create an instance of `TradingPairsListPage` + """ + model = TradingPairsListPage() + if include_optional: + return TradingPairsListPage( + data = [{"providerId":"ACME","accountId":"7f1a2b3c-9d4e-4a5b-8c6d-1e2f3a4b5c6d","baseAssetId":"EUR","quoteAssetId":"BTC","quoteChain":"BTC","side":"SELL","tradeClass":"ON_RAMP","baseAssetRail":"SEPA","quoteAssetRail":"BLOCKCHAIN","prefunded":false,"min":"10","max":"100000"},{"providerId":"ACME","baseAssetId":"*","quoteAssetId":"*","baseChain":"ETH","quoteChain":"ETH","side":"BOTH","tradeClass":"SWAP_DEFI","baseAssetRail":"BLOCKCHAIN","quoteAssetRail":"BLOCKCHAIN"}], + total = 2, + next = 'cursor_abc123def456' + ) + else: + return TradingPairsListPage( + data = [{"providerId":"ACME","accountId":"7f1a2b3c-9d4e-4a5b-8c6d-1e2f3a4b5c6d","baseAssetId":"EUR","quoteAssetId":"BTC","quoteChain":"BTC","side":"SELL","tradeClass":"ON_RAMP","baseAssetRail":"SEPA","quoteAssetRail":"BLOCKCHAIN","prefunded":false,"min":"10","max":"100000"},{"providerId":"ACME","baseAssetId":"*","quoteAssetId":"*","baseChain":"ETH","quoteChain":"ETH","side":"BOTH","tradeClass":"SWAP_DEFI","baseAssetRail":"BLOCKCHAIN","quoteAssetRail":"BLOCKCHAIN"}], + ) + """ + + def testTradingPairsListPage(self): + """Test TradingPairsListPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_transaction_response.py b/test/test_transaction_response.py index 63af0dfd..734dceed 100644 --- a/test/test_transaction_response.py +++ b/test/test_transaction_response.py @@ -142,7 +142,13 @@ def make_instance(self, include_optional) -> TransactionResponse: relay_type = 'LOCAL', relay_id = '1', relay_name = 'Tenant Name', - fee_usd = '0.0013', ), + fee_usd = '0.0013', + sender = fireblocks.models.role_fee_info.RoleFeeInfo( + fees_deducted = '0.017686415', + value_credited = '0.000000001', ), + recipient = fireblocks.models.role_fee_info.RoleFeeInfo( + fees_deducted = '0.017686415', + value_credited = '0.000000001', ), ), fee_currency = '', requested_fee_currency = 'PATH_USD', canton_details = {"offerResponse":{"version":1,"domain":"ALLOCATION","responseType":"ALLOCATION_WITHDRAW","originalTransactionId":"9f2b7c14-8d55-4a02-b6e1-5c3f90a7d488","allocationTransactionId":"5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21"}}, diff --git a/test/test_update_connected_account_credentials_request.py b/test/test_update_connected_account_credentials_request.py index c007b13a..dc4c88b6 100644 --- a/test/test_update_connected_account_credentials_request.py +++ b/test/test_update_connected_account_credentials_request.py @@ -40,12 +40,12 @@ def make_instance( model = UpdateConnectedAccountCredentialsRequest() if include_optional: return UpdateConnectedAccountCredentialsRequest( - creds = '[B@261d7771', + creds = '[B@334fce5c', api_key = 'api_key_new_abc123' ) else: return UpdateConnectedAccountCredentialsRequest( - creds = '[B@261d7771', + creds = '[B@334fce5c', api_key = 'api_key_new_abc123', ) """ diff --git a/test/test_utxo_management_beta_api.py b/test/test_utxo_management_api.py similarity index 89% rename from test/test_utxo_management_beta_api.py rename to test/test_utxo_management_api.py index c59b2422..b076b036 100644 --- a/test/test_utxo_management_beta_api.py +++ b/test/test_utxo_management_api.py @@ -14,14 +14,14 @@ import unittest -from fireblocks.api.utxo_management_beta_api import UTXOManagementBetaApi +from fireblocks.api.utxo_management_api import UTXOManagementApi -class TestUTXOManagementBetaApi(unittest.TestCase): - """UTXOManagementBetaApi unit test stubs""" +class TestUTXOManagementApi(unittest.TestCase): + """UTXOManagementApi unit test stubs""" def setUp(self) -> None: - self.api = UTXOManagementBetaApi() + self.api = UTXOManagementApi() def tearDown(self) -> None: pass