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