Compare commits

...

4 Commits

Author SHA1 Message Date
GroovieGermanikus 288111e674
make SubscribeRequest forward-compatible 2024-05-08 11:21:32 +02:00
GroovieGermanikus 0a5aaf4846
log size 2024-04-18 17:39:59 +02:00
GroovieGermanikus 458f82725a
log account key + block size 2024-04-18 17:30:23 +02:00
GroovieGermanikus 793de099d3
add version info 2024-04-16 15:59:52 +02:00
3 changed files with 25 additions and 41 deletions

View File

@ -15,6 +15,15 @@ The implementation is based on _Rust Futures_.
Please open an issue if you have any questions or suggestions -> [New Issue](https://github.com/blockworks-foundation/geyser-grpc-connector/issues/new).
## Versions
These are the currently maintained versions of the library
| Tag (geyser-grpc-connector) | Yellowstone | Solana | Branch |
|----------------------------------------|-------------|--------|----------------------------------|
| 0.10.x+yellowstone.1.13+solana.1.17.28 | 1.13 | 1.17.28| release/v0.10.x+yellowstone.1.13 |
| 0.10.x+yellowstone.1.12+solana.1.17.15 | 1.12 | 1.17.15| main |
## Installation and Usage
```cargo add geyser-grpc-connector ```

View File

@ -74,6 +74,7 @@ pub async fn main() {
tracing_subscriber::fmt::init();
// console_subscriber::init();
let COMMITMENT_LEVEL = CommitmentConfig::processed();
let grpc_addr_green = env::var("GRPC_ADDR").expect("need grpc url for green");
let grpc_x_token_green = env::var("GRPC_X_TOKEN").ok();
@ -96,30 +97,27 @@ pub async fn main() {
let green_stream = create_geyser_reconnecting_stream(
config.clone(),
GeyserFilter(CommitmentConfig::processed()).accounts(),
GeyserFilter(COMMITMENT_LEVEL).accounts(),
);
let blue_stream = create_geyser_reconnecting_stream(
config.clone(),
GeyserFilter(CommitmentConfig::processed()).blocks_and_txs(),
GeyserFilter(COMMITMENT_LEVEL).blocks_and_txs(),
);
tokio::spawn(async move {
let mut wtr = csv::Writer::from_path("accounts-mainnet.csv").unwrap();
let mut green_stream = pin!(green_stream);
while let Some(message) = green_stream.next().await {
match message {
Message::GeyserSubscribeUpdate(subscriber_update) => {
match subscriber_update.update_oneof {
Some(UpdateOneof::Account(update)) => {
info!("got update (green)!!! slot: {}", update.slot);
let key = update.account.unwrap().pubkey;
let account_info = update.account.unwrap();
let account_pk = Pubkey::try_from(account_info.pubkey).unwrap();
info!("got account update (green)!!! {} - {:?} - {} bytes",
update.slot, account_pk, account_info.data.len());
let bytes: [u8; 32] =
key.try_into().unwrap_or(Pubkey::default().to_bytes());
let pubkey = Pubkey::new_from_array(bytes);
wtr.write_record(&[pubkey.to_string()]).unwrap();
wtr.flush().unwrap();
account_pk.to_bytes();
}
_ => {}
}
@ -134,12 +132,13 @@ pub async fn main() {
tokio::spawn(async move {
let mut blue_stream = pin!(blue_stream);
let extractor = BlockMiniExtractor(COMMITMENT_LEVEL);
while let Some(message) = blue_stream.next().await {
match message {
Message::GeyserSubscribeUpdate(subscriber_update) => {
let mapped = map_block_update(*subscriber_update);
if let Some(slot) = mapped {
info!("got update (blue)!!! slot: {}", slot);
let mapped = extractor.map_yellowstone_update(*subscriber_update);
if let Some((slot, block_mini)) = mapped {
info!("got update (blue)!!! block: {} - {} bytes", slot, block_mini.blocksize);
}
}
Message::Connecting(attempt) => {

View File

@ -97,15 +97,9 @@ impl GeyserFilter {
);
SubscribeRequest {
slots: HashMap::new(),
accounts: Default::default(),
transactions: HashMap::new(),
entry: Default::default(),
blocks: blocks_subs,
blocks_meta: HashMap::new(),
commitment: Some(map_commitment_level(self.0) as i32),
accounts_data_slice: Default::default(),
ping: None,
..Default::default()
}
}
@ -114,15 +108,9 @@ impl GeyserFilter {
blocksmeta_subs.insert("client".to_string(), SubscribeRequestFilterBlocksMeta {});
SubscribeRequest {
slots: HashMap::new(),
accounts: Default::default(),
transactions: HashMap::new(),
entry: Default::default(),
blocks: HashMap::new(),
blocks_meta: blocksmeta_subs,
commitment: Some(map_commitment_level(self.0) as i32),
accounts_data_slice: Default::default(),
ping: None,
..Default::default()
}
}
@ -137,14 +125,8 @@ impl GeyserFilter {
SubscribeRequest {
slots: slots_subs,
accounts: Default::default(),
transactions: HashMap::new(),
entry: Default::default(),
blocks: HashMap::new(),
blocks_meta: HashMap::new(),
commitment: Some(map_commitment_level(self.0) as i32),
accounts_data_slice: Default::default(),
ping: None,
..Default::default()
}
}
@ -160,15 +142,9 @@ impl GeyserFilter {
);
SubscribeRequest {
slots: HashMap::new(),
accounts: accounts_subs,
transactions: HashMap::new(),
entry: Default::default(),
blocks: Default::default(),
blocks_meta: HashMap::new(),
commitment: Some(map_commitment_level(self.0) as i32),
accounts_data_slice: Default::default(),
ping: None,
..Default::default()
}
}
}