📘

solanaとserumの勉強 #1 -orderbookの中身見てみる-

2022/07/02に公開

solanaとserumの勉強をしていきたいと思います。
今回は、とりあえず、orderbookの中身を見るところまでやっていきたいと思います。

コード


import { Account, Connection, PublicKey } from '@solana/web3.js'
import { Market } from '@project-serum/serum'

(async () => {
  let connection = new Connection('https://api.mainnet-beta.solana.com/')
  // https://github.com/project-serum/serum-ts/blob/master/packages/serum/src/markets.json
  let marketAddress = new PublicKey('9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT')
  let programAddress = new PublicKey('9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin')
  let market = await Market.load(connection, marketAddress, {}, programAddress)
  
  // Fetching orderbooks
  let bids = await market.loadBids(connection)
  let asks = await market.loadAsks(connection)
  // L2 orderbook data
  for (let [price, size] of bids.getL2(40)) {
    console.log(price, size)
  }
  // Full orderbook data
  const gen = bids.items(true)
  let item = gen.next()
  while(!item.done) {
    console.log(item.value)
    item = gen.next()
  }

})()

気になった点

marketAddressとprogramAddress

  // https://github.com/project-serum/serum-ts/blob/master/packages/serum/src/markets.json
  let marketAddress = new PublicKey('9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT')
  let programAddress = new PublicKey('9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin')
  • depreceted: falseのものにすること(当たり前ですが...)

サンプルコードが動かない?

https://github.com/project-serum/serum-ts/blob/master/packages/serum/README.md
こちらのサンプルコードが動かなくてハマりました
(サンプルコードが動かないってことあるんですね...)

// Full orderbook data
for (let order of asks) {
  console.log(
    order.orderId,
    order.price,
    order.size,
    order.side, // 'buy' or 'sell'
  );
}

これで動くようになりました。

  // Full orderbook data
  const gen = bids.items(true)
  let item = gen.next()
  while(!item.done) {
    console.log(item.value)
    item = gen.next()
  }

item.valueの中はこんなものが表示されました。

{
  orderId: <BN: 1fffffffff96b3b7f>,
  clientId: <BN: 0>,
  openOrdersAddress: PublicKey {
    _bn: <BN: 3b57eaa1d0efaf77abb4cb854e6a437e5da9e2ae4f3d751eca247acf6f4e2243>
  },
  openOrdersSlot: 1,
  feeTier: 0,
  price: 0.001,
  priceLots: <BN: 1>,
  size: 0.1,
  sizeLots: <BN: 1>,
  side: 'buy'
}

Discussion