Create Order
The fastest way to implement market order functionality is by using the Nitro Mode API.
Last updated
export interface OffchainOrder {
marketId: string;
accountId: string;
sizeDelta: string;
chainId: number;
settlementStrategyId: string;
referrerOrRelayer: `0x${string}`;
allowAggregation: boolean;
allowPartialMatching: boolean;
reduceOnly: boolean;
acceptablePrice: string;
trackingCode: `0x${string}`;
expiration: string;
nonce: string;
}
export async function signOffchainOrder(
privateKey: `0x${string}`,
order: OffchainOrder,
isMainnet: boolean = false,
) {
const rpcUrl = isMainnet ? "https://rpc.sepolia.polynomial.fi/" : "https://rpc.sepolia.polynomial.fi/";
const types = {
OffchainOrder: [
{ name: 'marketId', type: 'uint128' },
{ name: 'accountId', type: 'uint128' },
{ name: 'sizeDelta', type: 'int128' },
{ name: 'settlementStrategyId', type: 'uint128' },
{ name: 'referrerOrRelayer', type: 'address' },
{ name: 'allowAggregation', type: 'bool' },
{ name: 'allowPartialMatching', type: 'bool' },
{ name: 'reduceOnly', type: 'bool' },
{ name: 'acceptablePrice', type: 'uint256' },
{ name: 'trackingCode', type: 'bytes32' },
{ name: 'expiration', type: 'uint256' },
{ name: 'nonce', type: 'uint256' },
],
};
const walletClient = createWalletClient({
transport: http(rpcUrl),
account: privateKeyToAccount(privateKey),
});
const mainnetDomain = {
name: 'PolynomialPerpetualFutures',
version: '1',
chainId: 8008,
verifyingContract: "0xD052Fa8b2af8Ed81C764D5d81cCf2725B2148688" as `0x${string}`,
};
const testnetDomain = {
name: 'PolynomialPerpetualFutures',
version: '1',
chainId: 80008,
verifyingContract: "0x52Fdc981472485232587E334c5Ca27F241CbA9AA" as `0x${string}`,
};
return await walletClient.signTypedData({
account: privateKeyToAccount(privateKey),
domain: isMainnet ? mainnetDomain : testnetDomain,
types,
primaryType: 'OffchainOrder',
message: order as any,
});
}