Summary

In September, the Ethereum network moved from a proof of work to a proof of stake model. However, for those with ETH staked on the network, there was no option to unstake ETH until a future set of upgrades.

There are two associated upgrades titled “Shanghai” (execution layer) and “Capella” (consensus layer) that will go live in a hard fork of the Ethereum mainnet (PROD environment) in slot 6,209,536, which will arrive on Apr. 12, 2023, around 10:27:35 PM UTC. Ethereum testnet Goerli (CERT environment) went through this hard fork last month without issue.

There is no expected downtime during the fork and the network should automatically follow the new chain. Our teams will be monitoring this upgrade closely.

Related Links

Release Information

Enhanced Participant Status and Locking Mechanism

Release Date

April 4, 2023

Release Type

Actionable – Responses returned from Zero Hash may impact user experience

Summary

Zero Hash has implemented improvements to its participant status system to better manage fraud and risk mitigation. New statuses and reason codes have been introduced, providing platforms with more insight into participant status changes. Additionally, a new endpoint for locking participants has been added.

New Statuses and Reason Codes

StatusReason CodeDescription
submittednullNone - participant is awaiting initial approval
approvednullAll - participant was never under investigation
approvedrisk_clearedAll - participant was under investigation but risk was cleared
lockeduser_requestClosing only (sell/withdraw)
pending_unlockuser_requestClosing only (sell/withdraw)
pending_disableuser_requestClosing only (sell/withdraw)
disableduser_requestNone
divesteduser_requestNone
closeduser_requestNone
lockedcompliance_issueNone
pending_unlockcompliance_issueNone
pending_disablecompliance_issueNone
disabledcompliance_issueNone
divestedcompliance_issueNone
closedcompliance_issueNone

Action Required

  • No specific action required, but transaction availability may be impacted based on participant status changes.
  • Platforms can now use the POST /participants/customers/:participantCode/lock endpoint to lock participants.

New Endpoint

  • Endpoint: POST /participants/customers/:participantCode/lock
    • Description: Used to lock participants upon termination of relationship.
    • Parameters: reason_code, notes (optional)
    • Sample Request:
      POST /participants/customers/7PJM14/lock
      {
       "reason_code": "compliance_issue",
       "notes": "confirmed fraud"
      }
      
    • Sample Response: OK or error message

Endpoints Impacted

  • All transactional endpoints will reference participant status before allowing or denying requests.
  • GET /participants will now display expanded statuses and include a "reason_code".
  • Introduction of new endpoint POST /participants/customers/:participantCode/lock.

Relevant Documentation

Future Release

Zero Hash plans to develop webhooks for Q3 to alert platforms of participant status changes.

Additional Notes

  • Platforms are responsible for locking customers upon termination of their relationship, using the provided endpoint.

API Updates

Trade Execution Rejection for Amounts Less Than a Penny

Summary

Trade executions that result in an amount less than a penny (.01) as calculated by trade_price * trade_quantity will be rejected.

Impacted Endpoints

  • GET /liquidity/rfq
  • POST /rewards
  • POST /awards/fund
  • POST /awards/distribute
  • POST /trades
  • POST /trades/batch

Error Messages

  • If a request results in a quote for less than a penny: "rfq notional must be greater than 0"
  • If a trade is submitted for settlement for an amount less than a penny: "BadRequest: The submitted notional is less than the minimum precision supported by the quoted currency (0.01 USD)"

Release Information

Enabling Destination-Tag Specification for Convert-Withdraw Product

Release Date

March 27, 2023

Release Type

Informational – Optional action from platforms.

Summary

Platforms can now specify a destination-tag when using the Convert-Withdraw product with tag-based assets (XRP, XLM, HBAR, etc.). This new optional feature provides more flexibility for platforms.

Action Required

  • Platforms interested in using the new feature should work with Zero Hash support if they are not already utilizing the Convert-Withdraw product.
  • Platforms already enabled with Convert-Withdraw should ensure they are enabled for any tag-based assets they wish to support, if not already configured.

Endpoints Impacted

  • GET /convert_withdraw/rfq: Platforms should refer to the API docs to see how to build a request using a destination-tag.
  • This will not affect the POST /convert_withdraw/execute request.

Relevant Documentation

  • OpenAPI Spec
  • Further documentation may be provided in the future.

Release Date

Friday, March 03, 2023

Release Type

Informational – Optional action from platforms.

Summary

Zero Hash is pleased to announce that we have increased support for additional query parameters when using our GET /transfers endpoint. Prior to this launch, Platforms could only query applying a filter for the client_transfer_id.

Action Required

This is a feature that Platforms can opt to use if they are already using transfers to query transfer history. No additional configuration is required.

Endpoints Impacted

GET /transfers will now support the following query parameters:

  • page: Optional. This is to allow the Platform to paginate through response payloads.

  • page_size: Optional. Shall dictate the size of the list in the response payloads.

  • to_participant_code: Optional. Filter for transfers that have the participant_code matching what is provided in the query param.

  • from_participant_code: Optional. Filter for transfers that have the participant_code matching what is provided in the query param.

  • requested_timestamp: Optional. Correspond to the created_at date. Requested_timestamp filters movements based on a given timestamp in milliseconds 1593798130060 or nanoseconds 1593798130060000000 using the following next params for the following filter types:

    • [gt]: greater than a given timestamp, e.g. requested_timestamp[gt]=1593798130060
    • [gte]: greater than or equal to a given timestamp, e.g. requested_timestamp[gte]=1593798130060
    • [e]: equal to a given timestamp, e.g. requested_timestamp[e]=1593798130060
    • [lt]: less than a given timestamp, e.g. requested_timestamp[lt]=1593798130060
    • [lte]: lower than or equal to a given timestamp, e.g. requested_timestamp[lte]=1593798130060

    Combinations are also possible, e.g. to find movements between 1593798130555 and 1593798130777 you can use the next combination requested_timestamp[gt]=1593798130555&requested_timestamp[lt]=1593798130777

Relevant Documentation

N/A

Coming soon

N/A

Release Date

Wednesday, February 1, 2022

Release Type

Informational – No action or changes necessary from platforms.

Summary

Zero Hash has now added an account label query parameter to the following endpoints:

  • GET /trades
  • GET /positions
  • GET /withdrawals/requests
  • GET /deposits

Prior to this release, platforms were not able to designate a specific account label for these responses and thus received back a larger data set than was needed.

Account Labels can be thought of as "sub account groups". Within each account group, you can have many account labels. They are used to separate funds at a more granular level. One individual can have two separated BTC accounts, for example.

Platforms are now able to add the account label filter to all of these responses in order to query by account label as well as participant code.

Action Required

Informational – No action or changes necessary from platforms.

Endpoints Impacted

The following endpoints are impacted due to this feature improvement, the change being available in both Cert and Production environments:

  • GET /trades
  • GET /positions
  • GET /withdrawals/requests
  • GET /deposits

Relevant Documentation

Release Date

Wednesday, February 1, 2023

Release Type

Informational – Please see the “Action Required” section for instructions on enabling this feature.

Summary

Zero Hash has now added the ability for platforms to provide an account label when using the following endpoint:

  • POST /deposits/digital_asset_addresses

Prior to this release, platforms were not able to designate a specific account label for a digital asset deposit, and thus could not create different on-chain digital asset addresses for a customer that had multiple accounts on their platform.

Account Labels can be thought of as "sub account groups". Within each account group, you can have many account labels. They are used to separate funds at a more granular level. One individual can have two separated BTC accounts, for example.

Platforms are now able to designate a specific account label when creating multiple digital asset addresses. This functionality is available on a per participant and per asset basis. If Zero Hash receives a new account label within the deposit request, a new on-chain address will be created. Please note that each on-chain address creation event will incur network fees.

Account labels must conform to the following criteria:

  • Account labels are case sensitive and can be a maximum of 40 characters
  • Only numbers, letters, hyphens, and underscores are allowed.

Sending the same account label with different cases will result in multiple accounts being created.

Action Required

If you would like to enable this feature, please reach out to [email protected]. This will allow our team to properly configure platform settings to create multiple on-chain addresses per participant code per asset.

Endpoints Impacted

The following endpoint is impacted due to this feature improvement, the change being available in both Cert and Production environments:

  • POST /deposits/digital_asset_addresses

Relevant Documentation

API Updates

  • The GET /index endpoint has been converted from a public endpoint, to private
  • This means that you will only be able to consume /index data via a valid API key
  • A new API key permission has been added for index
    • All existing API Keys have been backfilled with read permissions for index

Release Date

Friday, December 16, 2022

Release Type

Actionable – Updates required for platforms that have enabled withdrawals and want to use the new feature.

Summary

Zero Hash now supports additional configurations related to handling network fees for withdrawals. The new model allows platforms to generate a network fee quote and execute it upon approval from the end user. Network fees are quoted and debited based on the requested withdrawal asset, making it easier for end users to understand charges. Network fees are also netted from the requested withdrawal amount, ensuring that end users do not owe more than they request to withdraw.

How It Works

  • Platforms need to be configured by Zero Hash for the service.
  • Platforms generate a withdrawal quote using GET /withdrawals/locked_network_fee, which returns details about the withdrawal and a withdrawal_quote_id.
  • Withdrawal_quote_ids are valid for 30 seconds.
  • After the Participant accepts the quote, the Platform executes the quote by passing the withdrawal_quote_id using POST /withdrawals/execute.
  • Zero Hash performs ledgering actions, including generating a pending withdrawal and creating a confirmed withdrawal message.

Action Required

Platforms interested in using the feature need to reach out to Zero Hash Customer Service team or Platform Solutions team for additional configurations. This will impact how Platforms execute withdrawals and will require using the aforementioned endpoints to facilitate all withdrawals.

Endpoints Impacted

NEW - GET /withdrawals/locked_network_fee

Accepted Parameters:

  • "participant_code" (Required)
  • "account_group" (Optional)
  • “account_label" (Optional)
  • "amount" (Required)
  • "max_amount" (Optional)
  • "asset" (Required)
  • "withdrawal_account_id" (Required if withdrawal_address is not provided)
  • "withdrawal_address" (Required if withdrawal_account_id is not provided)
  • "destination_tag" (Required for tag-based assets)

Example Request

GET /withdrawals/locked_network_fee?participant_code=CUST01&account_group=PLAT01&account_label=general&amount=0.02&asset=BTC&withdrawal_address=mohjSavDdQYHRYXcS3uS6ttaHP8amyvX78

Example Response

{
 'account_group': 'PLAT01',
 ‘request_id’: 'ac3se065c-a35d-xc3f-s802-2cefaabed6123’',
 'account_label': 'general',
 'amount': '0.02',
 'amount_notional': '339.39',
 'asset': 'BTC',
 'destination_tag': '',
 'max_amount': False,
 'net_withdrawal_notional': '339.34',
 'net_withdrawal_quantity': '0.01999718',
 'network_fee': '0.00000282',
 'network_fee_notional': '0.05',
 'participant_code': 'CUST01',
 'withdrawal_account_id': '',
 'withdrawal_address': 'mohjSavDdQYHRYXcS3uS6ttaHP8amyvX78',
 'withdrawal_quote_id': '53b9065c-185d-4c9f-ba90-2cefaabed6e1'
}