Skip to main content

sumchain_primitives/
lib.rs

1//! # SUM Chain Primitives
2//!
3//! Core types and data structures for the SUM Chain blockchain.
4//! This crate provides fundamental building blocks used throughout the chain.
5
6pub mod address;
7pub mod agreement;
8pub mod block;
9pub mod docclass;
10pub mod education;
11pub mod employment;
12pub mod equity;
13pub mod finance;
14pub mod hash;
15pub mod healthcare;
16pub mod inference_attestation;
17pub mod legal;
18pub mod messaging;
19pub mod node_registry;
20pub mod policy_account;
21pub mod property;
22pub mod receipt;
23pub mod staking;
24pub mod storage_metadata;
25pub mod tax;
26pub mod transaction;
27
28pub use address::Address;
29pub use block::{Block, BlockHeader};
30pub use hash::Hash;
31pub use receipt::{Receipt, TxStatus};
32pub use staking::{
33    AddStakeData, ClaimDelegationRewardsData, CreateValidatorData, DelegateData, DelegationInfo,
34    DoubleSignEvidence, DowntimeEvidence, EvidenceType, SlashingRecord, StakingOperation,
35    StakingParams, StakingTxData, SubmitEvidenceData, UnbondingDelegation, UndelegateData,
36    UnstakeData, UpdateValidatorData, ValidatorInfo, ValidatorSet, ValidatorSetEntry,
37    ValidatorSigningInfo, ValidatorStatus, WithdrawUnbondedData,
38};
39pub use messaging::{
40    validate_message_format, AttachmentType, BlockSenderData, ClaimPaymentData, ContactData,
41    ContentType, ExternalProtocol, FundRegistryData, InboxFilter, MessageEvent, MessageFlags,
42    MessageHeader, MessagingOperation, MessagingTxData, PendingPayment, QuotaInfo,
43    RegisteredPublicKey, RegisterPublicKeyData, ReportSpamData, SendMessageData,
44    SendMessageWithPaymentData, SetDailyQuotaData, SetInboxFilterData, SetMaxMessageSizeData,
45    SetMinTrustStakeData, SetSponsorshipEnabledData, SpamReport, SponsoredMessage,
46    StakeForTrustData, UnstakeData as MessagingUnstakeData, UpdatePublicKeyData,
47    DEFAULT_DAILY_QUOTA, DEFAULT_MAX_MESSAGE_SIZE, DEFAULT_MIN_TRUST_STAKE,
48    SRC201_HEADER_SIZE, SRC201_KDF_CONTEXT, SRC201_MAGIC, SRC201_NONCE_SIZE, SRC201_TAG_SIZE,
49    SRC201_VERSION,
50};
51pub use transaction::{
52    NftOperation, NftTxData, SignedTransaction, TokenOperation, TokenTxData, Transaction,
53    TransactionV2, TxInner, TxPayload, TxType,
54};
55pub use docclass::{
56    AcademicCredential, CredentialAttribute, CredentialId, CredentialMetadata, DocClassEvent,
57    DocClassIssuer, DocClassIssuerStatus, DocClassIssuerType, DocClassOperation, DocClassTxData,
58    DocSubcode, EligibilityAttestation, EligibilityType, IdentityKey, IdentityRoot, IdentityStatus,
59    IssuerKey, KeyPurpose, KeyType, RevocationReason, RevocationRecord, RevocationStatus,
60    ServiceEndpoint, ZkProofInputs, generate_commitment, generate_credential_id, generate_nullifier,
61    generate_subject_commitment,
62};
63pub use tax::{
64    TaxClaimTypeEntry, TaxIssuerClass, TaxIssuer, TaxPolicy, TaxPolicyTemplate,
65    TaxProofEnvelope, TaxDisclosureEnvelope, TaxEvent, TaxOperation, TaxTxData,
66    TaxRiskLevel, TaxIssuerStatus, TaxVerificationResult, EncryptionAlgorithm,
67    IssuerRequirements, QuorumRule, ClaimTypeStatus,
68};
69pub use equity::{
70    EntityProfile, OrgType, GovernanceAction, GovernanceActionType, EquityToken, ShareClassType,
71    EquityControllerConfig, ControllerModel, LockupInfo, CorporateAction, CorporateActionType,
72    OwnershipSnapshot, OwnershipProofEnvelope, EquityEvent, EquityOperation, EquityTxData,
73    VestingSchedule, TradingWindow, EntityStatus, TokenStatus, CorporateActionStatus,
74    GovernanceActionStatus, OwnershipProofType, StockSplitParams, DividendDeclareParams,
75};
76pub use agreement::{
77    AgreementCommitment, AgreementEvent, AgreementOperation, AgreementProofEnvelope,
78    AgreementProofProfile, AgreementProofType, AgreementRole, AgreementStatus, AgreementTxData,
79    AttachmentRef, AttestationIssuerClass, AttestationPacket, AttestationStatus, AttestationTarget,
80    AttestationType, EncryptionAlgorithm as AgreementEncryptionAlgorithm, EncryptionMeta,
81    ExecutorLink, ExecutorState, IpActionStatus, IpActionType, IpAssetType, IpRightsAction,
82    PartyBinding, PartyRef, PartySignature, SignatureType,
83};
84pub use legal::{
85    BenefitDetermination, BenefitStatus, BenefitType, CaseAnchor, CaseStatus, CaseType, CourtOrder,
86    LegalEvent, LegalIssuerClass, LegalOperation, LegalProofEnvelope, LegalProofProfile,
87    LegalProofType, LegalTxData, OrderStatus, OrderType, ProcessEvent, ProcessEventStatus,
88    ProcessEventType,
89};
90pub use property::{
91    AssetAnchor, AssetId, AssetStatus, AssetType, ClaimId, ClaimStatus, ClaimType, CoverageId,
92    CoverageStatus, CoverageType, Encumbrance, EncumbranceId, EncumbranceStatus, EncumbranceType,
93    InsuranceClaim, InsuranceCoverage, PriorityPosition, PropertyEvent, PropertyIssuerClass,
94    PropertyOperation, PropertyProofEnvelope, PropertyProofProfile, PropertyProofType,
95    PropertyTxData, TitleEvent, TitleEventId, TitleEventStatus, TitleEventType,
96};
97pub use healthcare::{
98    ConsentEnvelope, ConsentId, ConsentStatus, ConsentType, CoverageTier, DisclosureScope,
99    HealthcareEvent, HealthcareIssuerClass, HealthcareOperation, HealthcareProofEnvelope,
100    HealthcareProofProfile, HealthcareProofType, HealthcareTxData, MembershipId, MembershipRecord,
101    MembershipStatus, MembershipType, NetworkStatus, Prescription, PrescriptionId,
102    PrescriptionStatus, PrescriptionType, ProviderId, ProviderProfile, ProviderStatus, ProviderType,
103};
104pub use employment::{
105    EmploymentCredential, EmploymentEvent, EmploymentId, EmploymentIssuerClass,
106    EmploymentIssuerProfile, EmploymentOperation, EmploymentProofEnvelope, EmploymentProofProfile,
107    EmploymentProofType, EmploymentRiskLevel, EmploymentStatus, EmploymentTxData, EmploymentType,
108    IncomeAttestation, IncomeAttestationId, IncomeBracket, IncomePeriod, IssuerStatus as EmploymentIssuerStatus,
109};
110pub use finance::{
111    AccountStanding, AccountType, AddressProof, AddressProofId, AddressProofType, AmlRisk,
112    BalanceBracket, BankStandingCredential, BankStandingId, FinanceEvent, FinanceIssuerClass,
113    FinanceIssuerProfile, FinanceIssuerStatus, FinanceOperation, FinanceProofEnvelope,
114    FinanceProofProfile, FinanceProofType, FinanceRiskLevel, FinanceTxData, KycAttestation,
115    KycAttestationId, KycLevel, KycStatus,
116};
117pub use node_registry::{
118    NodeRecord, NodeRegistryOperation, NodeRegistryOperationV2, NodeRegistryTxData,
119    NodeRegistryV2TxData, NodeRole, NodeStatus,
120};
121pub use storage_metadata::{
122    assigned_archives, assigned_archives_presorted, is_archive_assigned_to_chunk, AccessEntryV2,
123    EncryptedKeyBundleV2, FileLifecycleV2, FileVisibilityV2, StorageChallenge, StorageMetadata,
124    StorageMetadataOperation, StorageMetadataOperationV2, StorageMetadataTxData, StorageMetadataV2,
125    StorageMetadataV2TxData, CHALLENGE_INTERVAL_BLOCKS, CHALLENGE_REWARD, CHALLENGE_TTL_BLOCKS,
126    CHUNK_SIZE, SLASH_PERCENTAGE, SNIP_V2_ASSIGNMENT_CONTEXT,
127};
128pub use policy_account::{
129    ActionClass, ApprovalThreshold, MemberApproval, PolicyAccount, PolicyAccountId,
130    PolicyAccountOperation, PolicyAccountStatus, PolicyAccountTxData, PolicyConfig, PolicyMember,
131    PolicyNonce, PolicyProfile, PolicyRule, Proposal, ProposalId, ProposalStatus,
132    MAX_APPROVALS, MAX_CUSTOM_RULES, MAX_MEMBERS, MAX_PROPOSAL_PAYLOAD_SIZE,
133};
134
135/// Chain ID type - identifies the network
136pub type ChainId = u64;
137
138/// Block height type
139pub type BlockHeight = u64;
140
141/// Nonce type for transactions
142pub type Nonce = u64;
143
144/// Balance/amount type - u128 supports large values
145pub type Balance = u128;
146
147/// Timestamp in milliseconds since Unix epoch
148pub type Timestamp = u64;
149
150/// Common result type for primitives
151pub type Result<T> = std::result::Result<T, PrimitiveError>;
152
153/// Errors that can occur in primitive operations
154#[derive(Debug, thiserror::Error)]
155pub enum PrimitiveError {
156    #[error("Invalid hex string: {0}")]
157    InvalidHex(String),
158
159    #[error("Invalid length: expected {expected}, got {got}")]
160    InvalidLength { expected: usize, got: usize },
161
162    #[error("Invalid base58 encoding: {0}")]
163    InvalidBase58(String),
164
165    #[error("Serialization error: {0}")]
166    SerializationError(String),
167
168    #[error("Invalid address checksum")]
169    InvalidChecksum,
170}