diff --git a/crates/sui-core/src/generate_format.rs b/crates/sui-core/src/generate_format.rs index 3d81953f3f74d..21d00d1a10da3 100644 --- a/crates/sui-core/src/generate_format.rs +++ b/crates/sui-core/src/generate_format.rs @@ -10,16 +10,27 @@ use move_core_types::language_storage::{ModuleId, StructTag, TypeTag}; use pretty_assertions::assert_str_eq; use rand::rngs::StdRng; use rand::SeedableRng; +use roaring::RoaringBitmap; use serde_reflection::{Registry, Result, Samples, Tracer, TracerConfig}; use shared_crypto::intent::{Intent, IntentMessage, PersonalMessage}; use std::str::FromStr; use std::{fs::File, io::Write}; +use sui_types::base_types::SuiAddress; +use sui_types::crypto::{ + AggregateAuthoritySignature, AuthorityQuorumSignInfo, AuthorityStrongQuorumSignInfo, +}; +use sui_types::effects::TransactionEvents; +use sui_types::event::Event; use sui_types::execution_status::{ CommandArgumentError, ExecutionFailureStatus, ExecutionStatus, PackageUpgradeError, TypeArgumentError, }; +use sui_types::full_checkpoint_content::{CheckpointData, CheckpointTransaction}; +use sui_types::messages_checkpoint::CertifiedCheckpointSummary; use sui_types::messages_grpc::ObjectInfoRequestKind; use sui_types::move_package::TypeOrigin; +use sui_types::object::Object; +use sui_types::transaction::{SenderSignedData, TransactionData}; use sui_types::type_input::{StructInput, TypeInput}; use sui_types::{ base_types::MoveObjectType_, @@ -66,6 +77,9 @@ fn get_registry() -> Result { let m = ModuleId::new(AccountAddress::ZERO, Identifier::new("foo").unwrap()); tracer.trace_value(&mut samples, &m).unwrap(); + tracer + .trace_value(&mut samples, &Identifier::new("foo").unwrap()) + .unwrap(); let (addr, kp): (_, AuthorityKeyPair) = get_key_pair(); let (s_addr, s_kp): (_, AccountKeyPair) = get_key_pair(); @@ -221,6 +235,47 @@ fn get_registry() -> Result { tracer.trace_type::(&samples).unwrap(); tracer.trace_type::(&samples).unwrap(); + let sender_data = SenderSignedData::new( + TransactionData::new_with_gas_coins( + TransactionKind::EndOfEpochTransaction(Vec::new()), + SuiAddress::ZERO, + Vec::new(), + 0, + 0, + ), + Vec::new(), + ); + tracer.trace_value(&mut samples, &sender_data).unwrap(); + + let quorum_sig: AuthorityStrongQuorumSignInfo = AuthorityQuorumSignInfo { + epoch: 0, + signature: AggregateAuthoritySignature::default(), + signers_map: RoaringBitmap::default(), + }; + tracer.trace_value(&mut samples, &quorum_sig).unwrap(); + + tracer + .trace_type::(&samples) + .unwrap(); + + let event = Event { + package_id: ObjectID::random(), + transaction_module: Identifier::new("foo").unwrap(), + sender: SuiAddress::ZERO, + type_: struct_tag.clone(), + contents: vec![0], + }; + tracer.trace_value(&mut samples, &event).unwrap(); + + tracer.trace_type::(&samples).unwrap(); + + tracer.trace_type::(&samples).unwrap(); + tracer + .trace_type::(&samples) + .unwrap(); + + tracer.trace_type::(&samples).unwrap(); + tracer.registry() } diff --git a/crates/sui-core/tests/staged/sui.yaml b/crates/sui-core/tests/staged/sui.yaml index 632a91e645dee..5899c80ea3805 100644 --- a/crates/sui-core/tests/staged/sui.yaml +++ b/crates/sui-core/tests/staged/sui.yaml @@ -42,6 +42,14 @@ AuthenticatorStateUpdate: TYPENAME: SequenceNumber AuthorityPublicKeyBytes: NEWTYPESTRUCT: BYTES +AuthorityQuorumSignInfo: + STRUCT: + - epoch: U64 + - signature: + TUPLEARRAY: + CONTENT: U8 + SIZE: 48 + - signers_map: BYTES CallArg: ENUM: 0: @@ -97,6 +105,15 @@ CheckpointContentsV1: SEQ: SEQ: TYPENAME: GenericSignature +CheckpointData: + STRUCT: + - checkpoint_summary: + TYPENAME: "sui_types::message_envelope::Envelope>" + - checkpoint_contents: + TYPENAME: CheckpointContents + - transactions: + SEQ: + TYPENAME: CheckpointTransaction CheckpointDigest: NEWTYPESTRUCT: TYPENAME: Digest @@ -121,6 +138,21 @@ CheckpointSummary: TYPENAME: EndOfEpochData - version_specific_data: SEQ: U8 +CheckpointTransaction: + STRUCT: + - transaction: + TYPENAME: "sui_types::message_envelope::Envelope" + - effects: + TYPENAME: TransactionEffects + - events: + OPTION: + TYPENAME: TransactionEvents + - input_objects: + SEQ: + TYPENAME: Object + - output_objects: + SEQ: + TYPENAME: Object Command: ENUM: 0: @@ -340,16 +372,20 @@ EndOfEpochTransactionKind: BridgeCommitteeInit: NEWTYPE: TYPENAME: SequenceNumber -Envelope: +Event: STRUCT: - - data: - TYPENAME: SenderSignedData - - auth_signature: - TYPENAME: EmptySignInfo + - package_id: + TYPENAME: ObjectID + - transaction_module: STR + - sender: + TYPENAME: SuiAddress + - type_: + TYPENAME: StructTag + - contents: BYTES ExecutionData: STRUCT: - transaction: - TYPENAME: Envelope + TYPENAME: "sui_types::message_envelope::Envelope" - effects: TYPENAME: TransactionEffects ExecutionDigests: @@ -640,6 +676,15 @@ MultiSigPublicKey: - TYPENAME: PublicKey - U8 - threshold: U16 +Object: + STRUCT: + - data: + TYPENAME: Data + - owner: + TYPENAME: Owner + - previous_transaction: + TYPENAME: TransactionDigest + - storage_rebate: U64 ObjectArg: ENUM: 0: @@ -985,6 +1030,11 @@ TransactionEffectsV2: - aux_data_digest: OPTION: TYPENAME: EffectsAuxDataDigest +TransactionEvents: + STRUCT: + - data: + SEQ: + TYPENAME: Event TransactionEventsDigest: NEWTYPESTRUCT: TYPENAME: Digest @@ -1153,4 +1203,16 @@ ZkLoginAuthenticatorAsBytes: ZkLoginPublicIdentifier: NEWTYPESTRUCT: SEQ: U8 +"sui_types::message_envelope::Envelope>": + STRUCT: + - data: + TYPENAME: CheckpointSummary + - auth_signature: + TYPENAME: AuthorityQuorumSignInfo +"sui_types::message_envelope::Envelope": + STRUCT: + - data: + TYPENAME: SenderSignedData + - auth_signature: + TYPENAME: EmptySignInfo diff --git a/crates/sui-types/src/message_envelope.rs b/crates/sui-types/src/message_envelope.rs index be4454367a344..97917c5750ab4 100644 --- a/crates/sui-types/src/message_envelope.rs +++ b/crates/sui-types/src/message_envelope.rs @@ -14,6 +14,7 @@ use crate::transaction::SenderSignedData; use fastcrypto::traits::KeyPair; use once_cell::sync::OnceCell; use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use serde_name::{DeserializeNameAdapter, SerializeNameAdapter}; use shared_crypto::intent::{Intent, IntentScope}; use std::fmt::{Debug, Display, Formatter}; use std::ops::{Deref, DerefMut}; @@ -30,6 +31,7 @@ pub trait Message { } #[derive(Clone, Debug, Eq, Serialize, Deserialize)] +#[serde(remote = "Envelope")] pub struct Envelope { #[serde(skip)] digest: OnceCell, @@ -38,6 +40,38 @@ pub struct Envelope { auth_signature: S, } +impl<'de, T, S> Deserialize<'de> for Envelope +where + T: Message + Deserialize<'de>, + S: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + Envelope::deserialize(DeserializeNameAdapter::new( + deserializer, + std::any::type_name::(), + )) + } +} + +impl Serialize for Envelope +where + T: Message + Serialize, + Sig: Serialize, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + Envelope::serialize( + self, + SerializeNameAdapter::new(serializer, std::any::type_name::()), + ) + } +} + impl Envelope { pub fn new_from_data_and_sig(data: T, sig: S) -> Self { Self { diff --git a/crates/sui-types/src/object.rs b/crates/sui-types/src/object.rs index 04146c2699e08..7c3d300aeb39f 100644 --- a/crates/sui-types/src/object.rs +++ b/crates/sui-types/src/object.rs @@ -578,6 +578,7 @@ pub struct ObjectInner { } #[derive(Eq, PartialEq, Debug, Clone, Deserialize, Serialize, Hash)] +#[serde(from = "ObjectInner")] pub struct Object(Arc); impl From for Object {