Indeksointi

RPC-metodit kuten getSignaturesForAddress ja getTransaction toimivat vähäiseen varmistukseen, mutta tuotannon maksujärjestelmät tarvitsevat vahvemman infrastruktuurin. Tämä opas kattaa keskeiset työkalut ja mallit reaaliaikaiseen transaktioiden suoratoistoon, historiallisen datan käyttöön ja instruction-tason jäsentämiseen.

Miksi indeksointi on tärkeää

Tavallisella RPC:llä on rajoituksia maksujen käsittelyssä mittakaavassa:

  • Nopeusrajoitukset: Julkisilla ja jopa maksullisilla RPC-päätepisteillä on kyselyrajoituksia
  • Ei pysyvyyttä: RPC antaa vain nykyisen tilan, ei historiallista analytiikkaa
  • Pollauksen ylikuormitus: Toistuva getSignaturesForAddress -kutsujen tekeminen on tehotonta
  • Karkea tarkkuus: Pre/post-saldot eivät paljasta yksittäisiä siirtoja monimutkaisissa transaktioissa

Indeksointiratkaisut ratkaisevat nämä ottamalla lohkoketjun datan vastaan lähteestä ja tarjoamalla sen tarkoitukseen rakennettujen API:en kautta.

Raaka vs. jäsennetty transaktiodata

Ennen indeksointitavan valintaa, ymmärrä mitä Solana-transaktiot sisältävät. Raaka transaktiodata käyttää kompaktia binäärikoodausta—tilejä viitataaan indekseillä, ja instruction data näkyy läpinäkymättöminä Base58-koodattuina tavuina:

// Raw: Requires manual decoding
{ "programIdIndex": 6, "accounts": [2, 3, 4], "data": "3DfbZhE3qCnV" }
// Parsed: Ready for business logic
{
"type": "TRANSFER",
"tokenTransfers": [{
"fromUserAccount": "8PLd...9Nt8w3",
"toUserAccount": "7GLg...k487Ma",
"tokenAmount": 100.50,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC
}]
}

Jäsentäminen on välttämätöntä maksujärjestelmille—tarvitset desimaalitarkennetut määrät, ratkaistut lompakkoosoitteet ja poimitut memo-kentät.

Yellowstone gRPC

Geyser on Solanan plugin-rajapinta reaaliaikaisen tilin ja transaktiotiedon suoratoistoon suoraan validaattoreilta. Pollauksen sijaan tilaat virran, joka työntää päivityksiä niiden käsittelyn yhteydessä—tarjoten alle 100ms viiveen verrattuna ~200-400ms WebSocket-tilauksiin. Yellowstone gRPC on yksi laajimmin käytetyistä Geyser plugin-rajapinnan toteutuksista. Yellowstone on reaaliaikainen suoratoisto-ratkaisu:

  • Tilin päivityksille
  • Transaktioille
  • Merkinnöille
  • Lohkoilmoituksille
  • Slot-ilmoituksille

Yellowstonen käyttämiseen tarvitset gRPC-päätepisteen RPC-palveluntarjoajalta. Vaihtoehtoja ovat muun muassa:

use yellowstone_grpc_client::GeyserGrpcClient;
use yellowstone_grpc_proto::prelude::*;
let mut client = GeyserGrpcClient::build_from_shared("https://grpc-endpoint:10000")?
.x_token(Some("YOUR_TOKEN".to_string()))?
.connect()
.await?;
let (mut tx, mut rx) = client.subscribe().await?;
let mut filter = HashMap::new();
filter.insert("payments".to_string(), SubscribeRequestFilterTransactions {
account_include: vec!["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".to_string()],
vote: Some(false),
failed: Some(false),
..Default::default()
});
tx.send(SubscribeRequest {
transactions: filter,
commitment: Some(CommitmentLevel::Confirmed as i32),
..Default::default()
}).await?;
while let Some(msg) = rx.next().await {
if let Some(UpdateOneof::Transaction(tx)) = msg?.update_oneof {
// Raw protobuf data - requires parsing
println!("Transaction: {:?}", tx.transaction);
}
}

Yellowstone palauttaa raakaa Protocol Buffer -dataa, ei JSON-muotoista dataa. Sinun täytyy dekoodata binäärinen instruction data käyttämällä ohjelman IDL:iä tai jäsennykseen tarkoitettuja kirjastoja. Tutustutaan joihinkin vaihtoehtoihin Yellowstone-datan jäsentämiseen.

Resurssit:

Carbon

Carbon on Rust-kehys tuotantotason indeksointien rakentamiseen Yellowstone gRPC:n päälle. Sen pipeline- arkkitehtuuri yhdistää datalähteet dekoodereihin ja mukautettuihin prosessoreihin:

use carbon_core::pipeline::Pipeline;
Pipeline::builder()
.datasource(yellowstone_grpc_source)
.instruction(TokenProgramDecoder, PaymentProcessor)
.metrics(Arc::new(PrometheusMetrics::new()))
.build()?
.run()
.await?;

Carbon sisältää yli 40 valmiiksi rakennettua decoderia suosituille ohjelmille. Maksujärjestelmissä Token Program -dekooderi käsittelee kaikki siirtovaihtoehdot, kun taas prosessorisi toteuttaa liiketoimintalogiikan:

#[async_trait]
impl Processor for PaymentProcessor {
type InputType = (InstructionMetadata, DecodedInstruction<TokenInstruction>);
async fn process(
&mut self,
(meta, ix): Self::InputType,
_metrics: Arc<MetricsCollection>,
) -> CarbonResult<()> {
if let TokenInstruction::Transfer { amount } = ix.data {
let accounts = Transfer::arrange_accounts(&ix.accounts)?;
if self.watched_wallets.contains(&accounts.destination) {
notify_payment(meta.signature, accounts.destination, amount).await;
}
}
Ok(())
}
}

Resurssit:

Vixen

Yellowstone Vixen on avoimeen lähdekoodiin perustuva Rust-kehys raakadatan muuntamiseen Yellowstone-tapahtumista jäsennellyiksi, tyypitetyiksi tiedoiksi. Se käyttää Parser + Handler -arkkitehtuuria:

  • Parserit deserialisoivat raakojen Solana-tapahtumien tyypitetyiksi rakenteiksi
  • Handlerit suorittavat liiketoimintalogiikkasi jäsennellyllä datalla
  • Pipelinet yhdistävät parserit handlereihin konfiguroitavissa virtauksissa
use yellowstone_vixen::Runtime;
use yellowstone_vixen_parser::token_program::{TokenProgramParser, TokenProgramState};
// Build a pipeline that parses Token Program events
Runtime::<YellowstoneGrpcSource>::builder()
.account(Pipeline::new(TokenProgramParser, [PaymentHandler]))
.build(config)?
.run()
.await;

Vixen sisältää sisäänrakennetut parserit SPL Tokenille ja Token-2022:lle, ja tukee parserien generointia mistä tahansa Solana IDL:stä. Maksujen seurantaan token-parseri antaa sinulle tyypitetyn pääsyn siirtoihin, mintauksiin ja tilitilaan:

impl Handler<TokenProgramState> for PaymentHandler {
async fn handle(&self, state: &TokenProgramState) -> Result<()> {
match state {
TokenProgramState::TokenAccount(account) => {
if self.watched_wallets.contains(&account.owner) {
process_balance_change(account).await;
}
}
_ => {}
}
Ok(())
}
}

Resurssit:

Aloittaminen

Useat RPC-palveluntarjoajat tarjoavat isännöityä indeksointiinfrastruktuuria. Tarkista solana.com/rpc saadaksesi ajantasaisen luettelon palveluntarjoajista, jotka tarjoavat webhookeja, parannettuja API:eja ja gRPC-suoratoistoa.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua

Hallinnoi

© 2026 Solana Foundation.
Kaikki oikeudet pidätetään.
Yhdistä