Skip to content

Commit 6cb9a8d

Browse files
WGB5445gregnazario
authored andcommitted
feat: implement GenerateSigningMessage trait for RawTransaction and RawTransactionWithData
1 parent e181c2e commit 6cb9a8d

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

crates/aptos-rust-sdk-types/src/api_types/transaction.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@ use crate::api_types::numbers::U64;
77
use crate::api_types::transaction_authenticator::TransactionAuthenticator;
88
use crate::api_types::type_tag::TypeTag;
99
use crate::api_types::write_set::WriteSet;
10+
use anyhow::Error;
11+
use aptos_crypto::compat::Sha3_256;
1012
use aptos_crypto_derive::{BCSCryptoHash, CryptoHasher};
13+
use ed25519_dalek::Digest;
1114
use serde::{Deserialize, Serialize};
1215

16+
pub trait GenerateSigningMessage {
17+
fn generate_signing_message(&self) -> Result<Vec<u8>, Error>;
18+
}
19+
1320
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
1421
pub enum TransactionData {
1522
/// A committed transaction
@@ -235,6 +242,20 @@ impl RawTransactionWithData {
235242
}
236243
}
237244

245+
impl GenerateSigningMessage for RawTransactionWithData {
246+
fn generate_signing_message(&self) -> Result<Vec<u8>, anyhow::Error> {
247+
let mut sha3 = Sha3_256::new();
248+
sha3.update("APTOS::RawTransactionWithData".as_bytes());
249+
let hash = sha3.finalize().to_vec();
250+
let mut bytes = vec![];
251+
bcs::serialize_into(&mut bytes, &self)?;
252+
let mut message = vec![];
253+
message.extend(hash);
254+
message.extend(bytes);
255+
Ok(message)
256+
}
257+
}
258+
238259
impl SignedTransaction {
239260
pub fn new(raw_txn: RawTransaction, authenticator: TransactionAuthenticator) -> Self {
240261
Self {
@@ -286,6 +307,21 @@ impl RawTransaction {
286307
}
287308
}
288309

310+
impl GenerateSigningMessage for RawTransaction {
311+
fn generate_signing_message(&self) -> Result<Vec<u8>, anyhow::Error> {
312+
let mut sha3 = Sha3_256::new();
313+
sha3.update("APTOS::RawTransaction".as_bytes());
314+
let hash = sha3.finalize().to_vec();
315+
let mut bytes = vec![];
316+
bcs::serialize_into(&mut bytes, &self)?;
317+
let mut message = vec![];
318+
message.extend(hash);
319+
message.extend(bytes);
320+
Ok(message)
321+
}
322+
323+
}
324+
289325
impl EntryFunction {
290326
pub fn new(
291327
module: ModuleId,

crates/examples/src/lib.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#[cfg(test)]
22
mod tests {
3-
use aptos_crypto::compat::Sha3_256;
43
use aptos_crypto::ed25519::{Ed25519PrivateKey, Ed25519PublicKey};
54
use aptos_crypto::Uniform;
65
use aptos_rust_sdk::client::builder::AptosClientBuilder;
@@ -9,13 +8,12 @@ mod tests {
98
use aptos_rust_sdk_types::api_types::chain_id::ChainId;
109
use aptos_rust_sdk_types::api_types::module_id::ModuleId;
1110
use aptos_rust_sdk_types::api_types::transaction::{
12-
EntryFunction, RawTransaction, RawTransactionWithData, SignedTransaction,
13-
TransactionPayload,
11+
EntryFunction, GenerateSigningMessage, RawTransaction, RawTransactionWithData,
12+
SignedTransaction, TransactionPayload,
1413
};
1514
use aptos_rust_sdk_types::api_types::transaction_authenticator::{
1615
AccountAuthenticator, AuthenticationKey, TransactionAuthenticator,
1716
};
18-
use ed25519_dalek::Digest;
1917
use std::str::FromStr;
2018
use std::vec;
2119

@@ -73,14 +71,7 @@ mod tests {
7371
chain_id,
7472
);
7573

76-
let mut sha3 = Sha3_256::new();
77-
sha3.update("APTOS::RawTransaction".as_bytes());
78-
let hash = sha3.finalize().to_vec();
79-
let mut bytes = vec![];
80-
bcs::serialize_into(&mut bytes, &raw_txn).unwrap();
81-
let mut message = vec![];
82-
message.extend(hash);
83-
message.extend(bytes);
74+
let message = raw_txn.generate_signing_message().unwrap();
8475

8576
let signature = key.sign_message(&message);
8677

@@ -159,14 +150,7 @@ mod tests {
159150
fee_payer_address,
160151
);
161152

162-
let mut sha3 = Sha3_256::new();
163-
sha3.update("APTOS::RawTransactionWithData".as_bytes());
164-
let hash = sha3.finalize().to_vec();
165-
let mut bytes = vec![];
166-
bcs::serialize_into(&mut bytes, &raw_txn_with_data).unwrap();
167-
let mut message = vec![];
168-
message.extend(hash);
169-
message.extend(bytes);
153+
let message = raw_txn_with_data.generate_signing_message().unwrap();
170154

171155
let txn_sender_signature = txn_sender_key.sign_message(&message);
172156

0 commit comments

Comments
 (0)