Skip to content

Commit

Permalink
add the processor support.
Browse files Browse the repository at this point in the history
  • Loading branch information
larry-aptos committed Jan 21, 2025
1 parent ab60b17 commit 81816f3
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ use aptos_protos::transaction::v1::{
FeePayerSignature as ProtoFeePayerSignature, MultiAgentSignature as ProtoMultiAgentSignature,
MultiEd25519Signature as MultiEd25519SignaturePb, MultiKeySignature as MultiKeySignaturePb,
Signature as TransactionSignaturePb, SingleKeySignature as SingleKeySignaturePb,
AbstractionSignature as AbstractionSignaturePb,
SingleSender as SingleSenderPb,
};
use serde::{Deserialize, Serialize};
use tracing::warn;

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Signature {
Expand Down Expand Up @@ -80,13 +82,21 @@ impl Signature {
}

pub fn get_signature_type(t: &TransactionSignaturePb) -> String {
if t.signature.is_none() {
warn!("Transaction signature is unknown");
return String::from("unknown");
}
match t.signature.as_ref().unwrap() {
SignatureEnum::Ed25519(_) => String::from("ed25519_signature"),
SignatureEnum::MultiEd25519(_) => String::from("multi_ed25519_signature"),
SignatureEnum::MultiAgent(_) => String::from("multi_agent_signature"),
SignatureEnum::FeePayer(_) => String::from("fee_payer_signature"),
SignatureEnum::SingleSender(sender) => {
let account_signature = sender.sender.as_ref().unwrap();
if account_signature.signature.is_none() {
warn!("Transaction signature is unknown");
return String::from("unknown");
}
let signature = account_signature.signature.as_ref().unwrap();
match signature {
AccountSignatureEnum::Ed25519(_) => String::from("ed25519_signature"),
Expand All @@ -99,6 +109,7 @@ impl Signature {
AccountSignatureEnum::MultiKeySignature(_) => {
String::from("multi_key_signature")
},
AccountSignatureEnum::Abstraction(_) => String::from("abstraction_signature"),
}
},
}
Expand Down Expand Up @@ -145,6 +156,30 @@ impl Signature {
}
}

fn parse_abstraction_signature(
_s: &AbstractionSignaturePb,
sender: &String,
transaction_version: i64,
transaction_block_height: i64,
is_sender_primary: bool,
multi_agent_index: i64,
override_address: Option<&String>,
) -> Self {
let signer = standardize_address(override_address.unwrap_or(sender));
Self {
txn_version: transaction_version,
transaction_block_height,
signer,
is_sender_primary,
type_: String::from("abstraction_signature"),
public_key: "Not implemented".into(),
threshold: 1,
signature: "Not implemented".into(),
multi_agent_index,
multi_sig_index: 0,
}
}

fn parse_multi_ed25519_signature(
s: &MultiEd25519SignaturePb,
sender: &String,
Expand Down Expand Up @@ -263,6 +298,12 @@ impl Signature {
multi_agent_index: i64,
override_address: Option<&String>,
) -> Vec<Self> {
if s.signature.is_none() {
warn!(
transaction_version = transaction_version,
"Transaction signature is unknown");
return vec![];
}
let signature = s.signature.as_ref().unwrap();
match signature {
AccountSignatureEnum::Ed25519(sig) => vec![Self::parse_ed25519_signature(
Expand Down Expand Up @@ -303,6 +344,15 @@ impl Signature {
multi_agent_index,
override_address,
),
AccountSignatureEnum::Abstraction(sig) => vec![Self::parse_abstraction_signature(
sig,
sender,
transaction_version,
transaction_block_height,
is_sender_primary,
multi_agent_index,
override_address,
)],
}
}

Expand Down Expand Up @@ -494,6 +544,10 @@ impl Signature {
transaction_version: i64,
transaction_block_height: i64,
) -> Vec<Self> {
if s.sender.is_none() {
warn!("Transaction signature is unknown");
return vec![];
}
let signature = s.sender.as_ref().unwrap();
match signature.signature.as_ref() {
Some(AccountSignatureEnum::SingleKeySignature(s)) => {
Expand Down Expand Up @@ -534,6 +588,15 @@ impl Signature {
0,
None,
),
Some(AccountSignatureEnum::Abstraction(sig)) => vec![Self::parse_abstraction_signature(
sig,
sender,
transaction_version,
transaction_block_height,
true,
0,
None,
)],
None => vec![],
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use aptos_protos::transaction::v1::{
account_signature::Signature as AccountSignature, signature::Signature, transaction::TxnData,
Transaction,
};
use tracing::warn;

trait AuthKeyScheme {
const SCHEME: u8;
Expand Down Expand Up @@ -265,7 +266,10 @@ impl SignatureInfo {
},
Signature::SingleSender(single_sender) => {
let account_signature = single_sender.sender.as_ref().unwrap();

if account_signature.signature.is_none() {
warn!("Transaction signature is unknown");
return None;
}
let signature_info = match account_signature.signature.as_ref().unwrap() {
AccountSignature::Ed25519(sig) => Self::ed25519(sig.public_key.clone()),
AccountSignature::MultiEd25519(sigs) => {
Expand Down Expand Up @@ -301,6 +305,7 @@ impl SignatureInfo {
.collect::<Vec<_>>();
Self::multi_key(threshold, prefixes, public_keys, verified)
},
AccountSignature::Abstraction(_sig) => return None,
};
signature_info
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,11 @@ use crate::{
};
use anyhow::{Context, Result};
use aptos_protos::transaction::v1::{
account_signature::Signature as AccountSignatureEnum,
any_signature::{SignatureVariant, Type as AnySignatureTypeEnumPb},
signature::Signature as SignatureEnum,
AccountSignature as ProtoAccountSignature, Ed25519Signature as Ed25519SignaturePB,
FeePayerSignature as ProtoFeePayerSignature, MultiAgentSignature as ProtoMultiAgentSignature,
MultiEd25519Signature as MultiEd25519SignaturePb, MultiKeySignature as MultiKeySignaturePb,
Signature as TransactionSignaturePb, SingleKeySignature as SingleKeySignaturePb,
SingleSender as SingleSenderPb,
account_signature::Signature as AccountSignatureEnum, any_signature::{SignatureVariant, Type as AnySignatureTypeEnumPb}, signature::Signature as SignatureEnum, AbstractionSignature as AbstractionSignaturePb, AccountSignature as ProtoAccountSignature, Ed25519Signature as Ed25519SignaturePB, FeePayerSignature as ProtoFeePayerSignature, MultiAgentSignature as ProtoMultiAgentSignature, MultiEd25519Signature as MultiEd25519SignaturePb, MultiKeySignature as MultiKeySignaturePb, Signature as TransactionSignaturePb, SingleKeySignature as SingleKeySignaturePb, SingleSender as SingleSenderPb
};
use field_count::FieldCount;
use serde::{Deserialize, Serialize};
use tracing::warn;

#[derive(Clone, Debug, Deserialize, FieldCount, Identifiable, Insertable, Serialize)]
#[diesel(primary_key(
Expand Down Expand Up @@ -111,8 +105,12 @@ impl Signature {
AccountSignatureEnum::MultiKeySignature(_) => {
String::from("multi_key_signature")
},
AccountSignatureEnum::Abstraction(_) => {
String::from("abstraction_signature")
}
}
},

}
}

Expand Down Expand Up @@ -158,6 +156,31 @@ impl Signature {
}
}

fn parse_abstraction_signature(
_s: &AbstractionSignaturePb,
sender: &String,
transaction_version: i64,
transaction_block_height: i64,
is_sender_primary: bool,
multi_agent_index: i64,
override_address: Option<&String>,
) -> Self {
let signer = standardize_address(override_address.unwrap_or(sender));
Self {
transaction_version,
transaction_block_height,
signer,
is_sender_primary,
type_: String::from("abstraction_signature"),
public_key: "Not implemented".into(),
threshold: 1,
public_key_indices: serde_json::Value::Array(vec![]),
signature: "Not implemented".into(),
multi_agent_index,
multi_sig_index: 0,
}
}

fn parse_multi_ed25519_signature(
s: &MultiEd25519SignaturePb,
sender: &String,
Expand Down Expand Up @@ -284,6 +307,15 @@ impl Signature {
multi_agent_index: i64,
override_address: Option<&String>,
) -> Vec<Self> {
// Skip parsing if unknow signagure is found.
if s.signature.as_ref().is_none() {
warn!(
transaction_version=transaction_version,
"Unknown signature is found!"
);
return vec![];
}

let signature = s.signature.as_ref().unwrap();
match signature {
AccountSignatureEnum::Ed25519(sig) => vec![Self::parse_ed25519_signature(
Expand Down Expand Up @@ -324,6 +356,19 @@ impl Signature {
multi_agent_index,
override_address,
),
AccountSignatureEnum::Abstraction(sig) => {
vec![
Self::parse_abstraction_signature(
sig,
sender,
transaction_version,
transaction_block_height,
is_sender_primary,
multi_agent_index,
override_address,
)
]
}
}
}

Expand Down Expand Up @@ -528,6 +573,13 @@ impl Signature {
transaction_block_height: i64,
) -> Vec<Self> {
let signature = s.sender.as_ref().unwrap();
if signature.signature.is_none() {
warn!(
transaction_version = transaction_version,
"Transaction signature is unknown"
);
return vec![];
}
match signature.signature.as_ref() {
Some(AccountSignatureEnum::SingleKeySignature(s)) => {
vec![Self::parse_single_key_signature(
Expand Down Expand Up @@ -567,6 +619,15 @@ impl Signature {
0,
None,
),
Some(AccountSignatureEnum::Abstraction(s)) => vec![Self::parse_abstraction_signature(
s,
sender,
transaction_version,
transaction_block_height,
true,
0,
None,
)],
None => vec![],
}
}
Expand Down

0 comments on commit 81816f3

Please sign in to comment.