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::InvalidZkLoginAuthenticatorError;
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::Digest;
169pub use digest::DigestParseError;
170pub use digest::SigningDigest;
171pub use effects::ChangedObject;
172pub use effects::IdOperation;
173pub use effects::ModifiedAtVersion;
174pub use effects::ObjectIn;
175pub use effects::ObjectOut;
176pub use effects::ObjectReferenceWithOwner;
177pub use effects::TransactionEffects;
178pub use effects::TransactionEffectsV1;
179pub use effects::TransactionEffectsV2;
180pub use effects::UnchangedConsensusKind;
181pub use effects::UnchangedConsensusObject;
182pub use events::BalanceChange;
183pub use events::Event;
184pub use events::TransactionEvents;
185pub use execution_status::CommandArgumentError;
186pub use execution_status::ExecutionError;
187pub use execution_status::ExecutionStatus;
188pub use execution_status::MoveLocation;
189pub use execution_status::PackageUpgradeError;
190pub use execution_status::TypeArgumentError;
191pub use gas::GasCostSummary;
192pub use object::GenesisObject;
193pub use object::MovePackage;
194pub use object::MoveStruct;
195pub use object::Object;
196pub use object::ObjectData;
197pub use object::ObjectReference;
198pub use object::ObjectType;
199pub use object::Owner;
200pub use object::TypeOrigin;
201pub use object::UpgradeInfo;
202pub use object::Version;
203pub use transaction::ActiveJwk;
204pub use transaction::Argument;
205pub use transaction::AuthenticatorStateExpire;
206pub use transaction::AuthenticatorStateUpdate;
207pub use transaction::CanceledTransaction;
208pub use transaction::CanceledTransactionV2;
209pub use transaction::ChangeEpoch;
210pub use transaction::Command;
211pub use transaction::ConsensusCommitPrologue;
212pub use transaction::ConsensusCommitPrologueV2;
213pub use transaction::ConsensusCommitPrologueV3;
214pub use transaction::ConsensusCommitPrologueV4;
215pub use transaction::ConsensusDeterminedVersionAssignments;
216pub use transaction::EndOfEpochTransactionKind;
217pub use transaction::ExecutionTimeObservationKey;
218pub use transaction::ExecutionTimeObservations;
219pub use transaction::GasPayment;
220pub use transaction::GenesisTransaction;
221pub use transaction::Input;
222pub use transaction::MakeMoveVector;
223pub use transaction::MergeCoins;
224pub use transaction::MoveCall;
225pub use transaction::ProgrammableTransaction;
226pub use transaction::Publish;
227pub use transaction::RandomnessStateUpdate;
228pub use transaction::SignedTransaction;
229pub use transaction::SplitCoins;
230pub use transaction::SystemPackage;
231pub use transaction::Transaction;
232pub use transaction::TransactionExpiration;
233pub use transaction::TransactionKind;
234pub use transaction::TransferObjects;
235pub use transaction::Upgrade;
236pub use transaction::ValidatorExecutionTimeObservation;
237pub use transaction::VersionAssignment;
238pub use transaction::VersionAssignmentV2;
239pub use type_tag::Identifier;
240pub use type_tag::StructTag;
241pub use type_tag::TypeParseError;
242pub use type_tag::TypeTag;
243
244#[cfg(feature = "serde")]
245#[cfg_attr(doc_cfg, doc(cfg(feature = "serde")))]
246pub(crate) use transaction::SignedTransactionWithIntentMessage;
247
248#[cfg(test)]
249mod serialization_proptests;
250
251#[derive(Clone, Debug, PartialEq, Eq)]
252pub struct PersonalMessage<'a>(pub std::borrow::Cow<'a, [u8]>);
253
254#[cfg(feature = "serde")]
255mod _serde {
256 use base64ct::Base64;
257 use base64ct::Encoding;
258 use serde::Deserialize;
259 use serde::Deserializer;
260 use serde::Serialize;
261 use serde::Serializer;
262 use serde_with::Bytes;
263 use serde_with::DeserializeAs;
264 use serde_with::SerializeAs;
265 use std::borrow::Cow;
266
267 pub(crate) type ReadableBase64Encoded =
268 ::serde_with::As<::serde_with::IfIsHumanReadable<Base64Encoded, ::serde_with::Bytes>>;
269
270 pub(crate) struct Base64Encoded;
271
272 impl<T: AsRef<[u8]>> SerializeAs<T> for Base64Encoded {
273 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
274 where
275 S: Serializer,
276 {
277 let bytes = source.as_ref();
278 let b64 = Base64::encode_string(bytes);
279 b64.serialize(serializer)
280 }
281 }
282
283 impl<'de, T: TryFrom<Vec<u8>>> DeserializeAs<'de, T> for Base64Encoded {
284 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
285 where
286 D: Deserializer<'de>,
287 {
288 let b64: Cow<'de, str> = Deserialize::deserialize(deserializer)?;
289 let bytes = Base64::decode_vec(&b64).map_err(serde::de::Error::custom)?;
290 let length = bytes.len();
291 T::try_from(bytes).map_err(|_| {
292 serde::de::Error::custom(format_args!(
293 "Can't convert a Byte Vector of length {length} to the output type."
294 ))
295 })
296 }
297 }
298
299 pub(crate) struct BinaryRoaringBitmap;
302
303 impl SerializeAs<roaring::RoaringBitmap> for BinaryRoaringBitmap {
304 fn serialize_as<S>(
305 source: &roaring::RoaringBitmap,
306 serializer: S,
307 ) -> Result<S::Ok, S::Error>
308 where
309 S: Serializer,
310 {
311 let mut bytes = vec![];
312
313 source
314 .serialize_into(&mut bytes)
315 .map_err(serde::ser::Error::custom)?;
316 Bytes::serialize_as(&bytes, serializer)
317 }
318 }
319
320 impl<'de> DeserializeAs<'de, roaring::RoaringBitmap> for BinaryRoaringBitmap {
321 fn deserialize_as<D>(deserializer: D) -> Result<roaring::RoaringBitmap, D::Error>
322 where
323 D: Deserializer<'de>,
324 {
325 let bytes: Cow<'de, [u8]> = Bytes::deserialize_as(deserializer)?;
326 roaring::RoaringBitmap::deserialize_from(&bytes[..]).map_err(serde::de::Error::custom)
327 }
328 }
329
330 pub(crate) struct Base64RoaringBitmap;
331
332 impl SerializeAs<roaring::RoaringBitmap> for Base64RoaringBitmap {
333 fn serialize_as<S>(
334 source: &roaring::RoaringBitmap,
335 serializer: S,
336 ) -> Result<S::Ok, S::Error>
337 where
338 S: Serializer,
339 {
340 let mut bytes = vec![];
341
342 source
343 .serialize_into(&mut bytes)
344 .map_err(serde::ser::Error::custom)?;
345 let b64 = Base64::encode_string(&bytes);
346 b64.serialize(serializer)
347 }
348 }
349
350 impl<'de> DeserializeAs<'de, roaring::RoaringBitmap> for Base64RoaringBitmap {
351 fn deserialize_as<D>(deserializer: D) -> Result<roaring::RoaringBitmap, D::Error>
352 where
353 D: Deserializer<'de>,
354 {
355 let b64: Cow<'de, str> = Deserialize::deserialize(deserializer)?;
356 let bytes = Base64::decode_vec(&b64).map_err(serde::de::Error::custom)?;
357 roaring::RoaringBitmap::deserialize_from(&bytes[..]).map_err(serde::de::Error::custom)
358 }
359 }
360
361 pub(crate) use super::SignedTransactionWithIntentMessage;
362}
363
364#[doc(hidden)]
367pub use roaring;