account.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { PublicKey } from '@solana/web3.js';
  2. import * as borsh from 'borsh';
  3. export class OfferAccount {
  4. id: bigint;
  5. maker: Uint8Array;
  6. token_mint_a: Uint8Array;
  7. token_mint_b: Uint8Array;
  8. token_b_wanted_amount: bigint;
  9. bump: number;
  10. constructor(offer: OfferRaw) {
  11. this.id = offer.id;
  12. this.maker = offer.maker;
  13. this.token_b_wanted_amount = offer.token_b_wanted_amount;
  14. this.token_mint_a = offer.token_mint_a;
  15. this.token_mint_b = offer.token_mint_b;
  16. this.bump = this.bump;
  17. }
  18. toBuffer() {
  19. return Buffer.from(borsh.serialize(OfferSchema, this));
  20. }
  21. static fromBuffer(buffer: Uint8Array) {
  22. return borsh.deserialize(OfferSchema, OfferAccount, Buffer.from(buffer));
  23. }
  24. toData(): Offer {
  25. return {
  26. id: this.id,
  27. maker: new PublicKey(this.maker),
  28. token_mint_a: new PublicKey(this.token_mint_a),
  29. token_mint_b: new PublicKey(this.token_mint_b),
  30. token_b_wanted_amount: this.token_b_wanted_amount,
  31. bump: this.bump,
  32. };
  33. }
  34. }
  35. const OfferSchema = new Map([
  36. [
  37. OfferAccount,
  38. {
  39. kind: 'struct',
  40. fields: [
  41. ['id', 'u64'],
  42. ['maker', [32]],
  43. ['token_mint_a', [32]],
  44. ['token_mint_b', [32]],
  45. ['token_b_wanted_amount', 'u64'],
  46. ['bump', 'u8'],
  47. ],
  48. },
  49. ],
  50. ]);
  51. type OfferRaw = {
  52. id: bigint;
  53. maker: Uint8Array;
  54. token_mint_a: Uint8Array;
  55. token_mint_b: Uint8Array;
  56. token_b_wanted_amount: bigint;
  57. bump: number;
  58. };
  59. type Offer = {
  60. id: bigint;
  61. maker: PublicKey;
  62. token_mint_a: PublicKey;
  63. token_mint_b: PublicKey;
  64. token_b_wanted_amount: bigint;
  65. bump: number;
  66. };