add support for time in force order type (#23255)

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-02-22 14:12:02 +01:00 committed by GitHub
parent bcda74f42f
commit f00016b647
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 262 additions and 89 deletions

View File

@ -1579,23 +1579,21 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
}, },
"node_modules/@blockworks-foundation/mango-client": { "node_modules/@blockworks-foundation/mango-client": {
"version": "3.2.16", "version": "3.3.17",
"resolved": "https://registry.npmjs.org/@blockworks-foundation/mango-client/-/mango-client-3.2.16.tgz", "resolved": "https://registry.npmjs.org/@blockworks-foundation/mango-client/-/mango-client-3.3.17.tgz",
"integrity": "sha512-ZI3Tt/k77azt4iBrPiWsm9rS6EPEbGX+IsWKzCTCXLIfwOxpF09FarL+1YL/hBvoRkd8X/jAyQ1/KWpkb3zvUg==", "integrity": "sha512-d7QNaygWKa7qNjtUIbs3r7evN1qaiDlHmgt20RQ15iD8XmuYgpWy6ZLTYu2lhX1feoEqZKv++PEH+yYVHxZNWQ==",
"dependencies": { "dependencies": {
"@project-serum/anchor": "^0.16.2", "@project-serum/anchor": "^0.21.0",
"@project-serum/serum": "0.13.55", "@project-serum/serum": "0.13.55",
"@project-serum/sol-wallet-adapter": "^0.2.0", "@project-serum/sol-wallet-adapter": "^0.2.0",
"@solana/spl-token": "^0.1.6", "@solana/spl-token": "^0.1.6",
"@solana/web3.js": "1.21.0", "@solana/web3.js": "^1.31.0",
"big.js": "^6.1.1", "big.js": "^6.1.1",
"bn.js": "^5.2.0", "bn.js": "^5.2.0",
"buffer-layout": "^1.2.1", "buffer-layout": "^1.2.1",
"cross-fetch": "^3.1.5",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"yargs": "^17.0.1" "yargs": "^17.0.1"
},
"engines": {
"node": ">=14.15.3"
} }
}, },
"node_modules/@blockworks-foundation/mango-client/node_modules/@babel/runtime": { "node_modules/@blockworks-foundation/mango-client/node_modules/@babel/runtime": {
@ -1610,17 +1608,18 @@
} }
}, },
"node_modules/@blockworks-foundation/mango-client/node_modules/@project-serum/anchor": { "node_modules/@blockworks-foundation/mango-client/node_modules/@project-serum/anchor": {
"version": "0.16.2", "version": "0.21.0",
"resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.16.2.tgz", "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.21.0.tgz",
"integrity": "sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q==", "integrity": "sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA==",
"dependencies": { "dependencies": {
"@project-serum/borsh": "^0.2.2", "@project-serum/borsh": "^0.2.4",
"@solana/web3.js": "^1.17.0", "@solana/web3.js": "^1.17.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"bn.js": "^5.1.2", "bn.js": "^5.1.2",
"bs58": "^4.0.1", "bs58": "^4.0.1",
"buffer-layout": "^1.2.0", "buffer-layout": "^1.2.2",
"camelcase": "^5.3.1", "camelcase": "^5.3.1",
"cross-fetch": "^3.1.5",
"crypto-hash": "^1.3.0", "crypto-hash": "^1.3.0",
"eventemitter3": "^4.0.7", "eventemitter3": "^4.0.7",
"find": "^0.3.0", "find": "^0.3.0",
@ -1726,27 +1725,6 @@
"ieee754": "^1.2.1" "ieee754": "^1.2.1"
} }
}, },
"node_modules/@blockworks-foundation/mango-client/node_modules/@solana/web3.js": {
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.21.0.tgz",
"integrity": "sha512-x1NXlF92tEjxuTxS0u4n9JV17UKk0Dn2L+qSWGvKOb4iWhzApDj6wicJsrGdSbGdxnZ7eciQ/SNn3zB4ydUllA==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"@solana/buffer-layout": "^3.0.0",
"bn.js": "^5.0.0",
"borsh": "^0.4.0",
"bs58": "^4.0.1",
"buffer": "6.0.1",
"crypto-hash": "^1.2.2",
"jayson": "^3.4.4",
"js-sha3": "^0.8.0",
"node-fetch": "^2.6.1",
"rpc-websockets": "^7.4.2",
"secp256k1": "^4.0.2",
"superstruct": "^0.14.2",
"tweetnacl": "^1.0.0"
}
},
"node_modules/@blockworks-foundation/mango-client/node_modules/ansi-styles": { "node_modules/@blockworks-foundation/mango-client/node_modules/ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@ -1849,11 +1827,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/@blockworks-foundation/mango-client/node_modules/superstruct": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz",
"integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ=="
},
"node_modules/@blockworks-foundation/mango-client/node_modules/wrap-ansi": { "node_modules/@blockworks-foundation/mango-client/node_modules/wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@ -4544,9 +4517,9 @@
"integrity": "sha512-WjR1hOeg+kki3ZIOjaf4b5WVcay1jaliKSYiEaB1XzwhMQZJxRdQRv0V31EKBYlxb4T7SK3hjfc/jxyU64BoSw==" "integrity": "sha512-WjR1hOeg+kki3ZIOjaf4b5WVcay1jaliKSYiEaB1XzwhMQZJxRdQRv0V31EKBYlxb4T7SK3hjfc/jxyU64BoSw=="
}, },
"node_modules/@project-serum/borsh": { "node_modules/@project-serum/borsh": {
"version": "0.2.2", "version": "0.2.5",
"resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.2.tgz", "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz",
"integrity": "sha512-Ms+aWmGVW6bWd3b0+MWwoaYig2QD0F90h0uhr7AzY3dpCb5e2S6RsRW02vFTfa085pY2VLB7nTZNbFECQ1liTg==", "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==",
"dependencies": { "dependencies": {
"bn.js": "^5.1.2", "bn.js": "^5.1.2",
"buffer-layout": "^1.2.0" "buffer-layout": "^1.2.0"
@ -9044,11 +9017,49 @@
} }
}, },
"node_modules/cross-fetch": { "node_modules/cross-fetch": {
"version": "3.1.4", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
"integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
"dependencies": { "dependencies": {
"node-fetch": "2.6.1" "node-fetch": "2.6.7"
}
},
"node_modules/cross-fetch/node_modules/node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/cross-fetch/node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"node_modules/cross-fetch/node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"node_modules/cross-fetch/node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
} }
}, },
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
@ -28311,18 +28322,19 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
}, },
"@blockworks-foundation/mango-client": { "@blockworks-foundation/mango-client": {
"version": "3.2.16", "version": "3.3.17",
"resolved": "https://registry.npmjs.org/@blockworks-foundation/mango-client/-/mango-client-3.2.16.tgz", "resolved": "https://registry.npmjs.org/@blockworks-foundation/mango-client/-/mango-client-3.3.17.tgz",
"integrity": "sha512-ZI3Tt/k77azt4iBrPiWsm9rS6EPEbGX+IsWKzCTCXLIfwOxpF09FarL+1YL/hBvoRkd8X/jAyQ1/KWpkb3zvUg==", "integrity": "sha512-d7QNaygWKa7qNjtUIbs3r7evN1qaiDlHmgt20RQ15iD8XmuYgpWy6ZLTYu2lhX1feoEqZKv++PEH+yYVHxZNWQ==",
"requires": { "requires": {
"@project-serum/anchor": "^0.16.2", "@project-serum/anchor": "^0.21.0",
"@project-serum/serum": "0.13.55", "@project-serum/serum": "0.13.55",
"@project-serum/sol-wallet-adapter": "^0.2.0", "@project-serum/sol-wallet-adapter": "^0.2.0",
"@solana/spl-token": "^0.1.6", "@solana/spl-token": "^0.1.6",
"@solana/web3.js": "1.21.0", "@solana/web3.js": "^1.31.0",
"big.js": "^6.1.1", "big.js": "^6.1.1",
"bn.js": "^5.2.0", "bn.js": "^5.2.0",
"buffer-layout": "^1.2.1", "buffer-layout": "^1.2.1",
"cross-fetch": "^3.1.5",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"yargs": "^17.0.1" "yargs": "^17.0.1"
}, },
@ -28336,17 +28348,18 @@
} }
}, },
"@project-serum/anchor": { "@project-serum/anchor": {
"version": "0.16.2", "version": "0.21.0",
"resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.16.2.tgz", "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.21.0.tgz",
"integrity": "sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q==", "integrity": "sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA==",
"requires": { "requires": {
"@project-serum/borsh": "^0.2.2", "@project-serum/borsh": "^0.2.4",
"@solana/web3.js": "^1.17.0", "@solana/web3.js": "^1.17.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"bn.js": "^5.1.2", "bn.js": "^5.1.2",
"bs58": "^4.0.1", "bs58": "^4.0.1",
"buffer-layout": "^1.2.0", "buffer-layout": "^1.2.2",
"camelcase": "^5.3.1", "camelcase": "^5.3.1",
"cross-fetch": "^3.1.5",
"crypto-hash": "^1.3.0", "crypto-hash": "^1.3.0",
"eventemitter3": "^4.0.7", "eventemitter3": "^4.0.7",
"find": "^0.3.0", "find": "^0.3.0",
@ -28424,27 +28437,6 @@
} }
} }
}, },
"@solana/web3.js": {
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.21.0.tgz",
"integrity": "sha512-x1NXlF92tEjxuTxS0u4n9JV17UKk0Dn2L+qSWGvKOb4iWhzApDj6wicJsrGdSbGdxnZ7eciQ/SNn3zB4ydUllA==",
"requires": {
"@babel/runtime": "^7.12.5",
"@solana/buffer-layout": "^3.0.0",
"bn.js": "^5.0.0",
"borsh": "^0.4.0",
"bs58": "^4.0.1",
"buffer": "6.0.1",
"crypto-hash": "^1.2.2",
"jayson": "^3.4.4",
"js-sha3": "^0.8.0",
"node-fetch": "^2.6.1",
"rpc-websockets": "^7.4.2",
"secp256k1": "^4.0.2",
"superstruct": "^0.14.2",
"tweetnacl": "^1.0.0"
}
},
"ansi-styles": { "ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@ -28519,11 +28511,6 @@
"ansi-regex": "^5.0.0" "ansi-regex": "^5.0.0"
} }
}, },
"superstruct": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz",
"integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ=="
},
"wrap-ansi": { "wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@ -30535,9 +30522,9 @@
} }
}, },
"@project-serum/borsh": { "@project-serum/borsh": {
"version": "0.2.2", "version": "0.2.5",
"resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.2.tgz", "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz",
"integrity": "sha512-Ms+aWmGVW6bWd3b0+MWwoaYig2QD0F90h0uhr7AzY3dpCb5e2S6RsRW02vFTfa085pY2VLB7nTZNbFECQ1liTg==", "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==",
"requires": { "requires": {
"bn.js": "^5.1.2", "bn.js": "^5.1.2",
"buffer-layout": "^1.2.0" "buffer-layout": "^1.2.0"
@ -34098,11 +34085,40 @@
} }
}, },
"cross-fetch": { "cross-fetch": {
"version": "3.1.4", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
"integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
"requires": { "requires": {
"node-fetch": "2.6.1" "node-fetch": "2.6.7"
},
"dependencies": {
"node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
}
} }
}, },
"cross-spawn": { "cross-spawn": {

View File

@ -21,9 +21,11 @@ import {
decodeCancelSpotOrder, decodeCancelSpotOrder,
decodeChangePerpMarketParams, decodeChangePerpMarketParams,
decodePlacePerpOrder, decodePlacePerpOrder,
decodePlacePerpOrder2,
decodePlaceSpotOrder, decodePlaceSpotOrder,
parseMangoInstructionTitle, parseMangoInstructionTitle,
} from "./mango/types"; } from "./mango/types";
import { PlacePerpOrder2DetailsCard } from "./mango/PlacePerpOrder2DetailsCard";
export function MangoDetailsCard(props: { export function MangoDetailsCard(props: {
ix: TransactionInstruction; ix: TransactionInstruction;
@ -99,6 +101,13 @@ export function MangoDetailsCard(props: {
{...props} {...props}
/> />
); );
case "PlacePerpOrder2":
return (
<PlacePerpOrder2DetailsCard
info={decodePlacePerpOrder2(ix)}
{...props}
/>
);
case "ConsumeEvents": case "ConsumeEvents":
return <ConsumeEventsDetailsCard {...props} />; return <ConsumeEventsDetailsCard {...props} />;
case "CancelPerpOrder": case "CancelPerpOrder":

View File

@ -0,0 +1,121 @@
import { SignatureResult, TransactionInstruction } from "@solana/web3.js";
import BN from "bn.js";
import { Address } from "components/common/Address";
import { useCluster } from "providers/cluster";
import { useEffect, useState } from "react";
import { InstructionCard } from "../InstructionCard";
import {
getPerpMarketFromInstruction,
getPerpMarketFromPerpMarketConfig,
OrderLotDetails,
PlacePerpOrder2,
} from "./types";
export function PlacePerpOrder2DetailsCard(props: {
ix: TransactionInstruction;
index: number;
result: SignatureResult;
info: PlacePerpOrder2;
innerCards?: JSX.Element[];
childIndex?: number;
}) {
const { ix, index, result, info, innerCards, childIndex } = props;
const mangoAccount = ix.keys[1];
const perpMarketAccountMeta = ix.keys[4];
const mangoPerpMarketConfig = getPerpMarketFromInstruction(
ix,
perpMarketAccountMeta
);
const cluster = useCluster();
const [orderLotDetails, setOrderLotDetails] =
useState<OrderLotDetails | null>(null);
useEffect(() => {
async function getOrderLotDetails() {
if (mangoPerpMarketConfig === undefined) {
return;
}
const mangoPerpMarket = await getPerpMarketFromPerpMarketConfig(
cluster.url,
mangoPerpMarketConfig
);
const maxBaseQuantity = mangoPerpMarket.baseLotsToNumber(
new BN(info.maxBaseQuantity.toString())
);
const limitPrice = mangoPerpMarket.priceLotsToNumber(
new BN(info.price.toString())
);
setOrderLotDetails({
price: limitPrice,
size: maxBaseQuantity,
} as OrderLotDetails);
}
getOrderLotDetails();
}, [cluster.url, info.maxBaseQuantity, info.price, mangoPerpMarketConfig]);
return (
<InstructionCard
ix={ix}
index={index}
result={result}
title="Mango Program: PlacePerpOrder2"
innerCards={innerCards}
childIndex={childIndex}
>
<tr>
<td>Mango account</td>
<td>
{" "}
<Address pubkey={mangoAccount.pubkey} alignRight link />
</td>
</tr>
{mangoPerpMarketConfig !== undefined && (
<tr>
<td>Perp market</td>
<td className="text-lg-end">{mangoPerpMarketConfig.name}</td>
</tr>
)}
<tr>
<td>Perp market address</td>
<td>
<Address pubkey={perpMarketAccountMeta.pubkey} alignRight link />
</td>
</tr>
{info.clientOrderId !== "0" && (
<tr>
<td>Client order Id</td>
<td className="text-lg-end">{info.clientOrderId}</td>
</tr>
)}
<tr>
<td>Order type</td>
<td className="text-lg-end">{info.orderType}</td>
</tr>
<tr>
<td>Side</td>
<td className="text-lg-end">{info.side}</td>
</tr>
{orderLotDetails !== null && (
<tr>
<td>price</td>
<td className="text-lg-end">{orderLotDetails?.price} USDC</td>
</tr>
)}
{orderLotDetails !== null && (
<tr>
<td>quantity</td>
<td className="text-lg-end">{orderLotDetails?.size}</td>
</tr>
)}
<tr>
<td>Reduce only</td>
<td className="text-lg-end">{info.reduceOnly}</td>
</tr>
<tr>
<td>Expiry timestamp</td>
<td className="text-lg-end">{info.expiryTimestamp}</td>
</tr>
</InstructionCard>
);
}

View File

@ -166,6 +166,33 @@ export const decodePlacePerpOrder = (
return placePerpOrder; return placePerpOrder;
}; };
export type PlacePerpOrder2 = {
price: number;
maxBaseQuantity: number;
clientOrderId: String;
side: String;
orderType: String;
reduceOnly: String;
expiryTimestamp: number;
};
export const decodePlacePerpOrder2 = (
ix: TransactionInstruction
): PlacePerpOrder2 => {
const decoded = MangoInstructionLayout.decode(ix.data, 0);
const placePerpOrder2: PlacePerpOrder2 = {
price: decoded.PlacePerpOrder2.price.toNumber(),
maxBaseQuantity: decoded.PlacePerpOrder2.maxBaseQuantity.toNumber(),
clientOrderId: decoded.PlacePerpOrder2.clientOrderId.toString(),
side: decoded.PlacePerpOrder2.side.toString(),
orderType: decoded.PlacePerpOrder2.orderType.toString(),
reduceOnly: decoded.PlacePerpOrder2.reduceOnly.toString(),
expiryTimestamp: decoded.PlacePerpOrder2.expiryTimestamp.toNumber(),
};
return placePerpOrder2;
};
export type CancelPerpOrder = { export type CancelPerpOrder = {
orderId: String; orderId: String;
invalidIdOk: String; invalidIdOk: String;