diff --git a/nssa/src/public_transaction.rs b/nssa/src/public_transaction.rs
deleted file mode 100644
index 33a054f..0000000
--- a/nssa/src/public_transaction.rs
+++ /dev/null
@@ -1,98 +0,0 @@
-use nssa_core::{account::Nonce, program::ProgramId};
-use serde::{Deserialize, Serialize};
-use sha2::{Digest, digest::FixedOutput};
-
-use crate::{
- address::Address,
- signature::{PrivateKey, PublicKey, Signature},
-};
-
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
-pub struct Message {
- pub(crate) program_id: ProgramId,
- pub(crate) addresses: Vec
,
- pub(crate) nonces: Vec,
- // TODO: change to Vec for general programs
- pub(crate) instruction_data: u128,
-}
-
-impl Message {
- pub fn new(
- program_id: ProgramId,
- addresses: Vec,
- nonces: Vec,
- instruction_data: u128,
- ) -> Self {
- Self {
- program_id,
- addresses,
- nonces,
- instruction_data,
- }
- }
-
- fn to_bytes(&self) -> Vec {
- //TODO: implement
- vec![0, 0]
- }
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
-pub struct WitnessSet {
- pub(crate) signatures_and_public_keys: Vec<(Signature, PublicKey)>,
-}
-
-impl WitnessSet {
- pub fn for_message(message: &Message, private_keys: &[&PrivateKey]) -> Self {
- let message_bytes = message.to_bytes();
- let signatures_and_public_keys = private_keys
- .iter()
- .map(|&key| (Signature::new(key, &message_bytes), PublicKey::new(key)))
- .collect();
- Self {
- signatures_and_public_keys,
- }
- }
-
- pub fn iter_signatures(&self) -> impl Iterator- {
- self.signatures_and_public_keys.iter()
- }
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
-pub struct PublicTransaction {
- message: Message,
- witness_set: WitnessSet,
-}
-
-impl PublicTransaction {
- pub fn message(&self) -> &Message {
- &self.message
- }
-
- pub fn witness_set(&self) -> &WitnessSet {
- &self.witness_set
- }
-
- pub(crate) fn signer_addresses(&self) -> Vec {
- self.witness_set
- .signatures_and_public_keys
- .iter()
- .map(|(_, public_key)| Address::from_public_key(public_key))
- .collect()
- }
-
- pub fn new(message: Message, witness_set: WitnessSet) -> Self {
- Self {
- message,
- witness_set,
- }
- }
-
- pub fn hash(&self) -> [u8; 32] {
- let bytes = serde_cbor::to_vec(&self).unwrap();
- let mut hasher = sha2::Sha256::new();
- hasher.update(&bytes);
- hasher.finalize_fixed().into()
- }
-}
diff --git a/nssa/src/public_transaction/message.rs b/nssa/src/public_transaction/message.rs
new file mode 100644
index 0000000..9dd7f2e
--- /dev/null
+++ b/nssa/src/public_transaction/message.rs
@@ -0,0 +1,29 @@
+use nssa_core::{account::Nonce, program::ProgramId};
+use serde::{Deserialize, Serialize};
+
+use crate::Address;
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
+pub struct Message {
+ pub(crate) program_id: ProgramId,
+ pub(crate) addresses: Vec,
+ pub(crate) nonces: Vec,
+ // TODO: change to Vec for general programs
+ pub(crate) instruction_data: u128,
+}
+
+impl Message {
+ pub fn new(
+ program_id: ProgramId,
+ addresses: Vec,
+ nonces: Vec,
+ instruction_data: u128,
+ ) -> Self {
+ Self {
+ program_id,
+ addresses,
+ nonces,
+ instruction_data,
+ }
+ }
+}
diff --git a/nssa/src/public_transaction/mod.rs b/nssa/src/public_transaction/mod.rs
new file mode 100644
index 0000000..9249f3b
--- /dev/null
+++ b/nssa/src/public_transaction/mod.rs
@@ -0,0 +1,52 @@
+use nssa_core::{account::Nonce, program::ProgramId};
+use serde::{Deserialize, Serialize};
+use sha2::{Digest, digest::FixedOutput};
+
+use crate::{
+ address::Address,
+ signature::{PrivateKey, PublicKey, Signature},
+};
+
+mod message;
+mod witness_set;
+
+pub use message::Message;
+pub use witness_set::WitnessSet;
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
+pub struct PublicTransaction {
+ message: Message,
+ witness_set: WitnessSet,
+}
+
+impl PublicTransaction {
+ pub fn message(&self) -> &Message {
+ &self.message
+ }
+
+ pub fn witness_set(&self) -> &WitnessSet {
+ &self.witness_set
+ }
+
+ pub(crate) fn signer_addresses(&self) -> Vec {
+ self.witness_set
+ .signatures_and_public_keys
+ .iter()
+ .map(|(_, public_key)| Address::from_public_key(public_key))
+ .collect()
+ }
+
+ pub fn new(message: Message, witness_set: WitnessSet) -> Self {
+ Self {
+ message,
+ witness_set,
+ }
+ }
+
+ pub fn hash(&self) -> [u8; 32] {
+ let bytes = serde_cbor::to_vec(&self).unwrap();
+ let mut hasher = sha2::Sha256::new();
+ hasher.update(&bytes);
+ hasher.finalize_fixed().into()
+ }
+}
diff --git a/nssa/src/public_transaction/witness_set.rs b/nssa/src/public_transaction/witness_set.rs
new file mode 100644
index 0000000..9cdb312
--- /dev/null
+++ b/nssa/src/public_transaction/witness_set.rs
@@ -0,0 +1,30 @@
+use serde::{Deserialize, Serialize};
+
+use crate::{PrivateKey, PublicKey, Signature, public_transaction::Message};
+
+#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
+pub struct WitnessSet {
+ pub(crate) signatures_and_public_keys: Vec<(Signature, PublicKey)>,
+}
+
+fn serialize_message_to_bytes(message: &Message) -> Vec {
+ //TODO: implement
+ vec![0, 0]
+}
+
+impl WitnessSet {
+ pub fn for_message(message: &Message, private_keys: &[&PrivateKey]) -> Self {
+ let message_bytes = serialize_message_to_bytes(&message);
+ let signatures_and_public_keys = private_keys
+ .iter()
+ .map(|&key| (Signature::new(key, &message_bytes), PublicKey::new(key)))
+ .collect();
+ Self {
+ signatures_and_public_keys,
+ }
+ }
+
+ pub fn iter_signatures(&self) -> impl Iterator
- {
+ self.signatures_and_public_keys.iter()
+ }
+}