iuna

iuna - experimental devnet protocol
git clone https://iuna.jhx.app/git/iuna.git
Log | Files | Refs | README | LICENSE

domain.rs (5004B)


      1 #[cfg(test)]
      2 use std::collections::{BTreeMap, BTreeSet};
      3 
      4 mod blinded;
      5 mod block;
      6 mod fork;
      7 mod genesis;
      8 mod hex;
      9 mod history;
     10 mod ledger_apply;
     11 mod ledger_builders;
     12 mod ledger_chain;
     13 mod ledger_consensus;
     14 mod ledger_mempool;
     15 mod ledger_ops;
     16 mod ledger_pending;
     17 mod ledger_prepare;
     18 mod ledger_queries;
     19 mod ledger_reveal;
     20 mod ledger_state;
     21 mod mine_policy;
     22 mod mining;
     23 mod profile;
     24 mod protocol;
     25 mod reveal;
     26 mod selection;
     27 mod stratum;
     28 mod ticket;
     29 mod transaction;
     30 mod validation;
     31 mod vdf;
     32 mod wallet;
     33 use blinded::{ActiveBlindedTransaction, blinded_fee_share};
     34 #[cfg(test)]
     35 use blinded::{
     36     blinded_committer_fee_outpoint, blinded_executor_fee_outpoint, blinded_expiry_change_outpoint,
     37     blinded_reveal_bundle_signer_fee_outpoint, blinded_transaction_commitment,
     38     credit_blinded_fee_outputs, decrypt_blinded_payload, decrypt_blinded_transaction,
     39 };
     40 use block::LeaderProofPayload;
     41 pub use block::{
     42     Block, BurnLeaderRank, ChainSnapshot, ChainStatus, FinalizerMode, LeaderProof, PreparedBlock,
     43 };
     44 use fork::LeaderScore;
     45 #[cfg(test)]
     46 use genesis::balances_from_utxos;
     47 use genesis::genesis_allocation_outpoint;
     48 pub use hex::hex_hash;
     49 use hex::{decode_hex, decode_hex_array, hex_encode};
     50 pub use history::revealed_blinded_transactions;
     51 #[cfg(test)]
     52 use ledger_ops::estimated_block_selection_size_bytes;
     53 #[cfg(test)]
     54 use ledger_ops::fee_reward;
     55 #[cfg(test)]
     56 use ledger_ops::reward_outpoint;
     57 use ledger_ops::{
     58     apply_transaction, credit_reward_output, ensure_block_has_burn, ensure_block_has_burn_from,
     59     ensure_outputs_do_not_overflow, ensure_single_input_owner_for_inputs,
     60     recovery_vdf_seed_for_child, validate_genesis_burn_transaction, vdf_seed_for_child,
     61 };
     62 pub use ledger_state::Ledger;
     63 use ledger_state::unix_now_ms;
     64 #[cfg(test)]
     65 use mine_policy::MINE_RETARGET_WINDOW_BLOCKS;
     66 #[cfg(test)]
     67 use mine_policy::{
     68     MINE_MAX_ANCHOR_AGE_BLOCKS, MINE_MAX_RETARGET_STEP_BITS, MINE_MIN_DIFFICULTY_BITS,
     69 };
     70 use mining::{mine_payload, mine_signature};
     71 pub use profile::{GenesisBurn, LaunchProfile};
     72 pub use protocol::{
     73     Amount, BLINDED_COMMITTER_FEE_BPS, BLINDED_FEE_BPS_DENOMINATOR,
     74     BLINDED_REVEAL_BUNDLE_SIGNER_FEE_BPS, BLINDED_REVEAL_FINALIZER_FEE_BPS, BLOCK_REWARD,
     75     DEFAULT_FEE_PER_BYTE, DEFAULT_MINE_FEE, DEFAULT_TRANSACTION_FEE,
     76     MAX_BLINDED_TRANSACTION_EXPIRY_HEIGHTS, MAX_BLOCK_BYTES, MAX_PENDING_TRANSACTIONS,
     77     MAX_REVEAL_BUNDLE_BYTES, MAX_VDF_ROUNDS, MICRO_IUNA, MINE_ACTIONS_PER_ANCHOR_LIMIT,
     78     MINE_DIFFICULTY_BITS, MINE_FINALIZER_FEE, MINE_REWARD, RECOVERY_BLOCK_DELAY_MS,
     79     REVEAL_COMMITTEE_SIZE, TransactionSubmitOutcome, VDF_TARGET_BLOCK_MS,
     80 };
     81 use protocol::{
     82     BLINDED_KEY_BYTES, BLINDED_NONCE_BYTES, BLOCK_MEDIAN_TIME_PAST_WINDOW,
     83     DEFAULT_TICKET_EXPIRY_WINDOW, DEFAULT_TICKET_MATURITY_DELAY, FORK_FINALITY_DEPTH, HASH_BYTES,
     84     MAX_BLOCK_TIMESTAMP_FUTURE_DRIFT_MS, MAX_BLOCK_TRANSACTIONS, MAX_ORPHAN_TRANSACTIONS,
     85     PUBLIC_KEY_BYTES, SIGNATURE_BYTES,
     86 };
     87 use reveal::RevealBundlePayload;
     88 #[cfg(test)]
     89 use reveal::reveal_bundle_hashes;
     90 pub use reveal::{
     91     MaskedBlindedReveal, RevealBundle, RevealBundleSection, RevealBundleSignature,
     92     RevealCommitteeMember, default_reveal_bundle_hash,
     93 };
     94 use selection::BlockSelection;
     95 pub use stratum::{
     96     STRATUM_EXTRANONCE1_HEX, STRATUM_EXTRANONCE2_SIZE, StratumMineShare, StratumMineTemplate,
     97     pack_stratum_nonce,
     98 };
     99 use stratum::{hash_meets_difficulty, stratum_mine_header_bytes, stratum_mine_signature};
    100 #[cfg(test)]
    101 use ticket::consume_leader_ticket;
    102 use ticket::{BurnTicket, ticket_block_min_timestamp};
    103 pub use transaction::{
    104     BlindedReveal, BlindedTransaction, BuiltBlindedTransaction, MineSearchOutcome, OutPoint,
    105     OwnedBlindedTransaction, RevealedBlindedTransaction, Transaction, TxInput, TxOutput,
    106 };
    107 #[cfg(test)]
    108 use transaction::{
    109     UnsignedTxInput, UnsignedUtxoTransaction, signed_blinded_inputs, unsigned_inputs,
    110 };
    111 pub use validation::validate_address;
    112 use validation::{
    113     canonical_transaction_size_bytes, validate_hash, validate_protocol_id, validate_signature,
    114 };
    115 #[cfg(test)]
    116 use vdf::{
    117     MAX_VDF_RETARGET_OBSERVED_BLOCK_MS, MIN_VDF_RETARGET_OBSERVED_BLOCK_MS,
    118     VDF_RETARGET_DEADBAND_PERCENT, clamped_vdf_retarget_observed_block_ms, retarget_vdf_rounds,
    119     vdf_retarget_observed_block_ms,
    120 };
    121 pub use vdf::{run_vdf, verify_vdf};
    122 pub use wallet::Wallet;
    123 
    124 pub fn reveal_committee_slot_count(eligible_rank_count: usize) -> usize {
    125     eligible_rank_count.min(REVEAL_COMMITTEE_SIZE)
    126 }
    127 
    128 pub fn blinded_reveal_finalizer_fee(
    129     fee: Amount,
    130     included_bundle_count: usize,
    131     available_bundle_slots: usize,
    132 ) -> Amount {
    133     if included_bundle_count == 0 {
    134         return 0;
    135     }
    136     let available_bundle_slots = available_bundle_slots.clamp(1, REVEAL_COMMITTEE_SIZE);
    137     let included_bundle_count = included_bundle_count.min(available_bundle_slots);
    138     let full_share = blinded_fee_share(fee, BLINDED_REVEAL_FINALIZER_FEE_BPS);
    139     ((full_share as u128 * included_bundle_count as u128) / available_bundle_slots as u128)
    140         as Amount
    141 }
    142 
    143 #[cfg(test)]
    144 mod tests;