From d32c929b2739ec4199efbe881985ad10bc80bc09 Mon Sep 17 00:00:00 2001 From: fireblocks_dx_team Date: Tue, 20 Oct 2026 08:21:52 +0000 Subject: [PATCH] Generated SDK #2966549409 --- .openapi-generator/FILES | 3 + CHANGELOG.md | 290 -------------- README.md | 2 + docs/ApiUserApi.md | 2 +- docs/CantonBetaApi.md | 174 +++++++++ docs/EndInvestorPayload.md | 2 +- docs/OfferResponse.md | 2 +- docs/OfferResponseAllocationAccept.md | 2 +- docs/OfferResponseAllocationReject.md | 2 +- docs/OfferResponseAllocationWithdraw.md | 2 +- docs/OfferResponseDtccOnboardingAccept.md | 2 +- docs/OfferResponseDtccOnboardingReject.md | 2 +- docs/OfferResponseTradewebAccept.md | 2 +- docs/OfferResponseTradewebReject.md | 4 +- docs/OfferResponseTransferAccept.md | 2 +- docs/OfferResponseTransferReject.md | 2 +- docs/OfferResponseTransferWithdraw.md | 4 +- docs/TrustProofOfAddressRequest.md | 1 + docs/TrustProofOfAddressResponse.md | 1 + docs/WebhooksV2Api.md | 2 + fireblocks/__init__.py | 3 +- fireblocks/api/__init__.py | 1 + fireblocks/api/api_user_api.py | 2 +- fireblocks/api/canton_beta_api.py | 359 ++++++++++++++++++ fireblocks/api/webhooks_v2_api.py | 2 +- fireblocks/client.py | 8 + fireblocks/configuration.py | 2 +- fireblocks/models/end_investor_payload.py | 2 +- .../offer_response_allocation_accept.py | 2 +- .../offer_response_allocation_reject.py | 2 +- .../offer_response_allocation_withdraw.py | 2 +- .../offer_response_dtcc_onboarding_accept.py | 2 +- .../offer_response_dtcc_onboarding_reject.py | 2 +- .../models/offer_response_tradeweb_accept.py | 2 +- .../models/offer_response_tradeweb_reject.py | 4 +- .../models/offer_response_transfer_accept.py | 2 +- .../models/offer_response_transfer_reject.py | 2 +- .../offer_response_transfer_withdraw.py | 4 +- .../models/trust_proof_of_address_request.py | 8 +- .../models/trust_proof_of_address_response.py | 8 +- pyproject.toml | 2 +- setup.py | 2 +- test/fireblocks/test_client.py | 4 + test/test_add_connected_account_request.py | 4 +- ...stry_create_proof_of_ownership_response.py | 4 +- test/test_allow_list_payload.py | 4 +- test/test_audit_log_entry.py | 4 +- test/test_canton_beta_api.py | 45 +++ test/test_canton_call.py | 4 +- test/test_canton_call_allow_list_add.py | 4 +- test/test_canton_call_allow_list_remove.py | 4 +- test/test_canton_call_end_investor_invite.py | 4 +- ..._canton_call_end_investor_invite_cancel.py | 4 +- .../test_canton_call_end_investor_offboard.py | 4 +- ...test_canton_call_participant_onboarding.py | 10 +- test/test_end_investor_payload.py | 4 +- test/test_participant_onboarding_payload.py | 10 +- test/test_trust_proof_of_address_request.py | 3 +- test/test_trust_proof_of_address_response.py | 3 +- ...e_connected_account_credentials_request.py | 4 +- 60 files changed, 683 insertions(+), 366 deletions(-) delete mode 100644 CHANGELOG.md create mode 100644 docs/CantonBetaApi.md create mode 100644 fireblocks/api/canton_beta_api.py create mode 100644 test/test_canton_beta_api.py diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 420a4682..aed6b8a2 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -191,6 +191,7 @@ docs/CallAccepted.md docs/CallbackHandler.md docs/CallbackHandlerRequest.md docs/CancelTransactionResponse.md +docs/CantonBetaApi.md docs/CantonCall.md docs/CantonCallAllowListAdd.md docs/CantonCallAllowListRemove.md @@ -1389,6 +1390,7 @@ fireblocks/api/approvals_beta_api.py fireblocks/api/audit_logs_api.py fireblocks/api/blockchain_link_beta_api.py fireblocks/api/blockchains_assets_api.py +fireblocks/api/canton_beta_api.py fireblocks/api/compliance_api.py fireblocks/api/compliance_orchestrator_beta_api.py fireblocks/api/compliance_screening_configuration_api.py @@ -2990,6 +2992,7 @@ test/test_call_accepted.py test/test_callback_handler.py test/test_callback_handler_request.py test/test_cancel_transaction_response.py +test/test_canton_beta_api.py test/test_canton_call.py test/test_canton_call_allow_list_add.py test/test_canton_call_allow_list_remove.py diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index bd1c4ee3..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). - -## [v35.0.0](https://github.com/fireblocks/py-sdk/compare/v24.0.0...v35.0.0) - 2026-10-13 - -### Merged - -- Generated SDK #2941386800 [`#164`](https://github.com/fireblocks/py-sdk/pull/164) - -## [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 7b1cb044..c8dd288c 100644 --- a/README.md +++ b/README.md @@ -307,6 +307,8 @@ Class | Method | HTTP request | Description *BlockchainsAssetsApi* | [**register_new_asset**](docs/BlockchainsAssetsApi.md#register_new_asset) | **POST** /assets | Register an asset *BlockchainsAssetsApi* | [**set_asset_price**](docs/BlockchainsAssetsApi.md#set_asset_price) | **POST** /assets/prices/{id} | Set asset price *BlockchainsAssetsApi* | [**update_asset_user_metadata**](docs/BlockchainsAssetsApi.md#update_asset_user_metadata) | **PATCH** /assets/{id} | Update the user’s metadata for an asset +*CantonBetaApi* | [**create_canton_call**](docs/CantonBetaApi.md#create_canton_call) | **POST** /operations/canton/calls | Make a Canton call +*CantonBetaApi* | [**respond_to_canton_offer**](docs/CantonBetaApi.md#respond_to_canton_offer) | **POST** /operations/canton/offers/{offerId}/responses | Answer an offer *ComplianceApi* | [**activate_ars_config**](docs/ComplianceApi.md#activate_ars_config) | **POST** /screening/ars/config/activate | Activate ARS (Address Registry Screening) *ComplianceApi* | [**activate_byork_config**](docs/ComplianceApi.md#activate_byork_config) | **POST** /screening/byork/config/activate | Activate BYORK Light *ComplianceApi* | [**add_address_registry_vault_opt_outs**](docs/ComplianceApi.md#add_address_registry_vault_opt_outs) | **POST** /address_registry/vaults | Add vault accounts to the address registry opt-out list diff --git a/docs/ApiUserApi.md b/docs/ApiUserApi.md index 899ab8f3..f582601e 100644 --- a/docs/ApiUserApi.md +++ b/docs/ApiUserApi.md @@ -171,7 +171,7 @@ Issue API user pairing token Issues a device pairing token for the given user and returns the user's info along with the token. - The API user must be in PENDING_ACTIVATION status. If the user is already set up (enabled), the request is rejected with a 409 Conflict. - Please note that this endpoint is available only for API keys with Owner/Admin/Non Signing Admin permissions. -Endpoint Permission: Owner, Admin, Non-Signing Admin. +- This is the same pairing token that the API Co-signer requests during installation and when you pair an additional API user with an existing Co-signer. You can use this endpoint instead of copying the token from Pair API user in the Console. The token is valid for one hour. ### Example diff --git a/docs/CantonBetaApi.md b/docs/CantonBetaApi.md new file mode 100644 index 00000000..6ae1e42b --- /dev/null +++ b/docs/CantonBetaApi.md @@ -0,0 +1,174 @@ +# fireblocks.CantonBetaApi + +All URIs are relative to *https://api.fireblocks.io/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_canton_call**](CantonBetaApi.md#create_canton_call) | **POST** /operations/canton/calls | Make a Canton call +[**respond_to_canton_offer**](CantonBetaApi.md#respond_to_canton_offer) | **POST** /operations/canton/offers/{offerId}/responses | Answer an offer + + +# **create_canton_call** +> CallAccepted create_canton_call(canton_call, idempotency_key=idempotency_key) + +Make a Canton call + +Submits a Canton call from a vault account's Canton wallet. `type` selects the call and the shape of `payload`. + +### Example + + +```python +from fireblocks.models.call_accepted import CallAccepted +from fireblocks.models.canton_call import CantonCall +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: + canton_call = fireblocks.CantonCall() # CantonCall | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Make a Canton call + api_response = fireblocks.canton_beta.create_canton_call(canton_call, idempotency_key=idempotency_key).result() + print("The response of CantonBetaApi->create_canton_call:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CantonBetaApi->create_canton_call: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **canton_call** | [**CantonCall**](CantonCall.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**CallAccepted**](CallAccepted.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | The outgoing transaction that carries the call. | * X-Request-ID -
| +**400** | Unknown or missing type, a missing required payload field, or an invalid party id, blockchainId, or expiry | * X-Request-ID -
| +**404** | No Canton wallet for this vault account and blockchainId, or an unknown end investor for this tenant | * X-Request-ID -
| +**409** | The target is not in a state this call can act on, or more than one candidate contract matched the wallet | * X-Request-ID -
| +**501** | This call type is not yet available: DTCC_END_INVESTOR_INVITE_CANCEL, DTCC_ALLOW_LIST_ADD, DTCC_ALLOW_LIST_REMOVE | * 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) + +# **respond_to_canton_offer** +> OfferResponseAccepted respond_to_canton_offer(offer_id, offer_response, idempotency_key=idempotency_key) + +Answer an offer + +Responds to an incoming Canton offer. Set `responseType` to one of the values in the offer transaction's `cantonDetails.offerResponse.availableResponses`. + +### Example + + +```python +from fireblocks.models.offer_response import OfferResponse +from fireblocks.models.offer_response_accepted import OfferResponseAccepted +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: + offer_id = '5a1d8b0f-2c31-4c7e-9d0a-118e7b6c4a21' # str | The Fireblocks transaction id of the incoming offer being answered. + offer_response = fireblocks.OfferResponse() # OfferResponse | + idempotency_key = 'idempotency_key_example' # str | A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. (optional) + + try: + # Answer an offer + api_response = fireblocks.canton_beta.respond_to_canton_offer(offer_id, offer_response, idempotency_key=idempotency_key).result() + print("The response of CantonBetaApi->respond_to_canton_offer:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CantonBetaApi->respond_to_canton_offer: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **offer_id** | **str**| The Fireblocks transaction id of the incoming offer being answered. | + **offer_response** | [**OfferResponse**](OfferResponse.md)| | + **idempotency_key** | **str**| A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. | [optional] + +### Return type + +[**OfferResponseAccepted**](OfferResponseAccepted.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | The outgoing transaction that carries the response. Its on-chain outcome arrives by webhook as a status update on this transaction. | * X-Request-ID -
| +**400** | Unknown or missing responseType, or a missing required payload field, or the response is not available to this workspace's side of the offer (a sender sending accept/reject, a receiver sending withdraw) | * X-Request-ID -
| +**404** | Unknown offer id for this tenant | * X-Request-ID -
| +**409** | The offer cannot take this response now. An accept or reject: the offer is already answered, expired, or a response is in flight. ALLOCATION_WITHDRAW — which is sent AFTER the accept, on the same offer: the allocation is not ALLOCATED, because the accept has not settled yet, or it was already withdrawn or settled by the venue. The message names the state. | * X-Request-ID -
| +**501** | This responseType is not yet available | * 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) + diff --git a/docs/EndInvestorPayload.md b/docs/EndInvestorPayload.md index 87ce28df..aefe25d2 100644 --- a/docs/EndInvestorPayload.md +++ b/docs/EndInvestorPayload.md @@ -1,6 +1,6 @@ # EndInvestorPayload -Shared by invite / invite-cancel / offboard — identical wire shape, different verb. +The end investor a call acts on. ## Properties diff --git a/docs/OfferResponse.md b/docs/OfferResponse.md index 4a10a017..e526e3da 100644 --- a/docs/OfferResponse.md +++ b/docs/OfferResponse.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | **payload** | [**DtccOnboardingRejectPayload**](DtccOnboardingRejectPayload.md) | | ## Example diff --git a/docs/OfferResponseAllocationAccept.md b/docs/OfferResponseAllocationAccept.md index 274cb685..03a3e19f 100644 --- a/docs/OfferResponseAllocationAccept.md +++ b/docs/OfferResponseAllocationAccept.md @@ -6,7 +6,7 @@ Accept a CIP-56 allocation request. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseAllocationReject.md b/docs/OfferResponseAllocationReject.md index c11cce52..a7af2632 100644 --- a/docs/OfferResponseAllocationReject.md +++ b/docs/OfferResponseAllocationReject.md @@ -6,7 +6,7 @@ Reject a CIP-56 allocation request. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseAllocationWithdraw.md b/docs/OfferResponseAllocationWithdraw.md index 053feaa4..b793e90b 100644 --- a/docs/OfferResponseAllocationWithdraw.md +++ b/docs/OfferResponseAllocationWithdraw.md @@ -6,7 +6,7 @@ Withdraw the allocation you made by accepting this offer, unlocking the holding. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseDtccOnboardingAccept.md b/docs/OfferResponseDtccOnboardingAccept.md index b1f0730d..b592ab5d 100644 --- a/docs/OfferResponseDtccOnboardingAccept.md +++ b/docs/OfferResponseDtccOnboardingAccept.md @@ -6,7 +6,7 @@ Accept a DTCC end-investor onboarding offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseDtccOnboardingReject.md b/docs/OfferResponseDtccOnboardingReject.md index 60c134c4..86cd0c93 100644 --- a/docs/OfferResponseDtccOnboardingReject.md +++ b/docs/OfferResponseDtccOnboardingReject.md @@ -6,7 +6,7 @@ Reject a DTCC end-investor onboarding offer. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | **payload** | [**DtccOnboardingRejectPayload**](DtccOnboardingRejectPayload.md) | | ## Example diff --git a/docs/OfferResponseTradewebAccept.md b/docs/OfferResponseTradewebAccept.md index 238b69d6..af924be7 100644 --- a/docs/OfferResponseTradewebAccept.md +++ b/docs/OfferResponseTradewebAccept.md @@ -6,7 +6,7 @@ Accept a Tradeweb co-signing delegation offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseTradewebReject.md b/docs/OfferResponseTradewebReject.md index e1b08538..782b0b5d 100644 --- a/docs/OfferResponseTradewebReject.md +++ b/docs/OfferResponseTradewebReject.md @@ -1,12 +1,12 @@ # OfferResponseTradewebReject -Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR has nowhere on-ledger to record a reason, so none is accepted. +Reject a Tradeweb co-signing delegation offer. Carries no arguments — Tradeweb does not record a reject reason on the ledger, so none is accepted. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseTransferAccept.md b/docs/OfferResponseTransferAccept.md index df734260..dda18570 100644 --- a/docs/OfferResponseTransferAccept.md +++ b/docs/OfferResponseTransferAccept.md @@ -6,7 +6,7 @@ Accept an inbound 2-step transfer offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseTransferReject.md b/docs/OfferResponseTransferReject.md index 97e34005..3cb81382 100644 --- a/docs/OfferResponseTransferReject.md +++ b/docs/OfferResponseTransferReject.md @@ -6,7 +6,7 @@ Reject an inbound 2-step transfer offer. Carries no arguments. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/OfferResponseTransferWithdraw.md b/docs/OfferResponseTransferWithdraw.md index 654ce2e5..e5dad8ac 100644 --- a/docs/OfferResponseTransferWithdraw.md +++ b/docs/OfferResponseTransferWithdraw.md @@ -1,12 +1,12 @@ # OfferResponseTransferWithdraw -Withdraw your own OUTGOING transfer offer. Carries no arguments — `offerId` in the path is the offer, so the vault account and blockchain are resolved from it rather than restated. Was `CantonCallType.TRANSFER_WITHDRAW` with a 3-field payload until FA-10624. +Withdraw your own outgoing transfer offer. Carries no arguments — `offerId` in the path identifies the offer, and the vault account and blockchain are resolved from it. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**response_type** | **str** | How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved. | +**response_type** | **str** | How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable. | ## Example diff --git a/docs/TrustProofOfAddressRequest.md b/docs/TrustProofOfAddressRequest.md index a9ef5947..dc94c627 100644 --- a/docs/TrustProofOfAddressRequest.md +++ b/docs/TrustProofOfAddressRequest.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **asset** | **str** | The asset identifier for which proof of address is being created. | **prefix** | **str** | The prefix to be used for signing messages. | **trust_uuid** | **str** | A unique identifier (UUID) obtained from TRUST (CreateAddressOwnership) | +**address** | **str** | Optional non-default (derived) address of the vault account to prove. Supported for UTXO assets only (`BTC`, `BTC_TEST`). The address must belong to the vault account for the given asset. Both SegWit and Legacy address forms are accepted. When omitted, the proof is created for the default (index 0) address of the vault account. | [optional] ## Example diff --git a/docs/TrustProofOfAddressResponse.md b/docs/TrustProofOfAddressResponse.md index 01dd7c67..b627829b 100644 --- a/docs/TrustProofOfAddressResponse.md +++ b/docs/TrustProofOfAddressResponse.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **transaction_id** | **str** | Transaction ID from Fireblocks (UUID format) | **status** | [**TypedMessageTransactionStatusEnum**](TypedMessageTransactionStatusEnum.md) | | **signature** | **str** | TRUST-compatible encoded signature for proof of address verification. | +**public_key** | **str** | Hex public key of the Fireblocks vault key that produced the signature. Present only when `status` is `SIGNED` or `COMPLETED`, and only if Fireblocks returned it. TRUST requires this key for SUI, TON and XTZ (as `auxProofData.encryptedPublicKey`). | [optional] ## Example diff --git a/docs/WebhooksV2Api.md b/docs/WebhooksV2Api.md index 3a4510af..1c4094df 100644 --- a/docs/WebhooksV2Api.md +++ b/docs/WebhooksV2Api.md @@ -609,6 +609,8 @@ The private key the CSR is built from is held by Fireblocks and is specific to t Pass `keyAlgorithm` to choose RSA or ECDSA. A workspace may hold one key of each: the CSR returned is always the one for the type requested, so a certificate signed against it matches the key used at delivery time. +**Endpoint Permissions:** Owner, Admin, Non-Signing Admin. + ### Example diff --git a/fireblocks/__init__.py b/fireblocks/__init__.py index 276cbf2d..d3c73da6 100644 --- a/fireblocks/__init__.py +++ b/fireblocks/__init__.py @@ -14,7 +14,7 @@ Do not edit the class manually. """ # noqa: E501 -__version__ = "35.0.0" +__version__ = "0.0.0" # import apis into sdk package from fireblocks.api.api_user_api import ApiUserApi @@ -22,6 +22,7 @@ from fireblocks.api.audit_logs_api import AuditLogsApi from fireblocks.api.blockchain_link_beta_api import BlockchainLinkBetaApi from fireblocks.api.blockchains_assets_api import BlockchainsAssetsApi +from fireblocks.api.canton_beta_api import CantonBetaApi from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ( ComplianceOrchestratorBetaApi, diff --git a/fireblocks/api/__init__.py b/fireblocks/api/__init__.py index 5bbb48a4..a32d5411 100644 --- a/fireblocks/api/__init__.py +++ b/fireblocks/api/__init__.py @@ -6,6 +6,7 @@ from fireblocks.api.audit_logs_api import AuditLogsApi from fireblocks.api.blockchain_link_beta_api import BlockchainLinkBetaApi from fireblocks.api.blockchains_assets_api import BlockchainsAssetsApi +from fireblocks.api.canton_beta_api import CantonBetaApi from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ComplianceOrchestratorBetaApi from fireblocks.api.compliance_screening_configuration_api import ComplianceScreeningConfigurationApi diff --git a/fireblocks/api/api_user_api.py b/fireblocks/api/api_user_api.py index 5216f7a3..7170848b 100644 --- a/fireblocks/api/api_user_api.py +++ b/fireblocks/api/api_user_api.py @@ -342,7 +342,7 @@ def issue_api_user_pairing_token( ) -> Future[ApiResponse[IssueApiUserPairingTokenResponse]]: """Issue API user pairing token - Issues a device pairing token for the given user and returns the user's info along with the token. - The API user must be in PENDING_ACTIVATION status. If the user is already set up (enabled), the request is rejected with a 409 Conflict. - Please note that this endpoint is available only for API keys with Owner/Admin/Non Signing Admin permissions. Endpoint Permission: Owner, Admin, Non-Signing Admin. + Issues a device pairing token for the given user and returns the user's info along with the token. - The API user must be in PENDING_ACTIVATION status. If the user is already set up (enabled), the request is rejected with a 409 Conflict. - Please note that this endpoint is available only for API keys with Owner/Admin/Non Signing Admin permissions. - This is the same pairing token that the API Co-signer requests during installation and when you pair an additional API user with an existing Co-signer. You can use this endpoint instead of copying the token from Pair API user in the Console. The token is valid for one hour. :param user_id: The ID of the api user (required) :type user_id: str diff --git a/fireblocks/api/canton_beta_api.py b/fireblocks/api/canton_beta_api.py new file mode 100644 index 00000000..a6cb8232 --- /dev/null +++ b/fireblocks/api/canton_beta_api.py @@ -0,0 +1,359 @@ +# 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 warnings +from concurrent.futures import Future +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictStr +from typing import Optional +from typing_extensions import Annotated +from fireblocks.models.call_accepted import CallAccepted +from fireblocks.models.canton_call import CantonCall +from fireblocks.models.offer_response import OfferResponse +from fireblocks.models.offer_response_accepted import OfferResponseAccepted + +from fireblocks.api_client import ApiClient, RequestSerialized +from fireblocks.api_response import ApiResponse +from fireblocks.rest import RESTResponseType +from fireblocks.validation_utils import validate_not_empty_string + + +class CantonBetaApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def create_canton_call( + self, + canton_call: CantonCall, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = 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[CallAccepted]]: + """Make a Canton call + + Submits a Canton call from a vault account's Canton wallet. `type` selects the call and the shape of `payload`. + + :param canton_call: (required) + :type canton_call: CantonCall + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: 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._create_canton_call_serialize( + canton_call=canton_call, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "CallAccepted", + '400': "ErrorSchema", + '404': "ErrorSchema", + '409': "ErrorSchema", + '501': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + _operation_id="create_canton_call", + ) + + def _create_canton_call_serialize( + self, + canton_call, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _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 + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if canton_call is not None: + _body_params = canton_call + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/operations/canton/calls', + 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 respond_to_canton_offer( + self, + offer_id: Annotated[StrictStr, Field(description="The Fireblocks transaction id of the incoming offer being answered.")], + offer_response: OfferResponse, + idempotency_key: Annotated[Optional[StrictStr], Field(description="A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours.")] = 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[OfferResponseAccepted]]: + """Answer an offer + + Responds to an incoming Canton offer. Set `responseType` to one of the values in the offer transaction's `cantonDetails.offerResponse.availableResponses`. + + :param offer_id: The Fireblocks transaction id of the incoming offer being answered. (required) + :type offer_id: str + :param offer_response: (required) + :type offer_response: OfferResponse + :param idempotency_key: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. + :type idempotency_key: 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 + + validate_not_empty_string(function_name="respond_to_canton_offer", param_name="offer_id", param_value=offer_id) + + _param = self._respond_to_canton_offer_serialize( + offer_id=offer_id, + offer_response=offer_response, + idempotency_key=idempotency_key, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "OfferResponseAccepted", + '400': "ErrorSchema", + '404': "ErrorSchema", + '409': "ErrorSchema", + '501': "ErrorSchema", + 'default': "ErrorSchema", + } + + return self.api_client.call_api( + *_param, + _request_timeout=_request_timeout, + _response_types_map=_response_types_map, + _operation_id="respond_to_canton_offer", + ) + + def _respond_to_canton_offer_serialize( + self, + offer_id, + offer_response, + idempotency_key, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _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 + if offer_id is not None: + _path_params['offerId'] = offer_id + # process the query parameters + # process the header parameters + if idempotency_key is not None: + _header_params['Idempotency-Key'] = idempotency_key + # process the form parameters + # process the body parameter + if offer_response is not None: + _body_params = offer_response + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/operations/canton/offers/{offerId}/responses', + 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 + ) + + diff --git a/fireblocks/api/webhooks_v2_api.py b/fireblocks/api/webhooks_v2_api.py index c6cbd97e..76245b3a 100644 --- a/fireblocks/api/webhooks_v2_api.py +++ b/fireblocks/api/webhooks_v2_api.py @@ -1080,7 +1080,7 @@ def get_mtls_csr( ) -> Future[ApiResponse[WebhookMtlsCsrResponse]]: """Get mTLS CSR - Returns the Certificate Signing Request (CSR) PEM that customers use to generate their signed client certificate. The private key the CSR is built from is held by Fireblocks and is specific to this workspace. It is created on the first request for a given key type, and the same CSR is returned on subsequent requests for that type. Pass `keyAlgorithm` to choose RSA or ECDSA. A workspace may hold one key of each: the CSR returned is always the one for the type requested, so a certificate signed against it matches the key used at delivery time. + Returns the Certificate Signing Request (CSR) PEM that customers use to generate their signed client certificate. The private key the CSR is built from is held by Fireblocks and is specific to this workspace. It is created on the first request for a given key type, and the same CSR is returned on subsequent requests for that type. Pass `keyAlgorithm` to choose RSA or ECDSA. A workspace may hold one key of each: the CSR returned is always the one for the type requested, so a certificate signed against it matches the key used at delivery time. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin. :param key_algorithm: Algorithm of the private key the CSR is generated for. ECDSA keys are smaller and quicker to issue, but the certificate authority signing the request has to accept an EC subject key, which some do not by default. :type key_algorithm: str diff --git a/fireblocks/client.py b/fireblocks/client.py index befe2475..cb7db72c 100644 --- a/fireblocks/client.py +++ b/fireblocks/client.py @@ -19,6 +19,7 @@ from fireblocks.api.audit_logs_api import AuditLogsApi from fireblocks.api.blockchain_link_beta_api import BlockchainLinkBetaApi from fireblocks.api.blockchains_assets_api import BlockchainsAssetsApi +from fireblocks.api.canton_beta_api import CantonBetaApi from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ( ComplianceOrchestratorBetaApi, @@ -91,6 +92,7 @@ def __init__(self, configuration: ClientConfiguration = None): self._audit_logs = None self._blockchain_link_beta = None self._blockchains_assets = None + self._canton_beta = None self._compliance = None self._compliance_orchestrator_beta = None self._compliance_screening_configuration = None @@ -183,6 +185,12 @@ def blockchains_assets(self) -> BlockchainsAssetsApi: self._blockchains_assets = BlockchainsAssetsApi(self._api_client) return self._blockchains_assets + @property + def canton_beta(self) -> CantonBetaApi: + if self._canton_beta is None: + self._canton_beta = CantonBetaApi(self._api_client) + return self._canton_beta + @property def compliance(self) -> ComplianceApi: if self._compliance is None: diff --git a/fireblocks/configuration.py b/fireblocks/configuration.py index 7d455962..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: 35.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/end_investor_payload.py b/fireblocks/models/end_investor_payload.py index f8326b2d..63fd70d7 100644 --- a/fireblocks/models/end_investor_payload.py +++ b/fireblocks/models/end_investor_payload.py @@ -25,7 +25,7 @@ class EndInvestorPayload(BaseModel): """ - Shared by invite / invite-cancel / offboard — identical wire shape, different verb. + The end investor a call acts on. """ # noqa: E501 end_investor: StrictStr = Field(description="The end investor's Canton party id.", alias="endInvestor") __properties: ClassVar[List[str]] = ["endInvestor"] diff --git a/fireblocks/models/offer_response_allocation_accept.py b/fireblocks/models/offer_response_allocation_accept.py index e504e457..f4a43e6f 100644 --- a/fireblocks/models/offer_response_allocation_accept.py +++ b/fireblocks/models/offer_response_allocation_accept.py @@ -27,7 +27,7 @@ class OfferResponseAllocationAccept(BaseModel): """ Accept a CIP-56 allocation request. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_allocation_reject.py b/fireblocks/models/offer_response_allocation_reject.py index d1d77a7e..67003ca1 100644 --- a/fireblocks/models/offer_response_allocation_reject.py +++ b/fireblocks/models/offer_response_allocation_reject.py @@ -27,7 +27,7 @@ class OfferResponseAllocationReject(BaseModel): """ Reject a CIP-56 allocation request. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_allocation_withdraw.py b/fireblocks/models/offer_response_allocation_withdraw.py index fe8869d0..12f5ec36 100644 --- a/fireblocks/models/offer_response_allocation_withdraw.py +++ b/fireblocks/models/offer_response_allocation_withdraw.py @@ -27,7 +27,7 @@ class OfferResponseAllocationWithdraw(BaseModel): """ Withdraw the allocation you made by accepting this offer, unlocking the holding. Carries no arguments — the allocation is resolved from the offer. Answers `409` until the accept has settled. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_dtcc_onboarding_accept.py b/fireblocks/models/offer_response_dtcc_onboarding_accept.py index 1a6f5da1..2ea84104 100644 --- a/fireblocks/models/offer_response_dtcc_onboarding_accept.py +++ b/fireblocks/models/offer_response_dtcc_onboarding_accept.py @@ -27,7 +27,7 @@ class OfferResponseDtccOnboardingAccept(BaseModel): """ Accept a DTCC end-investor onboarding offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_dtcc_onboarding_reject.py b/fireblocks/models/offer_response_dtcc_onboarding_reject.py index 7224dd13..afb08dd5 100644 --- a/fireblocks/models/offer_response_dtcc_onboarding_reject.py +++ b/fireblocks/models/offer_response_dtcc_onboarding_reject.py @@ -28,7 +28,7 @@ class OfferResponseDtccOnboardingReject(BaseModel): """ Reject a DTCC end-investor onboarding offer. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") payload: DtccOnboardingRejectPayload __properties: ClassVar[List[str]] = ["responseType", "payload"] diff --git a/fireblocks/models/offer_response_tradeweb_accept.py b/fireblocks/models/offer_response_tradeweb_accept.py index e289acee..f59264ff 100644 --- a/fireblocks/models/offer_response_tradeweb_accept.py +++ b/fireblocks/models/offer_response_tradeweb_accept.py @@ -27,7 +27,7 @@ class OfferResponseTradewebAccept(BaseModel): """ Accept a Tradeweb co-signing delegation offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_tradeweb_reject.py b/fireblocks/models/offer_response_tradeweb_reject.py index 9e122497..30862c7f 100644 --- a/fireblocks/models/offer_response_tradeweb_reject.py +++ b/fireblocks/models/offer_response_tradeweb_reject.py @@ -25,9 +25,9 @@ class OfferResponseTradewebReject(BaseModel): """ - Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR has nowhere on-ledger to record a reason, so none is accepted. + Reject a Tradeweb co-signing delegation offer. Carries no arguments — Tradeweb does not record a reject reason on the ledger, so none is accepted. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_transfer_accept.py b/fireblocks/models/offer_response_transfer_accept.py index cfc81424..5dcdba07 100644 --- a/fireblocks/models/offer_response_transfer_accept.py +++ b/fireblocks/models/offer_response_transfer_accept.py @@ -27,7 +27,7 @@ class OfferResponseTransferAccept(BaseModel): """ Accept an inbound 2-step transfer offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_transfer_reject.py b/fireblocks/models/offer_response_transfer_reject.py index efc0c655..2c2a805e 100644 --- a/fireblocks/models/offer_response_transfer_reject.py +++ b/fireblocks/models/offer_response_transfer_reject.py @@ -27,7 +27,7 @@ class OfferResponseTransferReject(BaseModel): """ Reject an inbound 2-step transfer offer. Carries no arguments. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/offer_response_transfer_withdraw.py b/fireblocks/models/offer_response_transfer_withdraw.py index db74242e..029e3b4c 100644 --- a/fireblocks/models/offer_response_transfer_withdraw.py +++ b/fireblocks/models/offer_response_transfer_withdraw.py @@ -25,9 +25,9 @@ class OfferResponseTransferWithdraw(BaseModel): """ - Withdraw your own OUTGOING transfer offer. Carries no arguments — `offerId` in the path is the offer, so the vault account and blockchain are resolved from it rather than restated. Was `CantonCallType.TRANSFER_WITHDRAW` with a 3-field payload until FA-10624. + Withdraw your own outgoing transfer offer. Carries no arguments — `offerId` in the path identifies the offer, and the vault account and blockchain are resolved from it. """ # noqa: E501 - response_type: StrictStr = Field(description="How you are answering the offer. Must be one of the values listed in the transaction's `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction, not nested under an `additionalInfo` envelope, which does not exist on `TransactionResponse`. `availableResponses` states what this offer TYPE accepts. It is set when the offer arrives and does not change, so it does NOT tell you whether the offer is still answerable — check `expiresAt` and the transaction's status for that, and expect this endpoint to be the authority: it re-checks state and expiry on every call and answers 409 when either has moved.", alias="responseType") + response_type: StrictStr = Field(description="How you are answering the offer — one of the offer transaction's `cantonDetails.offerResponse.availableResponses`. That list does not change after the offer arrives; check `expiresAt` and the transaction status to see whether it is still answerable.", alias="responseType") __properties: ClassVar[List[str]] = ["responseType"] @field_validator('response_type') diff --git a/fireblocks/models/trust_proof_of_address_request.py b/fireblocks/models/trust_proof_of_address_request.py index dda7db60..c96a47ed 100644 --- a/fireblocks/models/trust_proof_of_address_request.py +++ b/fireblocks/models/trust_proof_of_address_request.py @@ -19,7 +19,7 @@ import json from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from typing import Optional, Set from typing_extensions import Self @@ -32,7 +32,8 @@ class TrustProofOfAddressRequest(BaseModel): asset: StrictStr = Field(description="The asset identifier for which proof of address is being created.") prefix: Annotated[str, Field(min_length=1, strict=True, max_length=255)] = Field(description="The prefix to be used for signing messages.") trust_uuid: StrictStr = Field(description="A unique identifier (UUID) obtained from TRUST (CreateAddressOwnership)", alias="trustUuid") - __properties: ClassVar[List[str]] = ["vaultAccountId", "asset", "prefix", "trustUuid"] + address: Optional[Annotated[str, Field(strict=True, max_length=255)]] = Field(default=None, description="Optional non-default (derived) address of the vault account to prove. Supported for UTXO assets only (`BTC`, `BTC_TEST`). The address must belong to the vault account for the given asset. Both SegWit and Legacy address forms are accepted. When omitted, the proof is created for the default (index 0) address of the vault account. ") + __properties: ClassVar[List[str]] = ["vaultAccountId", "asset", "prefix", "trustUuid", "address"] model_config = ConfigDict( populate_by_name=True, @@ -88,7 +89,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "vaultAccountId": obj.get("vaultAccountId"), "asset": obj.get("asset"), "prefix": obj.get("prefix"), - "trustUuid": obj.get("trustUuid") + "trustUuid": obj.get("trustUuid"), + "address": obj.get("address") }) return _obj diff --git a/fireblocks/models/trust_proof_of_address_response.py b/fireblocks/models/trust_proof_of_address_response.py index 765c071e..bf2e6012 100644 --- a/fireblocks/models/trust_proof_of_address_response.py +++ b/fireblocks/models/trust_proof_of_address_response.py @@ -19,7 +19,7 @@ import json from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing import Any, ClassVar, Dict, List +from typing import Any, ClassVar, Dict, List, Optional from fireblocks.models.typed_message_transaction_status_enum import TypedMessageTransactionStatusEnum from typing import Optional, Set from typing_extensions import Self @@ -31,7 +31,8 @@ class TrustProofOfAddressResponse(BaseModel): transaction_id: StrictStr = Field(description="Transaction ID from Fireblocks (UUID format)", alias="transactionId") status: TypedMessageTransactionStatusEnum signature: StrictStr = Field(description="TRUST-compatible encoded signature for proof of address verification. ") - __properties: ClassVar[List[str]] = ["transactionId", "status", "signature"] + public_key: Optional[StrictStr] = Field(default=None, description="Hex public key of the Fireblocks vault key that produced the signature. Present only when `status` is `SIGNED` or `COMPLETED`, and only if Fireblocks returned it. TRUST requires this key for SUI, TON and XTZ (as `auxProofData.encryptedPublicKey`). ", alias="publicKey") + __properties: ClassVar[List[str]] = ["transactionId", "status", "signature", "publicKey"] model_config = ConfigDict( populate_by_name=True, @@ -86,7 +87,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "transactionId": obj.get("transactionId"), "status": obj.get("status"), - "signature": obj.get("signature") + "signature": obj.get("signature"), + "publicKey": obj.get("publicKey") }) return _obj diff --git a/pyproject.toml b/pyproject.toml index f72b0f62..08a27f53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fireblocks" -version = "35.0.0" +version = "0.0.0" description = "Fireblocks API" authors = ["Fireblocks "] license = "MIT License" diff --git a/setup.py b/setup.py index defb720f..8e55f57b 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools NAME = "fireblocks" -VERSION = "35.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 09603bbf..98105be8 100644 --- a/test/fireblocks/test_client.py +++ b/test/fireblocks/test_client.py @@ -21,6 +21,7 @@ from fireblocks.api.audit_logs_api import AuditLogsApi from fireblocks.api.blockchain_link_beta_api import BlockchainLinkBetaApi from fireblocks.api.blockchains_assets_api import BlockchainsAssetsApi +from fireblocks.api.canton_beta_api import CantonBetaApi from fireblocks.api.compliance_api import ComplianceApi from fireblocks.api.compliance_orchestrator_beta_api import ComplianceOrchestratorBetaApi from fireblocks.api.compliance_screening_configuration_api import ComplianceScreeningConfigurationApi @@ -102,6 +103,9 @@ def test_get_blockchain_link_beta(fireblocks_instance): def test_get_blockchains_assets(fireblocks_instance): assert isinstance(fireblocks_instance.blockchains_assets, BlockchainsAssetsApi) +def test_get_canton_beta(fireblocks_instance): + assert isinstance(fireblocks_instance.canton_beta, CantonBetaApi) + def test_get_compliance(fireblocks_instance): assert isinstance(fireblocks_instance.compliance, ComplianceApi) diff --git a/test/test_add_connected_account_request.py b/test/test_add_connected_account_request.py index 9631d297..007a1ba5 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@7e67ed76', + creds = '[B@ad8c28d', 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@7e67ed76', + creds = '[B@ad8c28d', 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 8672270c..4c9becbd 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@489cefaa', + pdf = '[B@4ebc751e', export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', expires_at = '2027-08-17' ) else: return AddressRegistryCreateProofOfOwnershipResponse( - pdf = '[B@489cefaa', + pdf = '[B@4ebc751e', export_id = '3fa85f64-5717-4562-b3fc-2c963f66afa6', verification_hash = 'BHS2QaqGyYegvLBy5qrGhrES3A2n5JPD7ubpgJozRgeA', expires_at = '2027-08-17', diff --git a/test/test_allow_list_payload.py b/test/test_allow_list_payload.py index 69f84eba..3436f4d4 100644 --- a/test/test_allow_list_payload.py +++ b/test/test_allow_list_payload.py @@ -36,11 +36,11 @@ def make_instance(self, include_optional) -> AllowListPayload: model = AllowListPayload() if include_optional: return AllowListPayload( - wallets = ["investor-party::1220abc…"] + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"] ) else: return AllowListPayload( - wallets = ["investor-party::1220abc…"], + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ) """ diff --git a/test/test_audit_log_entry.py b/test/test_audit_log_entry.py index 9c990dd7..be66f165 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@3dcc8433' + data = '[B@3ddf2a72' ) else: return AuditLogEntry( timestamp = '1700000000', event_type = 'STATUS_TRANSITION', - data = '[B@3dcc8433', + data = '[B@3ddf2a72', ) """ diff --git a/test/test_canton_beta_api.py b/test/test_canton_beta_api.py new file mode 100644 index 00000000..1a7fb076 --- /dev/null +++ b/test/test_canton_beta_api.py @@ -0,0 +1,45 @@ +# 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.api.canton_beta_api import CantonBetaApi + + +class TestCantonBetaApi(unittest.TestCase): + """CantonBetaApi unit test stubs""" + + def setUp(self) -> None: + self.api = CantonBetaApi() + + def tearDown(self) -> None: + pass + + def test_create_canton_call(self) -> None: + """Test case for create_canton_call + + Make a Canton call + """ + pass + + def test_respond_to_canton_offer(self) -> None: + """Test case for respond_to_canton_offer + + Answer an offer + """ + pass + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test_canton_call.py b/test/test_canton_call.py index 69496fb6..aa710f0d 100644 --- a/test/test_canton_call.py +++ b/test/test_canton_call.py @@ -40,7 +40,7 @@ def make_instance(self, include_optional) -> CantonCall: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ) + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ) ) else: return CantonCall( @@ -48,7 +48,7 @@ def make_instance(self, include_optional) -> CantonCall: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ), + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ), ) """ diff --git a/test/test_canton_call_allow_list_add.py b/test/test_canton_call_allow_list_add.py index e33e1c49..f8509a22 100644 --- a/test/test_canton_call_allow_list_add.py +++ b/test/test_canton_call_allow_list_add.py @@ -40,7 +40,7 @@ def make_instance(self, include_optional) -> CantonCallAllowListAdd: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ) + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ) ) else: return CantonCallAllowListAdd( @@ -48,7 +48,7 @@ def make_instance(self, include_optional) -> CantonCallAllowListAdd: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ), + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ), ) """ diff --git a/test/test_canton_call_allow_list_remove.py b/test/test_canton_call_allow_list_remove.py index bcf88456..6cc4414d 100644 --- a/test/test_canton_call_allow_list_remove.py +++ b/test/test_canton_call_allow_list_remove.py @@ -40,7 +40,7 @@ def make_instance(self, include_optional) -> CantonCallAllowListRemove: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ) + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ) ) else: return CantonCallAllowListRemove( @@ -48,7 +48,7 @@ def make_instance(self, include_optional) -> CantonCallAllowListRemove: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.allow_list_payload.AllowListPayload( - wallets = ["investor-party::1220abc…"], ), + wallets = ["investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"], ), ) """ diff --git a/test/test_canton_call_end_investor_invite.py b/test/test_canton_call_end_investor_invite.py index f41235fd..7c2d1bd7 100644 --- a/test/test_canton_call_end_investor_invite.py +++ b/test/test_canton_call_end_investor_invite.py @@ -42,7 +42,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorInvite: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ) + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ) ) else: return CantonCallEndInvestorInvite( @@ -50,7 +50,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorInvite: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ), + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ), ) """ diff --git a/test/test_canton_call_end_investor_invite_cancel.py b/test/test_canton_call_end_investor_invite_cancel.py index bbe0e9f0..36e4fcb2 100644 --- a/test/test_canton_call_end_investor_invite_cancel.py +++ b/test/test_canton_call_end_investor_invite_cancel.py @@ -42,7 +42,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorInviteCancel: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ) + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ) ) else: return CantonCallEndInvestorInviteCancel( @@ -50,7 +50,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorInviteCancel: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ), + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ), ) """ diff --git a/test/test_canton_call_end_investor_offboard.py b/test/test_canton_call_end_investor_offboard.py index ba8a3ce1..2b25e651 100644 --- a/test/test_canton_call_end_investor_offboard.py +++ b/test/test_canton_call_end_investor_offboard.py @@ -42,7 +42,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorOffboard: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ) + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ) ) else: return CantonCallEndInvestorOffboard( @@ -50,7 +50,7 @@ def make_instance(self, include_optional) -> CantonCallEndInvestorOffboard: vault_account_id = '12', blockchain_id = 'CANTON', payload = fireblocks.models.end_investor_payload.EndInvestorPayload( - end_investor = 'investor-party::1220abc…', ), + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ), ) """ diff --git a/test/test_canton_call_participant_onboarding.py b/test/test_canton_call_participant_onboarding.py index dc5cc051..57e5afca 100644 --- a/test/test_canton_call_participant_onboarding.py +++ b/test/test_canton_call_participant_onboarding.py @@ -43,11 +43,11 @@ def make_instance(self, include_optional) -> CantonCallParticipantOnboarding: blockchain_id = 'CANTON', payload = fireblocks.models.participant_onboarding_payload.ParticipantOnboardingPayload( expires_at = '2026-12-31T23:59:59Z', - operator = 'dtcc-operator::1220abc…', - compliance = 'dtcc-compliance::1220abc…', - registrar = 'dtcc-registrar::1220abc…', - client_onboarder = 'dtcc-onboarder::1220abc…', - upgrader = 'dtcc-upgrader::1220abc…', ) + operator = 'dtcc-operator::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + compliance = 'dtcc-compliance::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + registrar = 'dtcc-registrar::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + client_onboarder = 'dtcc-onboarder::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + upgrader = 'dtcc-upgrader::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ) ) else: return CantonCallParticipantOnboarding( diff --git a/test/test_end_investor_payload.py b/test/test_end_investor_payload.py index 81e95f6d..10b1436f 100644 --- a/test/test_end_investor_payload.py +++ b/test/test_end_investor_payload.py @@ -36,11 +36,11 @@ def make_instance(self, include_optional) -> EndInvestorPayload: model = EndInvestorPayload() if include_optional: return EndInvestorPayload( - end_investor = 'investor-party::1220abc…' + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789' ) else: return EndInvestorPayload( - end_investor = 'investor-party::1220abc…', + end_investor = 'investor-party::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', ) """ diff --git a/test/test_participant_onboarding_payload.py b/test/test_participant_onboarding_payload.py index 8b457389..4b41d83e 100644 --- a/test/test_participant_onboarding_payload.py +++ b/test/test_participant_onboarding_payload.py @@ -39,11 +39,11 @@ def make_instance(self, include_optional) -> ParticipantOnboardingPayload: if include_optional: return ParticipantOnboardingPayload( expires_at = '2026-12-31T23:59:59Z', - operator = 'dtcc-operator::1220abc…', - compliance = 'dtcc-compliance::1220abc…', - registrar = 'dtcc-registrar::1220abc…', - client_onboarder = 'dtcc-onboarder::1220abc…', - upgrader = 'dtcc-upgrader::1220abc…' + operator = 'dtcc-operator::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + compliance = 'dtcc-compliance::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + registrar = 'dtcc-registrar::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + client_onboarder = 'dtcc-onboarder::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', + upgrader = 'dtcc-upgrader::1220abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789' ) else: return ParticipantOnboardingPayload( diff --git a/test/test_trust_proof_of_address_request.py b/test/test_trust_proof_of_address_request.py index bae4bd4c..e31372cc 100644 --- a/test/test_trust_proof_of_address_request.py +++ b/test/test_trust_proof_of_address_request.py @@ -39,7 +39,8 @@ def make_instance(self, include_optional) -> TrustProofOfAddressRequest: vault_account_id = '0', asset = 'ETH', prefix = 'trust_verification', - trust_uuid = '550e8400-e29b-41d4-a716-446655440000' + trust_uuid = '550e8400-e29b-41d4-a716-446655440000', + address = 'bc1qexampleexampleexampleexampleexampleexample' ) else: return TrustProofOfAddressRequest( diff --git a/test/test_trust_proof_of_address_response.py b/test/test_trust_proof_of_address_response.py index 2c15161c..86a8431c 100644 --- a/test/test_trust_proof_of_address_response.py +++ b/test/test_trust_proof_of_address_response.py @@ -40,7 +40,8 @@ def make_instance(self, include_optional) -> TrustProofOfAddressResponse: return TrustProofOfAddressResponse( transaction_id = '550e8400-e29b-41d4-a716-446655440000', status = 'PENDING_SIGNATURE', - signature = '0x6e6e0da016d49d2eaeefb2ce49efcde627151ce03d3e525963aa541ce07fb41c0f1f70d131f160480b4a68aaefbdae1b6fe3765eee3ceff0a8b47a8c979ccd961c' + signature = '0x6e6e0da016d49d2eaeefb2ce49efcde627151ce03d3e525963aa541ce07fb41c0f1f70d131f160480b4a68aaefbdae1b6fe3765eee3ceff0a8b47a8c979ccd961c', + public_key = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' ) else: return TrustProofOfAddressResponse( diff --git a/test/test_update_connected_account_credentials_request.py b/test/test_update_connected_account_credentials_request.py index 2813d4dc..243987a3 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@2995a4b', + creds = '[B@21c60504', api_key = 'api_key_new_abc123' ) else: return UpdateConnectedAccountCredentialsRequest( - creds = '[B@2995a4b', + creds = '[B@21c60504', api_key = 'api_key_new_abc123', ) """