diff --git a/openbook/src/main/java/com/mmorrell/openbook/manager/OpenBookManager.java b/openbook/src/main/java/com/mmorrell/openbook/manager/OpenBookManager.java index 54fe3c7..6d9d731 100644 --- a/openbook/src/main/java/com/mmorrell/openbook/manager/OpenBookManager.java +++ b/openbook/src/main/java/com/mmorrell/openbook/manager/OpenBookManager.java @@ -5,6 +5,7 @@ import com.mmorrell.openbook.model.LeafNode; import com.mmorrell.openbook.model.OpenBookEventHeap; import com.mmorrell.openbook.model.OpenBookMarket; +import com.mmorrell.openbook.model.OpenBookOpenOrdersAccount; import com.mmorrell.openbook.model.OpenBookOrder; import com.mmorrell.openbook.program.OpenbookProgram; import lombok.extern.slf4j.Slf4j; @@ -124,4 +125,18 @@ public Optional getEventHeap(PublicKey eventHeap) { } + public Optional getOpenOrdersAccount(PublicKey ooa) { + try { + OpenBookOpenOrdersAccount openBookOoa = OpenBookOpenOrdersAccount.readOpenBookOpenOrdersAccount( + client.getApi() + .getAccountInfo(ooa, Map.of("commitment", Commitment.PROCESSED)) + .getDecodedData() + ); + + return Optional.of(openBookOoa); + } catch (RpcException e) { + log.error("Error getting OOA: {}", e.getMessage()); + return Optional.empty(); + } + } } diff --git a/openbook/src/main/java/com/mmorrell/openbook/model/OpenBookOpenOrdersAccount.java b/openbook/src/main/java/com/mmorrell/openbook/model/OpenBookOpenOrdersAccount.java new file mode 100644 index 0000000..44ce724 --- /dev/null +++ b/openbook/src/main/java/com/mmorrell/openbook/model/OpenBookOpenOrdersAccount.java @@ -0,0 +1,32 @@ +package com.mmorrell.openbook.model; + +import lombok.Builder; +import lombok.Data; +import org.p2p.solanaj.core.PublicKey; +import org.p2p.solanaj.utils.ByteUtils; + +@Data +@Builder +public class OpenBookOpenOrdersAccount { + + private PublicKey owner; + private PublicKey market; + private String name; // 32 bytes + private PublicKey delegate; + private int accountNum; + private byte bump; + // 3 bytes of padding + private byte[] padding; + + // position x 1 DTO TBD + // openOrders x 24 DTO TBD + + public static OpenBookOpenOrdersAccount readOpenBookOpenOrdersAccount(byte[] data) { + return OpenBookOpenOrdersAccount.builder() + .owner(PublicKey.readPubkey(data, 8)) + .market(PublicKey.readPubkey(data, 40)) + .name(new String(ByteUtils.readBytes(data, 72, 32))) + .build(); + } + +} diff --git a/openbook/src/test/java/OpenBookTest.java b/openbook/src/test/java/OpenBookTest.java index f3885f9..03149e5 100644 --- a/openbook/src/test/java/OpenBookTest.java +++ b/openbook/src/test/java/OpenBookTest.java @@ -4,8 +4,8 @@ import com.mmorrell.openbook.model.LeafNode; import com.mmorrell.openbook.model.NodeTag; import com.mmorrell.openbook.model.OpenBookEventHeap; -import com.mmorrell.openbook.model.OpenBookFillEvent; import com.mmorrell.openbook.model.OpenBookMarket; +import com.mmorrell.openbook.model.OpenBookOpenOrdersAccount; import com.mmorrell.openbook.program.OpenbookProgram; import lombok.extern.slf4j.Slf4j; import org.bitcoinj.core.Base58; @@ -22,7 +22,9 @@ import java.util.List; import java.util.Optional; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; @Slf4j public class OpenBookTest { @@ -113,4 +115,18 @@ public void openBookEventHeapTest(){ log.info("Fill: {}", openBookFillEvent.toString()); }); } + + @Test + public void openBookOpenOrdersAccountTest() throws RpcException, IOException { + Optional openBookOpenOrdersAccount = openBookManager.getOpenOrdersAccount( + new PublicKey("G1hKFxyM3qNCd1nnjnuvydw6VjCowVp5Jm6w1mwyWH4r") + ); + assertTrue(openBookOpenOrdersAccount.isPresent()); + OpenBookOpenOrdersAccount account = openBookOpenOrdersAccount.get(); + assertEquals(new PublicKey("7uixr2n3aawRYFKu5L6Wjwf37Fe6Twh6Ns3upAPq9H7k"), account.getOwner()); + + byte[] data = client.getApi().getAccountInfo(new PublicKey("G1hKFxyM3qNCd1nnjnuvydw6VjCowVp5Jm6w1mwyWH4r")) + .getDecodedData(); + Files.write(data, new File("ooa.bin")); + } } diff --git a/pom.xml b/pom.xml index f9f4a1e..8b84c1a 100644 --- a/pom.xml +++ b/pom.xml @@ -25,8 +25,6 @@ Michael Morrell michael@mmorrell.com - Openserum - https://openserum.io/