Solana Geyser gRPC ตัวกรอง - ตัวกรอง

Solana Stream SDK
-. Solana Wiref (SDK) ถูกจัดให้เป็นซอฟต์แวร์โอเพนซอร์ส สําหรับรายละเอียดเพิ่มเติม โปรดเยี่ยมชม GitHub ห้องเก็บของด้านล่าง

ภาพรวม gRPC ตัวกรอง

Solana Geyser gRPC ใช้ตัวกรองเพื่อดึงข้อมูลที่ต้องใช้ประสิทธิภาพเท่านั้น เช่น บัญชี, โปรแกรม, ธุรกรรม, สล็อต, และบล็อก
ข้างล่าง เราให้ TypeScript ตัวอย่างที่ใช้ Solana Wall SDK อธิบายถึงบทบาทเฉพาะของแต่ละตัวกรองได้อย่างชัดเจน โครงสร้างและความหมายของตัวกรองนั้นเหมือนกันเมื่อใช้ Rust.

บทบาท และ ตัว อย่าง ของ แต่ ละ กรอง

สมัครสมาชิกไปยังบัญชีผู้ใช้

การสมัครสมาชิกสําหรับการปรับปรุงข้อมูลเวลาจริง สําหรับบัญชีผู้ใช้ที่ระบุไว้ โดยตัวอย่างต่อไปนี้จะสมัครเข้าบัญชีของ SOL-USDC แบบ OpenBook ที่ระดับการตกลง:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: { slots: {} },
  accounts: {
    'wsol/usdc': {
      account: ['8BnEgHoWFysVcuFFX7QztDmzuH8r5ZFvyP3sYwn1XTh6'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.CONFIRMED,
}
  • "wsol/usdc" เป็นป้ายที่นิยามเป็นลูกค้า
  • การ บริจาค แบบ มี เงื่อนไข

สมัครสมาชิกไปยังบัญชีผู้ใช้ด้วย account_data_slice

ตัวอย่างนี้แสดงให้เห็นการดึงข้อมูลเฉพาะส่วนเฉพาะของข้อมูลบัญชีผู้ใช้เท่านั้น แทนที่จะดึงข้อมูลทั้งหมด (165 ไบต์) ของบัญชีตั๋ว USDC มันดึง 40 มาโดยเริ่มจากออฟเซ็ต 32 ช่วงนี้รวมข้อมูล เช่น เจ้าของร้านและโคมไฟ
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {
    usdc: {
      owner: ['TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'],
      filters: [
        {
          tokenAccountState: true,
        },
        {
          memcmp: {
            offset: 0,
            data: {
              base58: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
            },
          },
        },
      ],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
  commitment: CommitmentLevel.CONFIRMED,
  accountsDataSlice: [{ offset: 32, length: 40 }],
}

บอกรับข้อมูลโปรแกรม

ตัว อย่าง นี้ แสดง ให้ เห็น การ จัด การ เรื่อง การ ลง ทุน เพื่อ ปรับ ปรุง การ ลง ทุน ที่ เกี่ยว ข้อง กับ โปรแกรม ใด โปรแกรม หนึ่ง.
ด้านล่างเราสมัครบัญชีปรับปรุงสําหรับบัญชีที่เป็นเจ้าของโดยโปรแกรม Soleld ที่ Processed ขอบเขตการผูกมัด
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    solend: {
      owner: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}
  • "solend" เป็นป้ายที่กําหนดเองที่สามารถตั้งค่าได้อย่างอิสระโดยไคลเอนต์
  • เพื่อสมัครเข้าใช้หลายโปรแกรม โปรดอ้างอิงไปยังส่วนถัดไปที่มีชื่อ "กําหนดให้หลายโปรแกรม"

การสมัครสมาชิกในหลายโปรแกรม

ตัว อย่าง นี้ แสดง ให้ เห็น วิธี ที่ จะ บอก รับ ความ รู้ ใหม่ ๆ เกี่ยว กับ บัญชี ซึ่ง เกี่ยว ข้อง กับ หลาย โปรแกรม ใน เวลา เดียว กัน.
ตัว อย่าง ข้าง ล่าง นี้ แสดง ว่า มี การ ปรับ เปลี่ยน บัญชี โดย ทั้ง โซ เล็ด และ เซ เรียม.
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    programs: {
      owner: [
        'So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo',
        '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
      ],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}
หากคุณชอบกําหนดป้ายแต่ละรายการ ให้ใช้วิธีการต่อไปนี้:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {
    solend: {
      owner: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
    serum: {
      owner: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
    },
  },
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

การสมัครสมาชิกทั้งหมด ที่ไม่ได้ดําเนินการดําเนินการและไม่มีการทําธุรกรรม

ตัวอย่างนี้แสดงถึงการแบ่งส่วนย่อยการซื้อขายทั้งหมดที่ Finalized ระดับความผูกพัน, การยกเลิกการซื้อขายเสียงและล้มเหลว การต่อรอง
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    alltxs: {
      vote: false,
      failed: false,
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.FINALIZED,
}
  • vote: false ไม่นับคะแนนเสียง
  • failed: false การตกลงตกลงการตกลงตกลง
  • หากมีรายการว่างอยู่ การดําเนินการทั้งหมดก็จะถูกรับคืน
  • เมื่อ ระบุ ทุ่ง นา หลาย แห่ง พวก เขา จะ ทํา งาน โดย มี เงื่อนไข และ เงื่อนไข.

การสมัครสมาชิกที่ไม่ได้ใช้ voate application อ้างถึงบัญชีผู้ใช้

ตัว อย่าง นี้ แสดง ให้ เห็น การ จัด การ เรื่อง การ ซื้อ ขาย โดย เฉพาะ เกี่ยว ข้อง กับ บัญชี ราย ชื่อ แต่ ไม่ ได้ ทํา การ ลง คะแนน เสียง.
ตัวอย่างด้านล่างนี้ การสมัครสมาชิกไม่ผ่านรายการที่อ้างถึงบัญชีที่เกี่ยวข้องกับโครงการเซรุ่ม
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      vote: false,
      accountInclude: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

การสมัครสมาชิกทําการยกเลิกบัญชีผู้ใช้

ตัว อย่าง นี้ แสดง ให้ เห็น การ ให้ เงิน ทดแทน เพื่อ ลด การ ซื้อ ของ ที่ เกี่ยว ข้อง กับ บัญชี ที่ เจาะจง.
ตัวอย่างด้านล่างนี้ การเรียกตัวการซื้อขายได้ยกเลิกบัญชีใด ๆ ที่เจ้าของคือ โปรแกรมเซรุ่มและโตเค็ก
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      accountExclude: [
        '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin',
        'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
      ],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

สมัครสมาชิกในการทําการซื้อขายที่อ้างถึงบัญชีผู้ใช้และยกเลิกการรวมบัญชีผู้ใช้บางบัญชี

ตัว อย่าง นี้ แสดง ให้ เห็น การ จัด การ เรื่อง การ ค้า บาง เรื่อง ขณะ ที่ การ ตัด บัญชี อื่น ๆ ที่ ระบุ ไว้ ออก ไป อย่าง ชัดเจน.
ตัวอย่างด้านล่างนี้ การสมัครสมาชิกการซื้อขายที่อ้างถึงบัญชีของเซรุ่ม แต่ยกเว้นบัญชีที่ระบุไว้:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    slots: {},
  },
  accounts: {},
  transactions: {
    serum: {
      accountInclude: ['9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin'],
      accountExclude: ['9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT'],
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

การสมัครสมาชิกเป็นลายเซ็นการค้าขาย

ตัวอย่างนี้แสดงถึงการแบ่งส่วนย่อยเพื่อปรับเวลาจริง สําหรับลายเซ็นการทําธุรกรรมเฉพาะ, จนกว่ามันจะถึง Confirmed or Finalized รัฐ
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {
    sign: {
      signature:
        '5rp2hL9b6kexex11Mugfs3vfU9GhieKruj4CkFFSnu52WLxiGn4VcLLwsB62XURhMmT1j4CZiXT6FFtYbXsLq2Zs',
    },
  },
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

บอกรับข้อมูลไปยังช่อง

ตัวอย่างนี้ จะแสดงถึงการอนุญาตการแจ้งรับรายการช่องที่เข้ามา โดยจะไม่ต้องการรายละเอียดเพิ่มเติมนอกจากการกําหนดชื่อป้ายเอง:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {
    incoming_slots: {},
  },
  accounts: {},
  transactions: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

บอกรับจดหมายเวียน

การสมัครสมาชิกเป็นการปรับปรุงบล็อกที่ถูกสร้างมาตามเวลาจริง โดยปริยายแล้ว การรับรายการทั้งหมดจะถูกเรียกภายในบล็อคทั้งหมด:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {},
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

เพื่อยกเว้นการซื้อและรับข้อมูลบัญชีที่ปรับปรุงแล้วเท่านั้น:

typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {
      includeTransactions: false,
      includeAccounts: true,
    },
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

เพื่อรับข้อมูลการขอซื้อ/ accounts ที่เกี่ยวข้องกับบัญชีผู้ใช้ที่ระบุไว้เท่านั้น:

typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {
    blocks: {
      accountInclude: ['So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo'],
    },
  },
  blocksMeta: {},
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

บอกรับข้อมูลการบล็อคข้อมูลกํากับภาพ

การแจ้งรับเฉพาะการบล็อคข้อมูลการแจ้งเตือนเมื่อมีการดําเนินการในบล็อคเท่านั้น จึงไม่มีการรวมข้อมูลการทําธุรกรรมที่ละเอียดไว้
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

const request = {
  slots: {},
  accounts: {},
  transactions: {},
  blocks: {},
  blocksMeta: {
    blockmetadata: {},
  },
  accountsDataSlice: [],
  commitment: CommitmentLevel.PROCESSED,
}

ระดับความผูกพันในการจัดการ

-. Solana Geyser gRPC พาธปริยายไปยัง Processed ขอบเขตการผูกมัด
คุณสามารถกําหนดระดับความผูกพันธ์ที่สูงกว่าได้ เช่น Confirmed or Finalized. ในกรณีนี้, Geyser guffers เก็บข้อมูลและส่งการแจ้งเตือนเมื่อถึงระดับสัญญาที่ระบุไว้แล้ว
สําหรับผลสูงสุด ขอแนะนําให้จัดการจัดการ เรื่องสัญญาในฝั่งลูกค้า
นี่เป็นวิธีระบุระดับสัญญา:
typescript
import { CommitmentLevel } from '@validators-dao/solana-stream-sdk'

enum CommitmentLevel {
  PROCESSED = 0,
  CONFIRMED = 1,
  FINALIZED = 2,
}
  • PROCESSED ข้อมูลการประมวลผลหลังการประมวลผล การดึงข้อมูลอย่างรวดเร็ว แต่ยังไม่ได้รับการยืนยัน **
  • CONFIRMED ข้อมูลยืนยันโดยกลุ่ม ทําให้เกิดความมั่นใจมากขึ้น
  • FINALIZED ข้อมูลสุดท้ายโดยที่ไม่มีความเสี่ยงในการจัดการใหม่ **

ผล ประโยชน์ ของ การ ทํา งาน Processed

ผลประโยชน์หลักของ Processed ระดับการตกลงคือ การทําการขอข้อมูลการทําธุรกรรมทันที เปิดใช้งานกระบวนการประมวลผลแบบเร็วของไคลเอนต์ได้ Confirmed or Finalizedตอบสนองอย่างรวดเร็ว

จะจัดการยังไง Confirmed ถึง Finalized

เมื่อใช้ Confirmed or Finalized ระดับ (แสดงการกระทําหรือการปรับปรุงบัญชีผู้ใช้) ควรถูกละเว้นไว้ต่อช่อง
เหตุการณ์ที่เกิดขึ้นในช่องโดยช่อง, การสมัครสมาชิกการแจ้งวรรค และปล่อยเหตุการณ์จากบัฟเฟอร์ เมื่อช่องระบุถึงข้อผูกมัดที่ต้องการ (ต้องการ)Confirmed or Finalized).
เหตุการณ์ต่าง ๆ จะเริ่มรับช่วงก่อนที่จะมีการเ คลื่อมเข้า Confirmed or Finalized.

ความสามารถพิเศษเกี่ยวกับ Finalized

ครบกําหนด Solana Gayser กําหนดไว้ ไม่รวมรายการที่แสดงการแจ้งเตือนล่าสุดทั้งหมด ซึ่งเมื่อได้รับคําเตือนล่าสุดสําหรับช่อง คุณต้องทําการรักษาช่องว่างของบรรพบุรุษทั้งหมดว่าสมบูรณ์แล้ว แม้ว่าจะมีการแจ้งเตือนอย่างชัดเจนก็ตาม
โดยเฉพาะเมื่อได้รับคําเตือนสุดท้าย การตอบโต้กลับ ปฏิบัติต่อบรรพบุรุษทุกคนเป็นการสิ้นสุด