Skip to main content
The StableFX smart contract (FxEscrow) has a set of interfaces you can use to execute trades either as a maker or a taker. This page describes the user-facing methods of the StableFX contract.

Contract address

The FxEscrow contract is deployed at 0x1f91886C7028986aD885ffCee0e40b75C9cd5aC1 on the Arc testnet.

Interfaces

recordTrade

Records a trade agreement onchain. Returns the contract ID of the trade.
function recordTrade(
  address taker,
  TakerDetails calldata takerDetails,
  bytes calldata takerSignature,
  address maker,
  MakerDetails calldata makerDetails,
  bytes calldata makerSignature
) external returns (uint256);
Parameters
NameTypeDescription
takeraddressThe address of the taker
takerDetailsTakerDetailsThe details of the taker
takerSignaturebytesThe signature of the taker
makeraddressThe address of the maker
makerDetailsMakerDetailsThe details of the maker
makerSignaturebytesThe signature of the maker
Returns
NameTypeDescription
iduint256The contract ID of the trade

takerDeliver

Delivers quote currency for a single trade using Permit2 on the taker side.
function takerDeliver(uint256 id, IPermit2.PermitTransferFrom memory permit, bytes calldata signature) external;
Parameters
NameTypeDescription
iduint256The ID of the trade
permitIPermit2.PermitTransferFromThe Permit2-compliant transfer permit
signaturebytesThe signature for the transfer permit

takerBatchDeliver

Delivers quote currency for multiple trades using Permit2 on the taker side.
function takerBatchDeliver(uint256[] calldata ids, IPermit2.PermitBatchTransferFrom memory permit, bytes calldata signature) external;
Parameters
NameTypeDescription
idsuint256[]An array of trade IDs
permitIPermit2.PermitBatchTransferFromThe Permit2-compliant batch transfer permit
signaturebytesThe signature for the batch permit

makerDeliver

Delivers base currency for a single trade using Permit2 on the maker side.
function makerDeliver(uint256 id, IPermit2.PermitTransferFrom memory permit, bytes calldata signature) external
Parameters
NameTypeDescription
iduint256The ID of the trade
permitIPermit2.PermitTransferFromThe Permit2-compliant transfer permit
signaturebytesThe signature for the transfer permit

makerBatchDeliver

Delivers quote currency for multiple trades using Permit2 on the maker side.
function makerBatchDeliver(uint256[] calldata ids, IPermit2.PermitBatchTransferFrom memory permit, bytes calldata signature) external;
Parameters
NameTypeDescription
idsuint256[]An array of trade IDs
permitIPermit2.PermitBatchTransferFromThe Permit2-compliant batch transfer permit
signaturebytesThe signature for the batch permit

makerNetDeliver

Net settlement for multiple trades on the maker side.
function makerNetDeliver(uint256[] calldata ids, IPermit2.PermitBatchTransferFrom memory permit, bytes calldata signature) external
Parameters
NameTypeDescription
idsuint256[]An array of trade IDs
permitIPermit2.PermitBatchTransferFromThe Permit2-compliant batch transfer permit
signaturebytesThe signature for the batch permit

breach

Marks a trade as breached after maturity.
function breach(uint256 id) external;
Parameters
NameTypeDescription
iduint256The ID of the trade

breach (batch)

Marks multiple trades as breached after maturity.
function breach(uint256[] ids) external;
Parameters
NameTypeDescription
idsuint256[]An array of trade IDs

calculateMakerNet

Calculate maker net token positions for batch operations. Returns an array of Balance structs representing net positions.
function calculateMakerNet(address maker, uint256[] calldata ids) public view returns (Balance[] memory balances);
Parameters
NameTypeDescription
makeraddressThe address of the maker
idsuint256[]An array of trade IDs
Returns
NameTypeDescription
balancesBalance[]An array of Balance structs representing net positions