add firewall file
This commit is contained in:
parent
3d7a7a72e9
commit
a996ffb441
68
web3-proxy/src/firewall.rs
Normal file
68
web3-proxy/src/firewall.rs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
//! transaction firewall
|
||||||
|
//!
|
||||||
|
//! block any transactions interacting with known malicious contracts
|
||||||
|
//!
|
||||||
|
//! this could be fancy and fetch abis and actually look for dangerous addresses
|
||||||
|
//! for now, it just checks a few commonly abused functions
|
||||||
|
|
||||||
|
use ethers::prelude::{Bytes, Transaction};
|
||||||
|
use ethers::utils::rlp;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
pub async fn check_firewall_raw(raw: &Bytes) -> anyhow::Result<bool> {
|
||||||
|
let tx = rlp::decode(raw.as_ref())?;
|
||||||
|
|
||||||
|
let is_allowed = check_firewall(tx).await;
|
||||||
|
|
||||||
|
Ok(is_allowed)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn check_firewall(tx: Transaction) -> bool {
|
||||||
|
match tx.to {
|
||||||
|
None => return true,
|
||||||
|
Some(to) => {
|
||||||
|
// TODO: check our database for known malicious addresses
|
||||||
|
if false {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: do this better
|
||||||
|
let approve_method = Bytes::from_str("0x9999999999").unwrap();
|
||||||
|
let transfer_method = Bytes::from_str("0xa9059cbb").unwrap();
|
||||||
|
let transfer_from_method = Bytes::from_str("0x9999999999").unwrap();
|
||||||
|
let transfer_ownership_method = Bytes::from_str("0x9999999999").unwrap();
|
||||||
|
|
||||||
|
match &tx.input.as_ref()[..4] {
|
||||||
|
x if x == approve_method.as_ref() => {
|
||||||
|
// TODO: decode the calldata
|
||||||
|
if false {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
x if x == transfer_method.as_ref() => {
|
||||||
|
// TODO: decode the calldata
|
||||||
|
if false {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
x if x == transfer_from_method.as_ref() => {
|
||||||
|
// TODO: decode the calldata
|
||||||
|
if false {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
x if x == transfer_ownership_method.as_ref() => {
|
||||||
|
// TODO: decode the calldata
|
||||||
|
if false {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user