Creating orders
Creating orders
THE FEE MODEL IS CHANGING IN THE LATEST VERSION (V3) OF THE API.
Please refer to this guide to learn more about maker taker fees when you plan your migration to the upgraded v3 endpoints.
An order is a sale listing for an asset. It contains details like price and sale period. Some applications, such as marketplaces, may want to allow users to create orders in order to sell their assets.
Where is the order created?
When an order is created, it is added to XpansionChain's global orderbook service on StarkEx. This orderbook is shared by all applications built on the XpansionChain protocol, which means that it can be accessed and displayed by any of them - allowing your order to be visible and available to be transacted with by all protocol participants.
This means that transations aren't siloed within certain applications, and has massive interoperability advantages for all assets and applications on the protocol.
📝GUIDES
Core SDK
Link SDK
Core SDK
1. Initialize the Core SDK
In order to use the Core SDK, you need to initialize it.
2. Generate signers
Creating an order for a user requires a user's signature, so your application will need to create signers. See the guide on how to generate signers.
3. Set the order params
WHEN SETTING MAKER FEES IN THE ORDER PARAMS
You cannot set more than 3 recipients
You cannot set the same recipient more than once
The combined fee percentage can’t exceed 100%
Individual percentage fees can’t be <= 0% :::
Typescript Core SDK
📚SDK REFERENCE
createOrder
The createOrder workflow is available in the Core SDK and is used to create an order for a user. It takes the following parameters:
/**
* Function to create an Order
* @param walletConnection - the pair of L1/L2 signers
* @param request - the request object to be provided in the API request
* @returns a promise that resolves with the created Order
* @throws {@link index.IMXError}
*/
createOrder(walletConnection: WalletConnection, request: UnsignedOrderRequest): Promise<CreateOrderResponse>;
The parameters required to fill the UnsignedOrderRequest are:
/**
* Parameter required to create an Order
*/
interface UnsignedOrderRequest {
/**
* The amount of tokens that will be bought for this order
*/
buy: TokenAmount;
/**
* The amount of tokens that will be sold for this order
*/
sell: TokenAmount;
/**
* ExpirationTimestamp in Unix time. Note: will be rounded down to the nearest hour
*/
expiration_timestamp?: number;
/**
* Inclusion of either maker or taker fees
*/
fees?: Array<FeeEntry>;
}
These parameters can be set with the following code:
// OPTIONAL: Generate the date when order expire, in this case after one month by now
const timestamp = new Date(Date.now());
timestamp.setMonth(timestamp.getMonth() + 1);
const timestampUnix = Math.round(timestamp.getTime() / 1000); // Unix format is required
const orderData = {
buy: {
// The amount of tokens to purchase the asset
amount: '10000000000000000', // Wei amount, equal to 0.01 ETH
type: 'ETH',
},
sell: {
// The asset to sell
amount: '1',
tokenAddress: '[REPLACE WITH TOKEN ADDRESS]',
tokenId: '[REPLACE WITH TOKEN ID]',
type: 'ERC721',
},
expiration_timestamp: timestampUnix, // OPTIONAL: order expiry date
fees: [
// OPTIONAL: Inclusion of either maker or taker fees
{
address: '0x383b14727ac2bD3923f1583789d5385C3A26f91E',
fee_percentage: 0.5, // equal to 0.5%
},
],
} as UnsignedOrderRequest;
Note: If creating a bid, the buy token will be the ERC721 and the sell token will be ERC20 / ETH.
Kotlin (JVM) Core SDK
📚SDK REFERENCE
See params required for createOrder
Swift Core SDK
📚SDK REFERENCE
See params required for createOrder
Golang Core SDK
📚SDK REFERENCE
See params required for createOrder
💻EXAMPLE
createOrder
4. Create the order
Typescript Core SDK
📚SDK REFERENCE
createOrder
Combining the parameters from the previous step, you can create an order. The response will contain the order ID, status and timestamp.
The following code snippet shows how to create an order with the parameters from the previous step:
const createOrder = async (
wallet: WalletConnection, // WalletConnection containing the L1 and L2 signers
orderData: UnsignedOrderRequest // Order Data from the previous step
) => {
const response = await client.createOrder(wallet, orderData);
return response;
};
createOrder(wallet, orderData)
.then((result) => {
console.log(result);
})
.catch((e) => {
console.log(e);
});
Example response
{
order_id: 7215, // ID of the created order
status: '', // Status of the created order
time: 0 // Timestamp of the created order
}
Kotlin (JVM) Core SDK
📚SDK REFERENCE
createOrder
Swift Core SDK
📚SDK REFERENCE
createOrder
Golang Core SDK
📚SDK REFERENCE
See params required for CreateOrder
💻EXAMPLE
CreateOrder
5. Cancel an order
Typescript Core SDK
📚SDK REFERENCE
cancelOrder
Let's say you wish to cancel the previous order. You can use the cancelOrder workflow. The response will contain the order ID and status of the order.
const cancelData = {
order_id: 7215,
} as GetSignableCancelOrderRequest;
const cancelOrder = async (
wallet: WalletConnection,
cancelData: GetSignableCancelOrderRequest
) => {
const response = await client.cancelOrder(wallet, cancelData);
return response;
};
cancelOrder(wallet, cancelData)
.then((result) => {
console.log(result);
})
.catch((e) => {
console.log(e);
});
Example response
{
order_id: 7215, // ID of the cancelled order
status: '' // New status of the order
}
Kotlin (JVM) Core SDK
📚SDK REFERENCE
cancelOrder
Swift Core SDK
📚SDK REFERENCE
cancelOrder
Golang Core SDK
📚SDK REFERENCE
CancelOrder
💻EXAMPLE
CancelOrder example from our SDK repo
Last updated