Step 1: Alice Sends Transfer Request to the Application

Alice sends the Application a signed Transfer request, which includes:
  • The receiving vaultId, and starkKey
  • The vaultId and starkKey of the vault that funds will be taken from
  • The relevant (quantized) amount and assetId
  • expiration_timestamp
  • nonce
See here for the full transaction structure.
In starkEx for perpetual trading, only transfer of the collateral asset id is allowed.

Step 2: Application Sends Transfer Transaction to StarkEx

The Application sends the Transfer transaction to StarkEx service. StarkEx service verifies:
  • The signature is valid and the signing starkKey matches the vaultId
  • The sender vaultId has enough funds (according to the application business logic)
  • The receiver vaultId indeed has the receiver starkKey
  • The Transfer has not expired
  • The Transfer was not executed before (checked in the ordersTree)
  • For perpetual trading: the assetId corresponds to the collateral token

Step 3: Transfer Included in a Batch

If the Transfer is valid, the Transfer is included in a batch to be submitted on-chain along with validity proof. See here for full details on state update on-chain.