The transfer flow

transfer flow

1. Alice enters a request to transfer funds in the application.

Alice enters a request to transfer collateral funds using the off-chain application.

You cannot transfer funds from synthetic assets.

2. The application sends a Transfer transaction to StarkEx.

The application sends a transfer request transaction to the StarkEx gateway, using the add_transaction API with the Transfer transaction type.

The request includes the following information:


The quantized amount of the asset to transfer.


The sender’s public Stark key.


The sender’s position ID.


The receiver’s public Stark key.


The receiver’s position ID.


The unique ID of the asset to transfer, as registered on the contract.


The time after which the request is no longer valid, in hours since the Unix epoch.


A nonce issued by the caller, to prevent replay attacks.


The sender’s signature.

3. StarkEx checks the validity of the request.

StarkEx checks the following to validate the transfer request:

  • The balance in the sender’s position is sufficient to fulfill the transaction.

  • The maximum fee that the party is willing to pay for the transaction is not less than the actual fee.

  • The transaction request has not expired.

  • According to the orders tree, the order has not already been fulfilled.

  • All amounts in the request are ≥ 0.

  • Each asset’s ID corresponds to real assets registered in the system.

  • Every position involved is either empty or the position’s public Stark key matches the public Stark key in the request.

  • All signatures in the request are valid with respect to the corresponding public Stark key and message.

  • If a funding tick that occurs before the transaction is executed invalidates the transaction, the transaction is not completed and the funding tick is reverted.

  • Every balance that results from executing the order is within the range (-263, 263).

  • After the transaction is executed one of the following must be true:

    • The resulting position is well leveraged, that is: \(\text{total_value} \ge \text{total_risk}\)

    • Total value per risk (TV/TR) does not decrease after funding is applied, and the position’s total risk decreases or stays the same, which means that for every synthetic asset, \(|\text{new_balance}| \le |\text{old_balance}|\)

4. StarkEx includes the transfer in a batch.

If the transfer request is valid, the transfer is included in a batch to be submitted on-chain along with a validity proof.

Implementing a transfer in your application.

To implement transfer functionality in your application, use the add_transaction API with the Transfer transaction type.

The StarkEx REST API reference includes all necessary information.