1#![cfg_attr(doc_cfg, feature(doc_cfg))]
95mod address;
99mod checkpoint;
100mod crypto;
101mod digest;
102mod effects;
103mod events;
104mod execution_status;
105pub mod framework;
106mod gas;
107mod object;
108mod object_id;
109mod transaction;
110mod type_tag;
111mod u256;
112
113#[cfg(feature = "hash")]
114#[cfg_attr(doc_cfg, doc(cfg(feature = "hash")))]
115pub mod hash;
116
117pub use address::Address;
118pub use address::AddressParseError;
119pub use checkpoint::CheckpointCommitment;
120pub use checkpoint::CheckpointContents;
121pub use checkpoint::CheckpointData;
122pub use checkpoint::CheckpointSequenceNumber;
123pub use checkpoint::CheckpointSummary;
124pub use checkpoint::CheckpointTimestamp;
125pub use checkpoint::CheckpointTransaction;
126pub use checkpoint::CheckpointTransactionInfo;
127pub use checkpoint::EndOfEpochData;
128pub use checkpoint::EpochId;
129pub use checkpoint::ProtocolVersion;
130pub use checkpoint::SignedCheckpointSummary;
131pub use checkpoint::StakeUnit;
132pub use crypto::Bls12381PublicKey;
133pub use crypto::Bls12381Signature;
134pub use crypto::Bn254FieldElement;
135pub use crypto::CircomG1;
136pub use crypto::CircomG2;
137pub use crypto::Ed25519PublicKey;
138pub use crypto::Ed25519Signature;
139pub use crypto::Intent;
140pub use crypto::IntentAppId;
141pub use crypto::IntentScope;
142pub use crypto::IntentVersion;
143pub use crypto::Jwk;
144pub use crypto::JwkId;
145pub use crypto::MultisigAggregatedSignature;
146pub use crypto::MultisigCommittee;
147pub use crypto::MultisigMember;
148pub use crypto::MultisigMemberPublicKey;
149pub use crypto::MultisigMemberSignature;
150pub use crypto::PasskeyAuthenticator;
151pub use crypto::PasskeyPublicKey;
152pub use crypto::Secp256k1PublicKey;
153pub use crypto::Secp256k1Signature;
154pub use crypto::Secp256r1PublicKey;
155pub use crypto::Secp256r1Signature;
156pub use crypto::SignatureScheme;
157pub use crypto::SimpleSignature;
158pub use crypto::UserSignature;
159pub use crypto::ValidatorAggregatedSignature;
160pub use crypto::ValidatorCommittee;
161pub use crypto::ValidatorCommitteeMember;
162pub use crypto::ValidatorSignature;
163pub use crypto::ZkLoginAuthenticator;
164pub use crypto::ZkLoginClaim;
165pub use crypto::ZkLoginInputs;
166pub use crypto::ZkLoginProof;
167pub use crypto::ZkLoginPublicIdentifier;
168pub use digest::CheckpointContentsDigest;
169pub use digest::CheckpointDigest;
170pub use digest::ConsensusCommitDigest;
171pub use digest::Digest;
172pub use digest::DigestParseError;
173pub use digest::EffectsAuxiliaryDataDigest;
174pub use digest::ObjectDigest;
175pub use digest::SigningDigest;
176pub use digest::TransactionDigest;
177pub use digest::TransactionEffectsDigest;
178pub use digest::TransactionEventsDigest;
179pub use effects::ChangedObject;
180pub use effects::IdOperation;
181pub use effects::ModifiedAtVersion;
182pub use effects::ObjectIn;
183pub use effects::ObjectOut;
184pub use effects::ObjectReferenceWithOwner;
185pub use effects::TransactionEffects;
186pub use effects::TransactionEffectsV1;
187pub use effects::TransactionEffectsV2;
188pub use effects::UnchangedSharedKind;
189pub use effects::UnchangedSharedObject;
190pub use events::BalanceChange;
191pub use events::Event;
192pub use events::TransactionEvents;
193pub use execution_status::CommandArgumentError;
194pub use execution_status::ExecutionError;
195pub use execution_status::ExecutionStatus;
196pub use execution_status::MoveLocation;
197pub use execution_status::PackageUpgradeError;
198pub use execution_status::TypeArgumentError;
199pub use gas::GasCostSummary;
200pub use object::GenesisObject;
201pub use object::MovePackage;
202pub use object::MoveStruct;
203pub use object::Object;
204pub use object::ObjectData;
205pub use object::ObjectReference;
206pub use object::ObjectType;
207pub use object::Owner;
208pub use object::TypeOrigin;
209pub use object::UpgradeInfo;
210pub use object::Version;
211pub use object_id::ObjectId;
212pub use transaction::ActiveJwk;
213pub use transaction::Argument;
214pub use transaction::AuthenticatorStateExpire;
215pub use transaction::AuthenticatorStateUpdate;
216pub use transaction::CanceledTransaction;
217pub use transaction::CanceledTransactionV2;
218pub use transaction::ChangeEpoch;
219pub use transaction::Command;
220pub use transaction::ConsensusCommitPrologue;
221pub use transaction::ConsensusCommitPrologueV2;
222pub use transaction::ConsensusCommitPrologueV3;
223pub use transaction::ConsensusCommitPrologueV4;
224pub use transaction::ConsensusDeterminedVersionAssignments;
225pub use transaction::EndOfEpochTransactionKind;
226pub use transaction::ExecutionTimeObservationKey;
227pub use transaction::ExecutionTimeObservations;
228pub use transaction::GasPayment;
229pub use transaction::GenesisTransaction;
230pub use transaction::Input;
231pub use transaction::MakeMoveVector;
232pub use transaction::MergeCoins;
233pub use transaction::MoveCall;
234pub use transaction::ProgrammableTransaction;
235pub use transaction::Publish;
236pub use transaction::RandomnessStateUpdate;
237pub use transaction::SignedTransaction;
238pub use transaction::SplitCoins;
239pub use transaction::SystemPackage;
240pub use transaction::Transaction;
241pub use transaction::TransactionExpiration;
242pub use transaction::TransactionKind;
243pub use transaction::TransferObjects;
244pub use transaction::Upgrade;
245pub use transaction::ValidatorExecutionTimeObservation;
246pub use transaction::VersionAssignment;
247pub use transaction::VersionAssignmentV2;
248pub use type_tag::Identifier;
249pub use type_tag::StructTag;
250pub use type_tag::TypeParseError;
251pub use type_tag::TypeTag;
252
253#[cfg(feature = "serde")]
254#[cfg_attr(doc_cfg, doc(cfg(feature = "serde")))]
255pub(crate) use transaction::SignedTransactionWithIntentMessage;
256
257#[cfg(test)]
258mod serialization_proptests;
259
260#[derive(Clone, Debug, PartialEq, Eq)]
261pub struct PersonalMessage<'a>(pub std::borrow::Cow<'a, [u8]>);
262
263#[cfg(feature = "serde")]
264mod _serde {
265 use base64ct::Base64;
266 use base64ct::Encoding;
267 use serde::Deserialize;
268 use serde::Deserializer;
269 use serde::Serialize;
270 use serde::Serializer;
271 use serde_with::Bytes;
272 use serde_with::DeserializeAs;
273 use serde_with::SerializeAs;
274 use std::borrow::Cow;
275
276 pub(crate) type ReadableDisplay =
277 ::serde_with::As<::serde_with::IfIsHumanReadable<::serde_with::DisplayFromStr>>;
278
279 pub(crate) type OptionReadableDisplay =
280 ::serde_with::As<Option<::serde_with::IfIsHumanReadable<::serde_with::DisplayFromStr>>>;
281
282 pub(crate) type ReadableBase64Encoded =
283 ::serde_with::As<::serde_with::IfIsHumanReadable<Base64Encoded, ::serde_with::Bytes>>;
284
285 pub(crate) struct Base64Encoded;
286
287 impl<T: AsRef<[u8]>> SerializeAs<T> for Base64Encoded {
288 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
289 where
290 S: Serializer,
291 {
292 let bytes = source.as_ref();
293 let b64 = Base64::encode_string(bytes);
294 b64.serialize(serializer)
295 }
296 }
297
298 impl<'de, T: TryFrom<Vec<u8>>> DeserializeAs<'de, T> for Base64Encoded {
299 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
300 where
301 D: Deserializer<'de>,
302 {
303 let b64: Cow<'de, str> = Deserialize::deserialize(deserializer)?;
304 let bytes = Base64::decode_vec(&b64).map_err(serde::de::Error::custom)?;
305 let length = bytes.len();
306 T::try_from(bytes).map_err(|_| {
307 serde::de::Error::custom(format_args!(
308 "Can't convert a Byte Vector of length {length} to the output type."
309 ))
310 })
311 }
312 }
313
314 pub(crate) struct BinaryRoaringBitmap;
317
318 impl SerializeAs<roaring::RoaringBitmap> for BinaryRoaringBitmap {
319 fn serialize_as<S>(
320 source: &roaring::RoaringBitmap,
321 serializer: S,
322 ) -> Result<S::Ok, S::Error>
323 where
324 S: Serializer,
325 {
326 let mut bytes = vec![];
327
328 source
329 .serialize_into(&mut bytes)
330 .map_err(serde::ser::Error::custom)?;
331 Bytes::serialize_as(&bytes, serializer)
332 }
333 }
334
335 impl<'de> DeserializeAs<'de, roaring::RoaringBitmap> for BinaryRoaringBitmap {
336 fn deserialize_as<D>(deserializer: D) -> Result<roaring::RoaringBitmap, D::Error>
337 where
338 D: Deserializer<'de>,
339 {
340 let bytes: Cow<'de, [u8]> = Bytes::deserialize_as(deserializer)?;
341 roaring::RoaringBitmap::deserialize_from(&bytes[..]).map_err(serde::de::Error::custom)
342 }
343 }
344
345 pub(crate) struct Base64RoaringBitmap;
346
347 impl SerializeAs<roaring::RoaringBitmap> for Base64RoaringBitmap {
348 fn serialize_as<S>(
349 source: &roaring::RoaringBitmap,
350 serializer: S,
351 ) -> Result<S::Ok, S::Error>
352 where
353 S: Serializer,
354 {
355 let mut bytes = vec![];
356
357 source
358 .serialize_into(&mut bytes)
359 .map_err(serde::ser::Error::custom)?;
360 let b64 = Base64::encode_string(&bytes);
361 b64.serialize(serializer)
362 }
363 }
364
365 impl<'de> DeserializeAs<'de, roaring::RoaringBitmap> for Base64RoaringBitmap {
366 fn deserialize_as<D>(deserializer: D) -> Result<roaring::RoaringBitmap, D::Error>
367 where
368 D: Deserializer<'de>,
369 {
370 let b64: Cow<'de, str> = Deserialize::deserialize(deserializer)?;
371 let bytes = Base64::decode_vec(&b64).map_err(serde::de::Error::custom)?;
372 roaring::RoaringBitmap::deserialize_from(&bytes[..]).map_err(serde::de::Error::custom)
373 }
374 }
375
376 pub(crate) use super::SignedTransactionWithIntentMessage;
377}