Solana Geyser gRPC - फ़िल्टर

Solana Stream SDK
The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The Solana स्ट्रीम SDK को ओपन सोर्स सॉफ्टवेयर के रूप में प्रदान किया गया है। अधिक विवरण के लिए, कृपया जाएं। GitHub नीचे की स्थिति

अवलोकन gRPC फ़िल्टर

Solana Geyser gRPC फिल्टर का उपयोग कुशलतापूर्वक केवल उन डेटा को प्राप्त करने के लिए किया जाता है जो आप विशिष्ट खातों, प्रोग्रामों, लेनदेन, स्लॉट्स और ब्लॉकों जैसे होते हैं।
नीचे हम प्रदान करते हैं TypeScript उदाहरण Solana 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" एक ग्राहक परिभाषित लेबल है।
  • खातों, कार्यक्रमों, ब्लॉकों और स्लॉट के लिए एकाधिक फ़िल्टर को एक एकल JSON अनुरोध में जोड़ा जा सकता है।

साथ में एक खाता सदस्यता लें account_data_slice

यह उदाहरण केवल खाता डेटा का एक विशिष्ट भाग को प्राप्त करने का प्रदर्शन करता है। इसके बजाय एक USDC टोकन खाते के पूरे डेटा (165 बाइट्स) को प्राप्त करने के बजाय, यह 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 }],
}

एक कार्यक्रम के लिए सदस्यता लें

यह उदाहरण एक विशिष्ट कार्यक्रम से जुड़े खाता अद्यतनों की सदस्यता प्रदर्शित करता है।
नीचे, हम सोलेंड कार्यक्रम के स्वामित्व वाले खातों के लिए खाता अद्यतन की सदस्यता लेते हैं। 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 असफल लेनदेन को बाहर कर देता है।
  • यदि फ़ील्ड खाली छोड़ दी जाती हैं, तो सभी लेनदेन को पुनः प्राप्त किया जाता है।
  • जब कई क्षेत्रों को निर्दिष्ट किया जाता है, तो वे एक और स्थिति के साथ काम करते हैं।

गैर-वोट लेनदेन की सदस्यता लें, जिसमें एक खाता शामिल है

यह उदाहरण एक विशिष्ट खाते से जुड़े लेनदेन की सदस्यता प्रदर्शित करता है लेकिन वोट लेनदेन को छोड़कर।
नीचे दिए गए उदाहरण से सीरम प्रोग्राम से जुड़े खातों का उल्लेख करने वाले गैर-वोट लेनदेन की सदस्यता लेते हैं।
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,
}

केवल विशिष्ट खातों को शामिल करने वाले लेनदेन/लेखाओं को पुनर्प्राप्त करने के लिए:

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,
}

प्रतिबद्धता के स्तर का प्रबंधन

The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The The Solana Geyser gRPC धारा डिफ़ॉल्ट करने के लिए Processed प्रतिबद्धता स्तर।
आप उच्च प्रतिबद्धता स्तर जैसे कि निर्दिष्ट कर सकते हैं Confirmed or Finalizedइन मामलों में, गीजर डेटा को बफर करता है और निर्दिष्ट प्रतिबद्धता स्तर तक पहुंचने के बाद अधिसूचना भेजता है।
अधिकतम प्रदर्शन के लिए, ग्राहक पक्ष पर प्रतिबद्धता-स्तर प्रबंधन को संभालने की सिफारिश की जाती है।
यहाँ प्रतिबद्धता के स्तर को निर्दिष्ट करने का तरीका है:
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 गीजर विनिर्देश, सभी स्लॉट्स को स्पष्ट रूप से अंतिम रूप से अधिसूचना नहीं मिलती है। इसलिए, जब आपको स्लॉट के लिए अंतिम रूप से अधिसूचना प्राप्त होती है, तो आपको सभी पूर्वज स्लॉट्स को अंतिम रूप से अंतिम रूप से इलाज करना चाहिए, भले ही कोई अधिसूचना स्पष्ट रूप से प्राप्त न हो।
विशेष रूप से, अंतिम रूप से अधिसूचना प्राप्त करने पर, पूर्ववर्ती रूप से सभी पूर्वज स्लॉट्स को अंतिम रूप देने के रूप में मानते हैं।