Skip to content

Commit c88a860

Browse files
committed
Add crank script
1 parent c8c6eb0 commit c88a860

3 files changed

Lines changed: 139 additions & 1 deletion

File tree

Anchor.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ clob = "yarn run tsc scripts/clob.ts --esModuleInterop --resolveJsonModule && no
2626
autocrat_v0 = "yarn run ts-node scripts/autocratV0.ts"
2727
airdrop = "yarn run ts-node scripts/airdrop.ts"
2828
place_order = "yarn run ts-node scripts/placeOrder.ts"
29+
crank = "yarn run ts-node scripts/crank.ts"
2930
test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.ts"
3031

3132
[test]

scripts/crank.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import "./main";
2+
import { autocratProgram, openbook, openbookTwap } from "./main";
3+
import * as anchor from "@coral-xyz/anchor";
4+
const { PublicKey, Keypair, SystemProgram } = anchor.web3;
5+
const { BN, Program } = anchor;
6+
const {execSync} = require('child_process');
7+
8+
import {
9+
OpenBookV2Client,
10+
PlaceOrderArgs,
11+
Side,
12+
OrderType,
13+
SelfTradeBehavior,
14+
} from "@openbook-dex/openbook-v2";
15+
16+
const twapMarketList = ["7TXCqw4iJ8mD9vMAkjEiDTuZLETW9DuBM48J2kPkoVoR", "AwMimsGw2ShWXTeC6JkMguGoT73vky44Z1DaP1fpBxQY"];
17+
18+
let twapMarketPks = twapMarketList.map(twapMarket => new PublicKey(twapMarket));
19+
20+
async function crank(twapMarkets: anchor.web3.PublicKey[]) {
21+
let markets = [];
22+
for (let twapMarket of twapMarkets) {
23+
markets.push((await openbookTwap.account.twapMarket.fetch(twapMarket)).market);
24+
}
25+
26+
let storedMarkets = [];
27+
for (let market of markets) {
28+
await storedMarkets.push(openbook.getMarketAccount(market));
29+
}
30+
31+
while (true) {
32+
for (let i in markets) {
33+
let accountsToConsume = await openbook.getAccountsToConsume(storedMarkets[i]);
34+
console.log(accountsToConsume);
35+
36+
if (accountsToConsume.length > 0) {
37+
await openbook.consumeEvents(markets[i], storedMarkets[i], new BN(5), accountsToConsume);
38+
}
39+
40+
execSync('sleep 10');
41+
}
42+
}
43+
}
44+
45+
crank(twapMarketPks);

scripts/placeOrder.ts

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,106 @@
11
import "./main";
22
import { autocratProgram } from "./main";
33

4+
import {
5+
OpenBookV2Client,
6+
PlaceOrderArgs,
7+
Side,
8+
OrderType,
9+
SelfTradeBehavior,
10+
} from "@openbook-dex/openbook-v2";
11+
412
// Put your own proposal number here
513
const PROPOSAL_NUMBER = 1;
14+
// If false, it will do the fail market obviously.
15+
const PASS_MARKET = true;
616

717
async function placeOrder() {
818
let proposals = await autocratProgram.account.proposal.all();
919

1020
let proposal = proposals.filter((proposal) => proposal.account.number == PROPOSAL_NUMBER)[0].account;
11-
console.log(proposal);
21+
22+
let twapMarket = PASS_MARKET ? proposal.openbookTwapPassMarket : proposal.openbookTwapFailMarket;
23+
let market = PASS_MARKET ? proposal.openbookPassMarket : proposal.openbookFailMarket;
24+
25+
// let market = (await openbookTwap.account.twapMarket.fetch(twapMarket)).market;
26+
27+
let buyArgs: PlaceOrderArgs = {
28+
side: Side.Bid,
29+
priceLots: new BN(9_000), // 1 USDC for 1 META
30+
maxBaseLots: new BN(10),
31+
maxQuoteLotsIncludingFees: new BN(10 * 1000_000), // 10 USDC
32+
clientOrderId: new BN(1),
33+
orderType: OrderType.Limit,
34+
expiryTimestamp: new BN(0),
35+
selfTradeBehavior: SelfTradeBehavior.DecrementTake,
36+
limit: 255,
37+
};
38+
39+
let sellArgs: PlaceOrderArgs = {
40+
side: Side.Ask,
41+
priceLots: new BN(12_000), // 1.2 USDC for 1 META
42+
maxBaseLots: new BN(10),
43+
maxQuoteLotsIncludingFees: new BN(10 * 12_000),
44+
clientOrderId: new BN(2),
45+
orderType: OrderType.Limit,
46+
expiryTimestamp: new BN(0),
47+
selfTradeBehavior: SelfTradeBehavior.DecrementTake,
48+
limit: 255,
49+
};
50+
51+
const storedMarket = await openbook.getMarketAccount(market);
52+
let openOrdersAccount = new anchor.web3.PublicKey("CxDQ5RSYebF6mRLDrXYn1An7bawe6S3iyaU5rZBjz4Xs");
53+
// let openOrdersAccount = await openbook.createOpenOrders(
54+
// payer,
55+
// market,
56+
// new BN(1),
57+
// "oo"
58+
// );
59+
// console.log(openOrdersAccount);
60+
// let openOrdersAccount = await openbook.createOpenOrders(market, new BN(4), "oo2");
61+
62+
const userBaseAccount = await token.getOrCreateAssociatedTokenAccount(
63+
provider.connection,
64+
payer,
65+
storedMarket.baseMint,
66+
payer.publicKey
67+
);
68+
const userQuoteAccount = await token.getOrCreateAssociatedTokenAccount(
69+
provider.connection,
70+
payer,
71+
storedMarket.quoteMint,
72+
payer.publicKey
73+
);
74+
75+
await openbookTwap.methods
76+
.placeOrder(buyArgs)
77+
.accounts({
78+
asks: storedMarket.asks,
79+
bids: storedMarket.bids,
80+
marketVault: storedMarket.marketQuoteVault,
81+
eventHeap: storedMarket.eventHeap,
82+
market,
83+
openOrdersAccount,
84+
userTokenAccount: userQuoteAccount.address,
85+
twapMarket,
86+
openbookProgram: OPENBOOK_PROGRAM_ID,
87+
})
88+
.rpc();
89+
90+
await openbookTwap.methods
91+
.placeOrder(sellArgs)
92+
.accounts({
93+
asks: storedMarket.asks,
94+
bids: storedMarket.bids,
95+
marketVault: storedMarket.marketBaseVault,
96+
eventHeap: storedMarket.eventHeap,
97+
market,
98+
openOrdersAccount,
99+
userTokenAccount: userBaseAccount.address,
100+
twapMarket,
101+
openbookProgram: OPENBOOK_PROGRAM_ID,
102+
})
103+
.rpc();
12104
}
13105

14106
placeOrder();

0 commit comments

Comments
 (0)