verify account index on stake Tx logging
This commit is contained in:
parent
62b182afcd
commit
001b1c5c0d
|
@ -359,6 +359,14 @@ async fn send_verification(
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn verify_account_len(account_keys: &[Pubkey], instr_accounts: &[u8], indexes: Vec<usize>) -> bool {
|
||||||
|
!indexes
|
||||||
|
.into_iter()
|
||||||
|
.filter(|index| (instr_accounts[*index] as usize) >= account_keys.len())
|
||||||
|
.next()
|
||||||
|
.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn process_stake_tx_message(
|
pub async fn process_stake_tx_message(
|
||||||
stake_sender: &mut Sender<(String, Pubkey, Option<StoredStake>)>,
|
stake_sender: &mut Sender<(String, Pubkey, Option<StoredStake>)>,
|
||||||
stakestore: &mut StakeStore,
|
stakestore: &mut StakeStore,
|
||||||
|
@ -410,10 +418,14 @@ pub async fn process_stake_tx_message(
|
||||||
"custodian": lockup.custodian.to_string(),
|
"custodian": lockup.custodian.to_string(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if verify_account_len(&account_keys, &instruction.accounts, vec![0, 1]) {
|
||||||
log::info!("StakeInstruction::Initialize authorized:{authorized} lockup:{lockup} stakeAccount:{} rentSysvar:{}"
|
log::info!("StakeInstruction::Initialize authorized:{authorized} lockup:{lockup} stakeAccount:{} rentSysvar:{}"
|
||||||
, account_keys[instruction.accounts[0] as usize].to_string()
|
, account_keys[instruction.accounts[0] as usize].to_string()
|
||||||
, account_keys[instruction.accounts[1] as usize].to_string()
|
, account_keys[instruction.accounts[1] as usize].to_string()
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
log::warn!("StakeInstruction::Initialize authorized:{authorized} lockup:{lockup} Index error in instruction:{:?}", instruction.accounts);
|
||||||
|
}
|
||||||
|
|
||||||
send_verification(
|
send_verification(
|
||||||
stake_sender,
|
stake_sender,
|
||||||
|
@ -424,6 +436,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Authorize(new_authorized, authority_type) => {
|
StakeInstruction::Authorize(new_authorized, authority_type) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Authorize authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let value = json!({
|
let value = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -448,6 +467,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::DelegateStake => {
|
StakeInstruction::DelegateStake => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3, 4, 5]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::DelegateStake authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"voteAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
"voteAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -467,6 +493,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Split(lamports) => {
|
StakeInstruction::Split(lamports) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Split authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"newSplitAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
"newSplitAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -484,6 +517,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Withdraw(lamports) => {
|
StakeInstruction::Withdraw(lamports) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3, 4]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Withdraw authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"destination": account_keys[instruction.accounts[1] as usize].to_string(),
|
"destination": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -505,6 +545,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Deactivate => {
|
StakeInstruction::Deactivate => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Deactivate authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -513,6 +560,13 @@ pub async fn process_stake_tx_message(
|
||||||
log::info!("StakeInstruction::Deactivate infos:{info}");
|
log::info!("StakeInstruction::Deactivate infos:{info}");
|
||||||
}
|
}
|
||||||
StakeInstruction::SetLockup(lockup_args) => {
|
StakeInstruction::SetLockup(lockup_args) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::SetLockup authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let unix_timestamp = lockup_args
|
let unix_timestamp = lockup_args
|
||||||
.unix_timestamp
|
.unix_timestamp
|
||||||
.map(|timestamp| json!(timestamp))
|
.map(|timestamp| json!(timestamp))
|
||||||
|
@ -540,6 +594,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::AuthorizeWithSeed(args) => {
|
StakeInstruction::AuthorizeWithSeed(args) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::AuthorizeWithSeed authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"authorityBase": account_keys[instruction.accounts[1] as usize].to_string(),
|
"authorityBase": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -563,6 +624,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::InitializeChecked => {
|
StakeInstruction::InitializeChecked => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::InitializeChecked authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"rentSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
"rentSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -580,6 +648,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::AuthorizeChecked(authority_type) => {
|
StakeInstruction::AuthorizeChecked(authority_type) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::AuthorizeChecked authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
"clockSysvar": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -600,6 +675,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::AuthorizeCheckedWithSeed(args) => {
|
StakeInstruction::AuthorizeCheckedWithSeed(args) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::AuthorizeCheckedWithSeed authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"authorityBase": account_keys[instruction.accounts[1] as usize].to_string(),
|
"authorityBase": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -624,6 +706,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::SetLockupChecked(lockup_args) => {
|
StakeInstruction::SetLockupChecked(lockup_args) => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::SetLockupChecked authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let unix_timestamp = lockup_args
|
let unix_timestamp = lockup_args
|
||||||
.unix_timestamp
|
.unix_timestamp
|
||||||
.map(|timestamp| json!(timestamp))
|
.map(|timestamp| json!(timestamp))
|
||||||
|
@ -652,6 +741,13 @@ pub async fn process_stake_tx_message(
|
||||||
log::info!("StakeInstruction::GetMinimumDelegation");
|
log::info!("StakeInstruction::GetMinimumDelegation");
|
||||||
}
|
}
|
||||||
StakeInstruction::DeactivateDelinquent => {
|
StakeInstruction::DeactivateDelinquent => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::DeactivateDelinquent authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"voteAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
"voteAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -668,6 +764,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Redelegate => {
|
StakeInstruction::Redelegate => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3, 4]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Redelegate authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
"stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"newStakeAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
"newStakeAccount": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
@ -686,6 +789,13 @@ pub async fn process_stake_tx_message(
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
StakeInstruction::Merge => {
|
StakeInstruction::Merge => {
|
||||||
|
if !verify_account_len(&account_keys, &instruction.accounts, vec![0, 1, 2, 3, 4]) {
|
||||||
|
log::warn!(
|
||||||
|
"StakeInstruction::Merge authorized Index error in instruction:{:?}",
|
||||||
|
instruction.accounts
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let info = json!({
|
let info = json!({
|
||||||
"destination": account_keys[instruction.accounts[0] as usize].to_string(),
|
"destination": account_keys[instruction.accounts[0] as usize].to_string(),
|
||||||
"source": account_keys[instruction.accounts[1] as usize].to_string(),
|
"source": account_keys[instruction.accounts[1] as usize].to_string(),
|
||||||
|
|
Loading…
Reference in New Issue