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 validates the transfer request.

StarkEx checks the following to validate the transfer request:

  • The signature is valid and the transfer request is signed by a Stark key that corresponds to the order’s vault id.

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

  • The receiver’s position has the receiver’s Stark key.

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

  • The transfer request has not expired.

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

  • The asset’s id corresponds to the collateral token.

  • All amounts in the request are ≥ 0.

  • 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 suitable public key and message.

  • Every balance 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. The transfer is included 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.