460 lines
18 KiB
Rust
460 lines
18 KiB
Rust
use itertools::Itertools;
|
|
use serde::{Deserialize, Serialize};
|
|
use solana_rpc_client_api::filter::{Memcmp as RpcMemcmp, MemcmpEncodedBytes, RpcFilterType};
|
|
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Debug)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub enum MemcmpFilterData {
|
|
Bytes(Vec<u8>),
|
|
Base58(String),
|
|
Base64(String),
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Debug)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct MemcmpFilter {
|
|
pub offset: u64,
|
|
pub data: MemcmpFilterData,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Debug)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub enum AccountFilterType {
|
|
Datasize(u64),
|
|
Memcmp(MemcmpFilter),
|
|
TokenAccountState,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Debug)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct AccountFilter {
|
|
pub accounts: Vec<String>,
|
|
pub program_id: Option<String>,
|
|
pub filters: Option<Vec<AccountFilterType>>,
|
|
}
|
|
|
|
impl AccountFilter {
|
|
pub fn get_rpc_filter(&self) -> Option<Vec<RpcFilterType>> {
|
|
self.filters.clone().map(|filters| {
|
|
filters
|
|
.iter()
|
|
.map(|filter| match filter {
|
|
AccountFilterType::Datasize(size) => RpcFilterType::DataSize(*size),
|
|
AccountFilterType::Memcmp(memcpy) => {
|
|
let encoded_bytes = match &memcpy.data {
|
|
MemcmpFilterData::Bytes(bytes) => {
|
|
MemcmpEncodedBytes::Bytes(bytes.clone())
|
|
}
|
|
MemcmpFilterData::Base58(data) => {
|
|
MemcmpEncodedBytes::Base58(data.clone())
|
|
}
|
|
MemcmpFilterData::Base64(data) => {
|
|
MemcmpEncodedBytes::Base64(data.clone())
|
|
}
|
|
};
|
|
RpcFilterType::Memcmp(RpcMemcmp::new(memcpy.offset as usize, encoded_bytes))
|
|
}
|
|
AccountFilterType::TokenAccountState => RpcFilterType::TokenAccountState,
|
|
})
|
|
.collect_vec()
|
|
})
|
|
}
|
|
}
|
|
|
|
#[allow(deprecated)]
|
|
impl From<&RpcFilterType> for AccountFilterType {
|
|
fn from(value: &RpcFilterType) -> Self {
|
|
match value {
|
|
RpcFilterType::DataSize(size) => AccountFilterType::Datasize(*size),
|
|
RpcFilterType::Memcmp(memcmp) => {
|
|
let bytes = memcmp.bytes().map(|x| (*x).clone()).unwrap_or_default();
|
|
let offset = memcmp.offset as u64;
|
|
AccountFilterType::Memcmp(MemcmpFilter {
|
|
offset,
|
|
data: MemcmpFilterData::Bytes(bytes),
|
|
})
|
|
}
|
|
RpcFilterType::TokenAccountState => AccountFilterType::TokenAccountState,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub type AccountFilters = Vec<AccountFilter>;
|
|
|
|
#[test]
|
|
fn test_accounts_filters_deserialization() {
|
|
let str = "[
|
|
{
|
|
\"accounts\": [],
|
|
\"programId\": \"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg\",
|
|
\"filters\": [
|
|
{
|
|
\"datasize\": 200
|
|
}
|
|
]
|
|
},
|
|
{
|
|
\"accounts\": [],
|
|
\"programId\": \"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg\",
|
|
\"filters\": [
|
|
{
|
|
\"memcmp\": {
|
|
\"offset\": 100,
|
|
\"data\": {
|
|
\"bytes\": [
|
|
115,
|
|
101,
|
|
114,
|
|
117,
|
|
109,
|
|
5,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
\"accounts\": [],
|
|
\"programId\": \"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg\"
|
|
},
|
|
{
|
|
\"accounts\": [],
|
|
\"programId\": \"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg\",
|
|
\"filters\": [
|
|
{
|
|
\"datasize\": 200
|
|
},
|
|
{
|
|
\"memcmp\": {
|
|
\"offset\": 100,
|
|
\"data\": {
|
|
\"bytes\": [
|
|
115,
|
|
101,
|
|
114,
|
|
117,
|
|
109,
|
|
5,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
\"accounts\": [\"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg\", \"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX\"]
|
|
}
|
|
]
|
|
";
|
|
|
|
let filters: AccountFilters = serde_json::from_str(str).unwrap();
|
|
|
|
assert_eq!(
|
|
filters[0],
|
|
AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string()),
|
|
filters: Some(vec![AccountFilterType::Datasize(200)])
|
|
}
|
|
);
|
|
|
|
assert_eq!(
|
|
filters[1],
|
|
AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string()),
|
|
filters: Some(vec![AccountFilterType::Memcmp(MemcmpFilter {
|
|
offset: 100,
|
|
data: MemcmpFilterData::Bytes(vec![
|
|
115, 101, 114, 117, 109, 5, 0, 0, 0, 0, 0, 0, 0
|
|
])
|
|
})])
|
|
}
|
|
);
|
|
|
|
assert_eq!(
|
|
filters[2],
|
|
AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string()),
|
|
filters: None
|
|
}
|
|
);
|
|
|
|
assert_eq!(
|
|
filters[3],
|
|
AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string()),
|
|
filters: Some(vec![
|
|
AccountFilterType::Datasize(200),
|
|
AccountFilterType::Memcmp(MemcmpFilter {
|
|
offset: 100,
|
|
data: MemcmpFilterData::Bytes(vec![
|
|
115, 101, 114, 117, 109, 5, 0, 0, 0, 0, 0, 0, 0
|
|
])
|
|
})
|
|
])
|
|
}
|
|
);
|
|
|
|
assert_eq!(
|
|
filters[4],
|
|
AccountFilter {
|
|
accounts: vec![
|
|
"4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string(),
|
|
"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX".to_string()
|
|
],
|
|
program_id: None,
|
|
filters: None
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn workspace_write_your_own_filter() {
|
|
// update the filters and then run the test using `cargo test -- workspace_write_your_own_filter --nocapture` then use the printed line to update config.json
|
|
let mut filters = AccountFilters::new();
|
|
|
|
let mango_program_filter = AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg".to_string()),
|
|
filters: None,
|
|
};
|
|
|
|
filters.push(mango_program_filter);
|
|
|
|
let oracles = [
|
|
"9BoFW2JxdCDodsa2zfxAZpyT9yiTgSYEcHdNSuA7s5Sf",
|
|
"CYGfrBJB9HgLf9iZyN4aH5HvUAi2htQ4MjPxeXMf4Egn",
|
|
"7UYk5yhrQtFbZV2bLX1gtqN7QdU9xpBMyAk7tFgoTatk",
|
|
"2PRxDHabumHHv6fgcrcyvHsV8ENkWdEph27vhpbSMLn3",
|
|
"CtJ8EkqLmeYyGB8s4jevpeNsvmD4dxVR2krfsDLcvV8Y",
|
|
"3pxTFXBJbTAtHLCgSWjeasngGCi4ohV16F4fDnd4Xh81",
|
|
"GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU",
|
|
"2dAsTriwLdgmGt7N6Dkq1iUV6pGhSUUwqqePp4qorzor",
|
|
"FnVC5oSSdnCHfN5W7xbu74HbxXF3Kmy63gUKWdaaZwD7",
|
|
"6ABgrEZk8urs6kJ1JNdC1sspH5zKXRqxy8sg3ZG2cQps",
|
|
"7moA1i5vQUpfDwSpK6Pw9s56ahB7WFGidtbL2ujWrVvm",
|
|
"Bt1hEbY62aMriY1SyQqbeZbm8VmSbQVGBFzSzMuVNWzN",
|
|
"4ivThkX8uRxBpHsdWSqyXYihzKF3zpRGAUCqyuagnLoV",
|
|
"D8UUgr8a3aR3yUeHLu7v8FWK7E8Y5sSU7qrYBXUJXBQ5",
|
|
"7fMKXU6AnatycNu1CAMndLkKmDPtjZaPNZSJSfXR92Ez",
|
|
"JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB",
|
|
"AnLf8tVYCM816gmBjiy8n53eXKKEDydT5piYjjQDPgTB",
|
|
"4dusJxxxiYrMTLGYS6cCAyu3gPn2xXLBjS7orMToZHi1",
|
|
"hnkVVuJTRZvX2SawUsecZz2eHJP2oGMdnhdDJa33KSY",
|
|
"AFrYBhb5wKQtxRS9UA9YRS4V3dwFm7SqmS6DHKq6YVgo",
|
|
"Ag7RdWj5t3U9avU4XKAY7rBbGDCNz456ckNmcpW1aHoE",
|
|
"AwpALBTXcaz2t6BayXvQQu7eZ6h7u2UNRCQNmD9ShY7Z",
|
|
"8ihFLu5FimgTQ1Unh4dVyEHUGodJ5gJQCrQf4KUVB9bN",
|
|
"AV67ufGVkHrPKXdeupXE2MXdw3puq7xnkPNrTxGP3suU",
|
|
"3uZCMHY3vnNJspSVk6TvE9qmb4iYVbrEWFQ71uCE5hFR",
|
|
"5wRjzrwWZG3af3FE26ZrRj3s8A3BVNyeJ9Pt9Uf2ogdf",
|
|
"2qHkYmAn7HNtAGw45hQQkRthDDNiyVyVfDJDaw6iSoRm",
|
|
"2FGoL9PNhNGpduRKLsTa4teRaX3vfarXAc1an2KyXxQm",
|
|
"4BA3RcS4zE32WWgp49vvvre2t6nXY1W1kMyKZxeeuUey",
|
|
"Bfz5q3cDywSSjnWb9oXeQZqYzHwqFGp75mm34eYCPNEA",
|
|
"H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG",
|
|
"79wm3jjcPr6RaNQ4DGvP5KxG1mNd3gEBsg6FsNVFezK4",
|
|
"Gnt27xtC473ZT2Mw5u8wZ68Z3gULkSTb5DuxJy7eJotD",
|
|
"g6eRCbboSwK4tSWngn773RCMexr1APQr4uA9bGZBYfo",
|
|
"91Sfpm86H7ZgngdGfAiVJTNbg42CXBPiurruf29kinMh",
|
|
"nrYkQQQur7z8rYTST3G9GqATviK5SxTDkrqd21MW6Ue",
|
|
"E4v1BBgoso9s64TQvmyownAVJbhbEPGyzA3qn4n46qj9",
|
|
"EzBoEHzYSx37RULrQCh756kNcA7iLrmGesxqpzSwo4v3",
|
|
"3vxLXJqLqF3JG5TCbYycbKWRBbCJQLxQmBGCkyqEEefL",
|
|
"7yyaeuJ1GGtVBLT2z2xub5ZWYKaNhF28mj1RdV4VDFVk",
|
|
"BeAZ81UvesnJR7VVGNzRQGKFHrnxm77x5ozesC1pTjrY",
|
|
"H5hokc8gcKezGcwbqFbss99QrpA3WxsRfqGYCm6F1EBy",
|
|
"ELrhqYY3WjLRnLwWt3u7sMykNc87EScEAsyCyrDDSAXv",
|
|
"FYghp2wYzq36yqXYd8D3Lu6jpMWETHTtxYDZPXdpppyc",
|
|
"2sn1w3krTLhW4EDbLL5etf8NjwSHMhmK6CJmWYpkMoXL",
|
|
"Fi8vncGpNKbq62gPo56G4toCehWNy77GgqGkTaAF5Lkk",
|
|
"9puoc5B1ioxkKMMx1rs1M5kLWhCDrPawkCnTkk44jjCs",
|
|
"7KbMt281Rjx3E3MU7GSEEBfByhNBxfU1dZbTimGaKCfV",
|
|
"7tV5jsyNUg9j1AARv56b7AirdpLBecibRXLEJtycEgpP",
|
|
"ARjaHVxGCQfTvvKjLd7U7srvk6orthZSE6uqWchCczZc",
|
|
"E5AmUKMFgxjEihVwEQNrNfnri5EexYHSBC4HkicVtfxG",
|
|
"GoXhYTpRF4vs4gx48S7XhbaukVbJXVycXimhGfzWNGLF",
|
|
"BWt1ABFexE3gEKRFGZmMo2DFLgAU8SUJc4NZi1t3jvUP",
|
|
"5BocsfuYVNzu5huEbx3jreueTPzsKaGQMj9Xwb5enMP",
|
|
"7n7TafVxb1j3Zwh2sX3s8k3eXg7UHp5VZnb9uhhCLvy9",
|
|
"EA1eJqandDNrw627mSA1Rrp2xMUvWoJBz2WwQxZYP9YX",
|
|
"EN41nj1uHaTHmJJLPTerwVu2P9r5G8pMiNvfNX5V2PtP",
|
|
"DvfMMNzFTvPofaEzdt3ez4U6ziRJcMCm7LGGKskznThz",
|
|
"HDwpKCNpB9JvcGrZv6TWcXjFvzxxfzq7ci6kQ1Kv8FMY",
|
|
"GgpDLzVuUFLyNzNn6oVVEVxbmkdp2xkjX8BrzaFFt3yA",
|
|
"GFJjJmm7jTDb7WEM4TkYdA9eAEeJGK1t73tcdDNeZLGT",
|
|
"CeQ7wj43PJ28EXU1QVNMPxmwrg955KejYD68bMYWTvAp",
|
|
"27Nuo9hEVSVrrUyQ83NPnuDR4ZSE8KBb3xiU1XeaBVwL",
|
|
"CcyCcZyvfEkBUngS7KytFPWKWSrpDfmHx81aqAtgS9oC",
|
|
"2JAg3Rm6TmQ3gSYgUCCyZ9bCQKThD9jxHCN6U2ByTPMb",
|
|
"Dj1qPXjnWWMkuPiq4Y51JNvSkCBqU38P541Te2ugqYpD",
|
|
"Ed3EJ3jxXWGgDAkWLXfGojStQ7g1SbYNQGhetMSm6PKb",
|
|
"8JK7S6h5FktYXq4wC75WeyNFWZpa1jMNXNtTNuy26ixy",
|
|
"2mBnnBywAuMwH5FhH27UUFyDGk7J77m5LcKK4VtmwJQi",
|
|
"Fb5BfdB7zk2zfWfqgpRtRQbYSYERASsBjz213FaT461F",
|
|
"2oxZZ3YXaVhbZmtzagGooewBAofyVbBTzayAD9UR1eBh",
|
|
"3BAKsQd3RuhZKES2DGysMhjBdwjZYKYmxRqnSMtZ4KSN",
|
|
"BWMbNAMVkz197EsnhZ3rHCJAB1BYgaQxHaDzjeVvgXdk",
|
|
"Gi8KdURhXWvsRvDFHpqy1gNfnnYuTsWexQvDpP9711id",
|
|
"EkKZwBeKWPvhraYERfUNr2fdh1eazrbTrQXYkRZs24XB",
|
|
"9UPokT1qLN2PVMxGNSYnRnYNgRRJTwr9dzLctFFZQFa2",
|
|
"8CvwxZ9Db6XbLD46NZwwmVDZZRDy7eydFcAGkXKh9axa",
|
|
"5x2sfymw7CcrWx6WvZ5UV7Bg1iZTXbwh1XUhxKqhJqni",
|
|
"DkbVbMhFxswS32xnn1K2UY4aoBugXooBTxdzkWWDWRkH",
|
|
"CmHpRnmd8h6kH8ogwLuihKnGYJvaS2PdXNjBt2JhFT5w",
|
|
"FALKx6CxTcwzpTdihdR7ZuK3Wd2H2aEvCNBS4K8UfPxe",
|
|
"AYhLYoDr6QCtVb5n1M5hsWLG74oB8VEz378brxGTnjjn",
|
|
"8PhnCfgqpgFM7ZJvttGdBVMXHuU4Q23ACxCvWkbs1M71",
|
|
"JCKa72xFYGWBEVJZ7AKZ2ofugWPBfrrouQviaGaohi3R",
|
|
"FsruqicZDGnCnm7dRthjL5eFrTmaNRkkomxhPJQP2kdu",
|
|
"FGZCgVhVGqzfWnmJFP9Hx4BvGvnFApEp1dM2whzXvg1Z",
|
|
"YFzPfYrMTWPZEhhvq5QyHEu5otDrQYVtfxzRbkTHQvd",
|
|
"4hgruY5SXYRHSrJFBjX4DFf39ef2wgYGGasjrUtwS9S1",
|
|
"2KajVpMkF3Z53MgTgo7dDh23av6xWKgKssbtjogdY7Vu",
|
|
"72h8rWaWwfPUL36PAFqyQZU8RT1V3FKG7Nc45aK89xTs",
|
|
"6QNusiQ1g7fKierMQhNeAJxfLXomfcAX3tGRMwxfESsw",
|
|
"74fKpZ1NFfusLacyVzQdMXXawe9Dr1Kz8Yw1cw12QQ3y",
|
|
"BEhRuJZiKwTdVTsGYjbHRh9RmGbKBtT6xo7yPqxLiSSY",
|
|
"3NnxQvDcZXputNMxaxsGvqiKpqgPfSYXpNigZNFcknmD",
|
|
"8QCdRwLp5CX2XYVaKX3GFxsbc8n7M2xEtMXyAa8tL7r3",
|
|
"H6Wvvx5dpt8yGdwsqAsz9WDkT43eQUHwAiafDvbcTQoQ",
|
|
"28dSAygC8Vqzbm5r7f3mPnQ6vKVqXkjzoXD9SVpi75jV",
|
|
"5jWUncPNBMZJ3sTHKmMLszypVkoRK6bfEQMQUHweeQnh",
|
|
"DFizHnakzudcEfz4YKrsxQsRADgUMc6ifaMs3wU9pBSV",
|
|
"4RNVNS8EZWwkYgNeRV4A75oScC3afD7cWV6VLywRcKik",
|
|
"AmFXLH3jbcQNqgJjVuMZCeiaU2HmrW1UwMTWR5wU4ijd",
|
|
"DG5EXd99EfnMFXqVXjciWi5HuXHUKdwkQ2WCncEsCeKW",
|
|
"9zH66LpNcwBausdXLT765dgyLZSiTGUno22orC6Q3AFT",
|
|
"9LezACAkFsv78P7nBJEzi6QeF9h1QF8hGx2LRN7u9Vww",
|
|
"6nh2KwhGF8Tott22smj2E3G1R15iXhBrL7Lx6vKgdPFK",
|
|
"4E17F3BxtNVqzVsirxguuqkpYLtFgCR6NfTpccPh82WE",
|
|
"3FFGnQWo7LH5qHK96yXFxRzGL7wB3BZqJpW25rk6xZkP",
|
|
"B2na8Awyd7cpC59iEU43FagJAPLigr3AP3s38KM982bu",
|
|
"9Lyhks5bQQxb9EyyX55NtgKQzpM4WK7JCmeaWuQ5MoXD",
|
|
"CXMRrGEseppLPmzYJsx5vYwTkaDEag4A9LJvgrAeNpF",
|
|
"G8KnvNg5puzLmxQVeWT2cRHCm1XmurbWGG9B8Bze6mav",
|
|
"HKm7iBQw488qHyXYh5wpqKnMpvbu3TaH4wVWf52i4d8",
|
|
"8xdpZNtxfWY96sKH6LBmDbRYDhMqmujuXRnvr9xDF9mt",
|
|
"4WeAXG1V8QTtt3T9ao6LkQa8m1AuwRcY8YLvVcabiuby",
|
|
"H87FfmHABiZLRGrDsXRZtqq25YpARzaokCzL1vMYGiep",
|
|
"AuqKXU1Nb5XvRxr5A4vRBLnnSJrdujNJV7HWsfj4KBWS",
|
|
"DcM7ufYEveXMfB1HQru1jHh7td6DPxgDDJRL8LR79gMb",
|
|
"27BrDDYtv9NDQCALCNnDqe3BqjYkgiaQwKBbyqCA8p8B",
|
|
"8BnEgHoWFysVcuFFX7QztDmzuH8r5ZFvyP3sYwn1XTh6",
|
|
"6wD9zcNZi2VpvUB8dnEsF242Gf1tn6qNhLF2UZ3w9MwD",
|
|
"Do9Xu1dvgZukExvRLHsnH8cHzjMrhrGxY81ukEudm4XX",
|
|
"9FjM1wHvGg2ZZaB3XyRsYELoQE7iD6uwHXizQUDKRYff",
|
|
"BqApFW7DwXThCDZAbK13nbHksEsv6YJMCdj58sJmRLdy",
|
|
"3wueUtibiTVWJZoL1WhphgDw48r9LLzUriT1a4CnZfGG",
|
|
"51Tk5PRCwvz5L3Z8EGw3HpW9YMLMGwyqRiDbNV4T1GXi",
|
|
"6yBKgj4PZK2sShV2e8rKDc8EArsvScmhLm328iKasBvh",
|
|
"Dq2eptabWaGfFm6QezfX9BzfTuWA58jXhwXMHUnfuUe8",
|
|
"CsB4XjwH4uZRjRXEXRBFJ3hi3mb9jujzRCW7NXg7TRtX",
|
|
"HKEJCi2gVDWGfUB7YufNtJjyZiBgM9KZk9tgRE1r3RsX",
|
|
"3QDSfdXSbUhGFe6K4EZbasfpyUTndAzkkLdX9HGpRbB9",
|
|
"HCaq6dL3DJzKyWEeSCCDy9NdKFRL56Ad7G4bSVVMRchr",
|
|
"CgPg6FRyerP6esjvadjdAJCKboLJzbu2ihWgjquHdAvn",
|
|
"6z1KcPcBnrzebgYjHwVTzu6VgcxY6niLfo3dxF1n2xSx",
|
|
"BbJgE7HZMaDp5NTYvRh5jZSkQPVDTU8ubPFtpogUkEj4",
|
|
"4Ymax5Tmk7LACxDtPPFHB4w89557era7wyxodUBqd4fW",
|
|
"8nA9AqeGsviExkDZChaviW4mGwmdw6GYQAcUYCrszj42",
|
|
"Hs97TCZeuYiJxooo3U73qEHXg3dKpRL4uYKYRryEK9CF",
|
|
"Dgt13dmzN6cZFgGE3hjfm4VVFE7pxCL2GeTmxbz4fmfA",
|
|
"2BtDHBTCTUxvdur498ZEcMgimasaFrY5GzLv8wS8XgCb",
|
|
"HvRdVui29hRwToAPMEfQJY795EC1XyW2ZoWvuSmgqq7v",
|
|
"5EKbLBd12TVUUSh1WH4jE884S1XaikSga7pjMNA8jnxD",
|
|
"Cop9Lvri1yYEmV8fWuG6i7EAJ2RdPynU66ZrhM8kGH9V",
|
|
"iAHbTAWfvM269DnnzzQgMocMZLV8PnUoNF7g33i95dR",
|
|
"DZjbn4XC8qoHKikZqzmhemykVzmossoayV9ffbsUqxVj",
|
|
"H5uQWZrwRm3EABCzYRmDmti5UnMTUP5ifxsPHrJHpZdC",
|
|
"Cn6Fu2MfaE6sahWwa8HGZQuKuLD6Fd8GJ784Tv7UtdRu",
|
|
"7S2fEFvce5n9hGpjp9jd8JRfuBngcDJfykygeqqzEwmq",
|
|
"5U2Vzi7Lwvyzw7hoHKpAZUD2SPfmsYfydRZrejmquso2",
|
|
"H6rrYK3SUHF2eguZCyJxnSBMJqjXhUtuaki6PHiutvum",
|
|
"EaXdHx7x3mdGA38j5RSmKYSXMzAFzzUXCLNBEDXDn1d5",
|
|
"BBRvF4etMRitpSwFdXSMzPg547Lxnr3G95aQtBhMiWhB",
|
|
"BAPLDQS9wa5BwzEuWeA1CMKAxjASieFzgSWW9nEJdMCc",
|
|
"3PoEWQNTCaoDsBH32Rmp9yqbgFtg4Z4ik13kkRyN2CQf",
|
|
"6NfwhGjfrE4dp7XFut2kYcUQsH4P4AJVSoe9cLVM2z43",
|
|
"FbwncFP5bZjdx8J6yfDDTrCmmMkwieuape1enCvwLG33",
|
|
"CK1X54onkDCqVnqY7hnvhcT7EosnjiLTwPBXAMLxkA2A",
|
|
"kB3BTG6Pz3W7JzKQLHyrAZaFk1LVmeeXRP4ZiCKUaA3",
|
|
"63XwffQkMcNqEacDNhixmBxnydkRE3uigV7VoLNfqh9k",
|
|
"CFxJ8jyFQinvFSL6CNQCLWyPnbeYcCpCWmfPFC43qMkp",
|
|
"21QRUCjxuXC9GAyTGvfYyumWYTqCtewM3ZcCfFDTYi5L",
|
|
"ASUyMMNBpFzpW3zDSPYdDVggKajq1DMKFFPK1JS9hoSR",
|
|
"FyyGTHKJBf1nGHHL44HE91EcGRFg2Y7XazA3SjQpcU3i",
|
|
"CVwFcGuWYH1chdbR988K7ppbwVLErqfdreFCPsg9ttnq",
|
|
"CDm1Uaos4vWPXezgEobUarGJ6ddKCywvFp8XLcNSqzU9",
|
|
"4P4pgJC7omZWRL4qmngUMW3ETTr2yLXhgaoAPpSp8TWG",
|
|
"3rQH87K3UfrDjbjSktHy7EwQHvX4BoRu3Py52D25gKSS",
|
|
"CCepXEQxo8eTqCGtRHXrSnZdhCEQjQeEW3M85AH9skMJ",
|
|
"GqEejRjBRnZTZg417SUmSwpJ4nhTK5E8Ey8JeVPd3cY5",
|
|
"2m7ZLEKtxWF29727DSb5D91erpXPUY1bqhRWRC3wQX7u",
|
|
"G4BZUKuUy1qkjtG3xZN8x4tXoJrjPhuxtU5t2HHgMaZe",
|
|
"CC9VYJprbxacpiS94tPJ1GyBhfvrLQbUiUSVMWvFohNW",
|
|
"6XsUQYAkKSy4mSQfMxYqpF4U7X3JsPDbG4vRQQEvCPb6",
|
|
"6YSbESJWKwtC4x7rBdHbcYSVEejCWo2sZkapKQE8Y289",
|
|
"NiWvcoCvqmUKSf1Avey5KWBXa5oAm6h7LWv4sqyCbBn",
|
|
"AZUaEDdGXiryUbAi56MMrn1Em8t2dSy5mvq5SxX6S1np",
|
|
"AgCBUZ6UMWqPLftTxeAqpQxtrfiCyL2HgRfmmM6QTfCj",
|
|
"7AdBcVGejZy3981JfJ8mDywzMqAL31vBpgnD3PpnTpms",
|
|
"Av8JgExs2LDubedW47Kvw8J47hko45P8TYqiHmtD2Ey6",
|
|
"5aNxjc8upaPiGvcC9YJ48geiRSQLzGEdeL1zJakLn7t3",
|
|
"9h4bddiPyfTyTztuyo7mEcpQz3QrR6cSPt1id6UmWj5H",
|
|
];
|
|
let oracle_filters = AccountFilter {
|
|
accounts: oracles.iter().map(|x| x.to_string()).collect_vec(),
|
|
program_id: None,
|
|
filters: None,
|
|
};
|
|
filters.push(oracle_filters);
|
|
|
|
let open_orders = AccountFilter {
|
|
accounts: vec![],
|
|
program_id: Some("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX".to_string()),
|
|
filters: Some(vec![
|
|
AccountFilterType::Datasize(3228),
|
|
AccountFilterType::Memcmp(MemcmpFilter {
|
|
offset: 0,
|
|
data: MemcmpFilterData::Bytes(
|
|
[0x73, 0x65, 0x72, 0x75, 0x6d, 5, 0, 0, 0, 0, 0, 0, 0].to_vec(),
|
|
),
|
|
}),
|
|
AccountFilterType::Memcmp(MemcmpFilter {
|
|
offset: 45,
|
|
data: MemcmpFilterData::Bytes(
|
|
[
|
|
91, 23, 199, 200, 106, 110, 115, 159, 175, 23, 81, 129, 131, 99, 233, 79,
|
|
144, 139, 243, 112, 4, 206, 109, 63, 188, 241, 151, 189, 210, 245, 31, 28,
|
|
]
|
|
.to_vec(),
|
|
),
|
|
}),
|
|
]),
|
|
};
|
|
filters.push(open_orders);
|
|
|
|
let filter_string = serde_json::to_string(&filters).unwrap();
|
|
let filter_string = filter_string.replace('"', "\\\"");
|
|
println!("Filter is : \n {} \n", filter_string);
|
|
}
|