feat: Migrate to dumb agents (#198)

BREAKING CHANGE: handshake, chainsync, localstate and blockfetch mini-protocols changed the API surface

Co-authored-by: jmhrpr <harper.jme@gmail.com>
This commit is contained in:
Santiago Carmuega 2022-10-25 14:42:34 -03:00 committed by GitHub
parent 0ecf254f32
commit 1b42851f2d
19 changed files with 1088 additions and 1164 deletions

View file

@ -1,53 +1,39 @@
use pallas::network::{
miniprotocols::{
handshake::{n2n::VersionTable, Initiator},
run_agent, Point, TESTNET_MAGIC,
blockfetch,
handshake::{self, n2n::VersionTable},
Point, TESTNET_MAGIC,
},
multiplexer::{bearers::Bearer, StdPlexer},
};
use pallas::network::miniprotocols::blockfetch::{BatchClient, Observer};
#[derive(Debug)]
struct BlockPrinter;
impl Observer for BlockPrinter {
fn on_block_received(&mut self, body: Vec<u8>) -> Result<(), Box<dyn std::error::Error>> {
println!("{}", hex::encode(&body));
println!("----------");
Ok(())
}
}
fn main() {
env_logger::init();
let bearer = Bearer::connect_tcp("relays-new.cardano-testnet.iohkdev.io:3001").unwrap();
let mut plexer = StdPlexer::new(bearer);
let mut channel0 = plexer.use_channel(0).into();
let mut channel3 = plexer.use_channel(3).into();
let channel0 = plexer.use_channel(0);
let channel3 = plexer.use_channel(3);
plexer.muxer.spawn();
plexer.demuxer.spawn();
let versions = VersionTable::v4_and_above(TESTNET_MAGIC);
let _last = run_agent(Initiator::initial(versions), &mut channel0).unwrap();
let mut hs_client = handshake::N2NClient::new(channel0);
let handshake = hs_client.handshake(versions).unwrap();
let range = (
Point::Specific(
63528597,
hex::decode("3f3d81c7b88f0fa28867541c5fea8794125cccf6d6c9ee0037a1dbb064130dfd")
.unwrap(),
),
Point::Specific(
63528597,
hex::decode("3f3d81c7b88f0fa28867541c5fea8794125cccf6d6c9ee0037a1dbb064130dfd")
.unwrap(),
),
assert!(matches!(handshake, handshake::Confirmation::Accepted(..)));
let point = Point::Specific(
63528597,
hex::decode("3f3d81c7b88f0fa28867541c5fea8794125cccf6d6c9ee0037a1dbb064130dfd").unwrap(),
);
let bf = BatchClient::initial(range, BlockPrinter {});
let bf_last = run_agent(bf, &mut channel3);
println!("{:?}", bf_last);
let mut bf_client = blockfetch::Client::new(channel3);
let block = bf_client.fetch_single(point).unwrap();
println!("downloaded block of size: {}", block.len());
println!("{}", hex::encode(&block));
}