interface I_StarkwareContract {

  // ============ State-Changing Functions ============

  /**
    * @notice Make a deposit to the Starkware Layer2.
    *
    * @param  starkKey        The starkKey of the L2 account to deposit into.
    * @param  assetType       The assetType to deposit in.
    * @param  vaultId         The L2 id to deposit into.
    * @param  quantizedAmount The quantized amount being deposited.
    */
  function deposit(
    uint256 starkKey,
    uint256 assetType,
    uint256 vaultId,
    uint256 quantizedAmount
  ) external;

  /**
    * @notice Register to the Starkware Layer2.
    *
    * @param  ethKey          The ethKey of the L2 account to deposit into.
    * @param  starkKey        The starkKey of the L2 account to deposit into.
    * @param  signature       The signature for registering.
    */
  function registerUser(
    address ethKey,
    uint256 starkKey,
    bytes calldata signature
  ) external;
}
/**
 * @title I_StarkwareContract
 * @author dYdX
 *
 * Interface for starkex-contracts.
 */
function registerUser(
  address ethKey,
  uint256 starkKey,
  bytes calldata signature
) external;

/**
 * @notice Register to the Starkware Layer2.
 *
 * @param  ethKey          The ethKey of the L2 account to deposit into.
 * @param  starkKey        The starkKey of the L2 account to deposit into.
 * @param  signature       The signature for registering.
 */