FT4 changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a changelog, and this project adheres to Semantic versioning.
[1.1.0r] - 2025-02-25
Changed 🪙
- Allow multiple smaller transfers to a non-existing account for the same asset type.
- The logic takes multiple senders for one recipient into consideration
register_accountused for crosschain transfers with the strategiesfee,openandsubscriptiondoes not require a signature, when transfering to the same account- Updated the response of the query
get_account_by_idto also return type along with id
Added ✅
-
Added a blacklist for operations that may not be used after an auth operation (
evm_authandft_auth). Defined in thechromia.ymlascore.auth.auth_op_blacklisted_operations, it works the same way asevm_signatures_authorized_operations, except the former is a list of operations that are not allowed, while the latter includes only allowed operations. -
Added RellDocs for everything
-
Added
get_api_version. While version looks like "1.0.3", and it's difficult to parse, api version is an integer that is increased by one every time the API (queries and operations) changes. It will start at 1 for version "1.1.0". -
Added
get_block_height, analogous tolatest_time. The main difference is that the block height returned is the height of the next block to be produced, if in a query. This is also analogous to the difference betweenop_context.last_block_timeandop_context.block_height, where the height refers to the current block and the time to the last block. -
Added multiple queries:
get_assets_filteredget_balances_filteredget_transfer_history_entries_filteredget_crosschain_transfer_history_entries_filteredget_asset_origin_filteredget_applied_transfers_filteredget_canceled_transfers_filteredget_unapplied_transfers_filteredget_recalled_transfers_filteredget_pending_transfers_filteredget_reverted_transfers_filteredget_accounts_filteredget_account_auth_descriptors_filteredget_main_auth_descriptors_filteredget_auth_descriptor_signers_filteredget_rl_states_filteredget_account_creation_transfers_filteredget_account_links_filtered
All are mounted on 'ft4' directly.
-
Added two extendable functions:
before_crosschain_balance_changeafter_crosschain_balance_change
The extensions are being called in the
Unsafe.update_balances_if_neededfunction which is a part of crosschain transfers.
Fixed 🔧
authenticate()andauthenticate_and_return_context()will no longer delete the auth descriptor used to authenticate the operation, even if it expired during the authentication process.
[1.0.0r] - 2024-07-04
Added ✅
- Introduced a filtering option in
get_pending_transfer_strategiesto sort results based on transfer expiration.
Fixed 🔧
- Resolved an issue in the
get_auth_message_templatequery where it failed if a GTV-encoded null was provided asargs.
[0.8.0r] - 2024-05-29
Breaking changes 💔
- Removed the key constraint from the
symbolattribute of theassetentity. - Replaced
get_asset_by_symbolwithget_assets_by_symbol. - Updated
register_crosschain_assetoperation to includeasset_id,asset_type, anduniqueness_resolverarguments. - Renamed
get_paginated_asset_balances_by_nametoget_paginated_assets_by_name. - Removed the
_ft_authfunction andft4.get_account_by_auth_descriptorquery.
Changed 🪙
- Made the
icon_urlattribute of theassetentity mutable.
Added ✅
- Added a
uniqueness_resolverattribute to theassetentity. - Introduced
get_assets_by_symbolquery to retrieve all registered assets with the same symbol. - Added
get_transfer_rulesquery to fetch transfer strategy rules configuration.
Fixed 🔧
- Ensured that the number of required signatures in multisig auth descriptors is greater than 0.
- Verified that new main auth descriptors include all mandatory flags when using
update_main_auth_descriptor.
[0.7.0r] - 2024-04-23
Breaking changes 💔
- Deadline for transfers: Added
deadlinefield toinit_transfer. Transfers applied after this timestamp will fail and can only be reverted. - Moved
latest_time: Thelatest_timefield has been relocated from theaccountsmodule to theutilsmodule. - Function renaming:
- Renamed
_register_account()toregister_account(). - Renamed
add_auth_descriptor_to_accountfunction toadd_auth_descriptor. - Renamed
_add_signertoadd_signers. - Renamed
ft4.get_auth_descriptor_noncetoft4.get_auth_descriptor_counter.
- Renamed
- Version requirement: Requires Rell "0.13.10".
- Entity changes:
- Updated entity
ft4.crosschain.applied_transfers. - Updated entity
ft4.account_creation_transfer. - Added
transactionfield to theapplied_transfersentity.
- Updated entity
- Operation changes:
- Removed
ft4.register_account_evm_signatures, now useft4.evm_signaturesinstead. - Removed
ft4.delete_all_auth_descriptors_exclude, replaced withft4.delete_all_auth_descriptors_except_main.
- Removed
- Function argument changes:
- Removed
is_strictargument fromauthenticate()function.auth_handlerswill now resolve to the most specific handler if no operation auth handler is found.
- Removed
- Account creation updates:
- Removed signature verification from
create_account_with_auth. Signatures must now be verified separately usingverify_signers. create_account_with_authwill now create an account with an ID based on the hash of signers if theaccount_idargument is not provided.
- Removed signature verification from
- Configuration changes:
- All module arguments for FT4 submodules in YML config now include an additional
corecomponent in the module path. For example,accountsmodule arguments should be defined underlib.ft4.core.accountsinstead oflib.ft4.accounts.
- All module arguments for FT4 submodules in YML config now include an additional
- Module removal: Removed
ft4_basicandft4_basic_devmodules.
Changed 🪙
- Revised internal structure of FT4 submodules: External modules are now imported alongside core modules. For instance,
importing
lib.ft4.accountswill also import the associated operations and queries. If needed, you can still importaccountsentities and functions without the operations and queries by usinglib.ft4.core.accounts.
Added ✅
- Reversion of incomplete cross-chain transfers: Added support to revert incomplete cross-chain transfers after the deadline has passed.
- Recall unclaimed register account transfers: Added functionality to recall unclaimed register account transfers after the timeout period has expired.
- New operation: Introduced
ft4.delete_all_auth_descriptors_except_main, which deletes all auth descriptors except the main one. - Auth flags configuration: Added
auth_flagsconfig to define mandatory and default authentication flags. - Updated
ft4.get_register_account_message: Now includes register account operation parameters in the auth message. - New query: Added
ft4.get_enabled_registration_strategiesto retrieve enabled registration strategies. - New utility functions: Added new functions in
ft4.test.utils. - Lock accounts support: Added support for "lock" accounts.
[0.6.0r] - 2024-03-22
Breaking changes 💔
- Renamed
accounttosenderin thepending_transferentity.
Added ✅
-
New operation:
delete_auth_descriptors_for_signerto remove all auth descriptors for a specific signer from an account (corresponding to the queryget_account_auth_descriptors_by_signer). -
New attributes and queries:
- Added
typeattribute to theassetentity. - Introduced
get_assets_by_typequery. - Added
register_asset_with_typeadmin operation.
- Added
-
Enhanced query responses:
- Included
is_crosschainflag in responses fromget_transfer_history,get_transfer_history_from_height, andget_transfer_history_entry. - Added
blockchain_ridto responses fromget_transfer_detailsandget_transfer_details_by_asset.
- Included
-
Pending transfers: Pending transfers are now completed when the account is registered with direct strategies.
-
Configuration updates: Added auth descriptor configuration options (
max_rulesandmax_number_per_account) to theget_configquery. -
Default login configuration: Set a 1-day expiration for default login configuration.
-
New queries:
get_last_pending_transfer_for_account: Returns the most recent pending cross-chain transfer matching the provided parameters (sender, target chain, recipient, asset, amount).has_pending_create_account_transfer_for_strategy: Checks if a "create on transfer" account registration is initiated for the specified strategy.
[0.5.0r] - 2024-02-29
Breaking changes 💔
- Changed the mount name of the
lib.ft4.accountsmodule fromfttoft4, affecting the following entities:accountaccount_auth_descriptorauth_descriptor_signerrl_state
Changed 🪙
- Updated the
_register_account()function to return the created account.
Added ✅
-
New extension functions for cross-chain transfers:
before_init_transferafter_init_transferbefore_apply_transferafter_apply_transfer
-
New
register_crosschain_assetfunction. -
New account creation strategies:
- Create on transfer: Subscription-based
- Configurable fee account
[0.4.0r] - 2024-02-15
Breaking changes 💔
- Changed
asset_datatoassetin the following queries:get_transfer_historyget_transfer_history_from_heightget_transfer_history_entry
Changed 🪙
- The
create_account_with_authfunction now requires theauth_descriptorto include theAflag. Accounts cannot be created with anauth_descriptormissing theAflag by default. - The
get_auth_descriptor_noncefunction now returnsnullif the auth descriptor is not found, rather than rejecting the request. - The
page_sizeparameter in paginated queries is now optional. The default value can be configured using thequery_max_page_sizefield under thelib.ft4section. - Updated the
transferfunction to support account creation during transfers. - Revised the calculation method for account IDs.
Added ✅
- Introduced a framework for account creation.
- New account creation strategies:
- Create on transfer:
- Open
- Fee-based
- Transfer open strategy
- Create on transfer:
- Added
get_first_allowed_auth_descriptor_by_signersquery. - Added support for rules in the login configuration.
Bugfixes 🐛
- Cross-chain transfer operations now validate that transactions are anchored on SAC before proceeding.
[0.3.1r] - 2024-01-19
Changed 🪙
- Enhanced validation for
register_crosschain_assetparameters. - Added
op_indexto theget_transfer_historyresponse for better tracking.
[0.3.0r] - 2024-01-17
Breaking changes 💔
- Removed auth descriptor types
ESandEM.
Changed 🪙
- Introduced
get_all_auth_handlersquery to retrieve all authentication handlers specified by the dapp. - Added
get_first_allowed_auth_descriptorquery to enable blockchain selection of auth descriptors for operation authentication. - Enabled creation of overridable auth handlers.
- Added
resolverfield toAuthHandlerfor custom authentication logic evaluation. - Updated transaction prioritization to support Postchain 3.14.17 and later.
- Fixed
init_transferauth message issue to supportinit_transferoperation with EVM auth.
[0.2.0r] - 2023-12-22
This version is incompatible with older versions. To upgrade, you will need to perform a database migration. For more information, refer to this page.
Breaking changes 💔
- Paginated queries: Queries
get_accounts_by_participant_idandget_account_auth_descriptors_by_participant_idare now paginated. Update your code to handle these changes. - Paginated queries: Removed non-paginated queries
_get_accounts_by_auth_descriptor_id,_get_asset_balances, and_get_all_assets. Use their paginated counterparts without the leading_. Replacedget_asset_by_namewith the paginatedget_assets_by_name. - Rules structure: Revised the internal structure of rules. Existing auth descriptors using rules will no longer function and will cause runtime errors.
- Address functions removed: Deprecated
evm_address_from_pubkeyandevm_address_from_privkey. Usecrypto.eth_pubkey_to_addressandcrypto.eth_privkey_to_addressfrom the Rell standard library. - Function return types:
create_account_with_authnow returnsaccountinstead ofbyte_array.add_auth_descriptor_to_accountnow returnsaccount_auth_descriptorinstead ofbyte_array. - Rate limit config: Updated format for rate limit configuration.
bridtoblockchain_rid: Renamed all instances ofbridtoblockchain_ridto clarify the acronym. This affects:asset.issuing_brid->asset.issuing_blockchain_rid- Queries and message templates that previously used
{brid}now use{blockchain_rid}. asset_origin.origin_brid->asset_origin.origin_blockchain_rid
- Renamed terms: Updated terminology related to auth descriptors:
- Queries:
get_account_auth_descriptors_by_participant_id->get_account_auth_descriptors_by_signer,get_accounts_by_participant_id->get_accounts_by_signer. - Accounts module: Renamed
single_sig_args.pubkeytosingle_sig_args.signer,multi_sig_args.pubkeystomulti_sig_args.signers,get_participantstoget_signers,auth_descriptor_participanttoauth_descriptor_signer, and functions likeget_paginated_auth_descriptors_by_participant_idtoget_paginated_auth_descriptors_by_signer. - Internals: Renamed
_add_auth_participantto_add_signer, and_add_eth_auth_participantto_add_eth_signer.
- Queries:
- Transfer history: Removed
transfer_argsandentry_indexfromget_transfer_history_entryandget_transfer_historyqueries.
Added ✅
- Default values for
lib.ft4.accountsmodule_args to simplifychromia.ymlconfiguration. - Configuration parameter
max_auth_descriptor_rulesforlib.ft4.accountsmodule_args, with a default value of 8. - Option to customize the rate limiter for some accounts.
- Queries
get_transfer_details,get_transfer_details_by_asset, andget_transfer_history_from_heightmoved tolib.ft4.assets.external. - Support for transaction priority.
Changed 🪙
- Updated signature for
evm_auth_operation_forto accept arell.test.op. before_authenticatefunction is now extendable to add custom pre-authentication logic.after_authenticatefunction is now extendable to execute logic post-authentication.- Account creation with
create_account_with_authcan now be done withoutop_context. - Validation added for auth descriptors to prevent the creation of expired descriptors.
[0.1.7r] - 2023-10-25
Added ✅
- Added the
get_admin_pubkey()function to the admin module, enabling retrieval of the admin public key.
[0.1.6r] - 2023-10-20
Changed 🪙
- Removed cross-chain submodule imports from
ft4_basic_dev.
[0.1.5r] - 2023-10-19
Added ✅
- Implemented cross-chain functions for asset transfer across chains.
- Introduced a new admin module,
admin.crosschain, for registering cross-chain assets. - Added the option to specify tests for Rell using the
--testsor-toption inscripts/relltest.sh.
[0.1.4r] - 2023-09-29
Changed 🪙
- Importing a module now automatically imports the corresponding external module as well.
[0.1.3r] - 2023-09-19
Added ✅
- Added additional test utility functions.
- Added
evm_address_from_pubkeyfunction.
[0.1.2r] - 2023-09-18
Changed 🪙
- The version module is now included regardless of which modules are used from the library.
Added ✅
- Added more test utility functions.
[0.1.1r] - 2023-09-12
Changed 🪙
- Assets are now always returned with all properties from Postchain. The separate properties
asset,asset_id, anddecimalswill be removed in favor of the more comprehensiveasset_data. - The version information is now included in every non-external module, ensuring that every dapp using ft4 has access to version details.
Added ✅
- Added a
testmodule with utility functions for testing.
[0.1.0r] - 2023-07-12
Initial release