Skip to content

Commit

Permalink
add premine allocation
Browse files Browse the repository at this point in the history
  • Loading branch information
aszepieniec committed Feb 5, 2024
1 parent b2a86dc commit 9fb265c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
26 changes: 24 additions & 2 deletions src/models/blockchain/block/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::config_models::network::Network;
use crate::models::consensus::mast_hash::MastHash;
use crate::prelude::twenty_first;

Expand Down Expand Up @@ -42,7 +43,7 @@ use super::transaction::utxo::Utxo;
use super::transaction::{neptune_coins::NeptuneCoins, Transaction};
use crate::models::blockchain::shared::Hash;
use crate::models::consensus::Witness;
use crate::models::state::wallet::address::generation_address;
use crate::models::state::wallet::address::generation_address::{self, ReceivingAddress};
use crate::models::state::wallet::WalletSecret;
use crate::util_types::mutator_set::mutator_set_accumulator::MutatorSetAccumulator;
use crate::util_types::mutator_set::mutator_set_trait::{commit, MutatorSet};
Expand Down Expand Up @@ -196,7 +197,13 @@ impl Block {
let authority_wallet = WalletSecret::devnet_wallet();
let authority_receiving_address =
authority_wallet.nth_generation_spending_key(0).to_address();
vec![(authority_receiving_address, NeptuneCoins::new(20000))]
vec![
// chiefly for testing; anyone can access these coins by generating the devnet wallet as above
(authority_receiving_address, NeptuneCoins::new(20000)),

// also for testing, but for internal use only
(ReceivingAddress::from_bech32m("nolgam1t6h52ck34mkvvmkk8nnzesf5sdcks3mlj23k8hgp5gc39qaxx76qnltllx465np340n0mf9zrv2e04425q69xlhjgy35v3zu7jmnljev9n38t2a86d9sqq84g8y9egy23etpkewp4ad64s66qq9cruyp0r0vz50urcalgxerv6xcuet6j5tcdx6tqm6d772dxu29r6kq8mkzkyrc07072rlvkx4tkmwy29aqq8qmwwd0n4at3qllgvd427um3jsjed696rddert6dzlamqtn66mz997xt8nslrq8dqvl2nx4k7vu50ul7584m7243pdzdczgnxcd0a8q8aspfd66s5spaa5nk8sqfh29htak8lzf853edgqw99fu4v4ess3d9z0gcqjpclks9p2w5srta9n65r5w2rj89jmagtuklz838lj726frzdvlfj7t992hz8n355raxy2xnm4fpfr20zvk38caatsd74lzx370mfhqrakf6achx5fv858wpchjlmu3h55s5kqkmfu0zhw05wfx7meu33fnmw0fju6p0m940nfrsqkv0e8q25g3sgjk4t0qfun0st7h2k4ef6cau3zyrc5dsqukvzwd85kxxf9ksk6jw7k5ny7wku6wf90mx5xyd7p6q5w6eu4wxxfeqryyfw2rdprr7fkzg9hrt97s4hn9cgpr6qz8x0j59gm885ekde9czanpksqq0c0kmefzfha3lqw8v2xeme5nmf93u59z8luq4wprlxj6v7mpp80t3sjvmv3a6t2kxsh9qaw9spj789ft8jswzm2kmfywxn80caccqf4d38kkjg5ahdrkmfvec242rg47ewzwsfy590hxyvz5v3dpg2a99vwc20a749rmygj74k2uw794t66dz0n9chmhd47gg84y8qc62jvjl8num4j7s2c0gtc88t3pun4zwuq55vf66mg4n8urn50lm7ww4he5x5ya4yyaqlrn2ag5sdnqt46magvw90hh9chyq3q9qc36pq4tattn6lvzfjp9trxuske84yttf6pa3le9z0z8y06gv7925dshhfjn4y5y3aykfg2g7ujrlly8dgpk3srlvq0zmdvgu5jsxwqvngvp6fh6he8fyrlqgrs58qklrg3zyu2jl9nrp2hdvj3hwh29fk5mjl9tpjx0tnyys5gkqlvxxhel4yh53ms0rxpkw3sa6teqgpe4yej5sk7edyqn7w8xr4mgm2asww53gzv95fwpud7mzg4rrnpvdk40m0vna8w8y0w9y240r6m7ja58gfk3stfra9qsm0lt7npkv4w0ghzypdrrg04kp7kkepnm4qmwmjxdg2tx3ejtdmzp0w08alv7x3zxgxsu35yhlvrnkpl9mxgejkfcxdgccper4f7llaaux9hcpul5uy47lhr065qwkgxc6jfylq5raqeczryz089syr4aj7z908e4e3t49qd40x3ueyrgxcdj37dkd5ysezj45kgtv546e7m3fj8ga920lztrgmmx0a98qwnk2ep5k9qh2x05mm5snu5d88lm4lrad8hc639jx97hrx9mywkw6c7yvj9jv0mjmsq0xqpqt0kc4hsh24kndhtsc0ezfzw9h79mjw239s804t2f4jucd3x57mvvnsyp82xy9jvp4yzlq5qhrpu87frkfwkx62r8rjsdkdlx4yhss2ly4q8425ta3je6rym35lapxesd9dhsj44pfhmq92g4tmfr8qnajpn2cgj8ngtzrkc9ygsvx76633p8ksru7g8cda5dfnhf50ax47rde5fhnk8dt7k5sltkhknha697gyqsjg4hytslxmaazdjqj4earaf098uz6gpcgu27zsy4v5arc3vjmum90ngf8e00exjr4nsqs3wr4w93h42ucnllyu5ck09yundjkjqsqetrhzvc3q0smssg6vcw9hlns363grqyt92azpvml632wffpuq5wtsh9vxwdse0g0w0wl3e320hnp3vlmzde3c8xa42yye90gnmmyjdq5atmlnulga4pcapk4t6ut82w057ed3rawx42vn7rl5kzyg84cvulg8yfjeu3ff0wprytkhk85dr63u9elq5ju0c9vd2yyjkqnhxh6xwxnt4nw32pefm9aengdasjn7lsyaeldz93spfnn02uke83xkwytj0wkxhgknde5jnjgg6yegwuw8rklvh6cvyvzqkgwaj857cz7xt3u8mhxlh8xevud3vj5dvq6kpxqd4jftt5h4gcmf9qpj3e2nw87j9une3vu75ahewdrqg7avfquw79fva59f8f3xpmk6lpmlkx9x7ejaw97f8nu86r2yhaepr50cdew82c3fmpnma2gr5vatjy3luqsyf8fpqp2zrjzcymemt3f3t99rn689ucyaj8vc2eapgw4knjyaque29hk3t7swcdvrwcf5myg33ghmg2s8xrqjwzeghzmqq68278lrw5rxn4jf3y93z7ztuwz67s0qa5lldcqe44qsshpuxx36dmna5cn7yy5v5f449gf26hygmj6qk8hm7rkvv44w3cu9fdv7sq0hqy67p3tvyxc8fl640z7pdsjfraznvqpnvcepggdnf3qypgs8vu82wsj2yd8nkhfv6sv6xs3wf5d7nkqsd5k8ehk7dtfqnsvcz26yazc32cv669qn7dhxr25j0etmmz7xh8azj7dn0d4u309m0rc2yhfegds60smuqtxn4l4nhmdqj9x6se4sultl5cwy4qja66cvnjz6mqwqet4n5zcswywqd6gcpec4q2vek9g4086ys4x35hwa47dk3zj2m03yuqz7ap66dah3r73j96q00cwmqw0lxvvqq4u0kvt6vrc0urd2hfhrxkrkmr9yx48uw94vmnjyq7sgyc0szkyuq07cjhg0fhx5z5mr9ua24wx9qnh32cjult3mu8kzhlj7se2nm4jr937j64656q7vp98dh9dhvlge8p02ejse5r0nsk22aa5cexvuqcaulnxw690vm3vdagdckfwps06jjd49kd4ls4jkf0nxkhqx2rm73pcepr4u6xjxw2fhjptk95tt0rq2ramq57lfg3sw3tsee2af355lt53w4f5wmpcvctsntyl2sp8m04l3nds7acv4uqnznudmkasgdf7l9df4484ym2njjzy0c26v2zv7pkv30f06uuptdvuxmgnuqcgd4els7gehp0fwxam0vskt34e3z3kfft6kkdz2c7ftn3dcvz5wvpwqf8458ade6995vdkxkalqzfs5epjfnn3c27mnzlx6cv5fhlephxpa3mj3hu6wafd8em8jhzcguru797p6m2fes55ha23putxrtly4wufl6rpp3ydta57zcxl40pvhpps7sgr7zc2cvz57xdlxpvclsjdgp5q3up9tu5csfdkaa762mk7zrqad93506l0kj".to_string(), Network::Alpha).unwrap(), NeptuneCoins::new(1337)),
]
}

pub fn new(header: BlockHeader, body: BlockBody, proof: Option<Proof>) -> Self {
Expand Down Expand Up @@ -684,4 +691,19 @@ mod block_tests {
);
assert_eq!(last_block_mmra.count_leaves(), blocks.len() as u64 - 1);
}

#[test]
fn test_premine_size() {
// 831600 = 42000000 * 0.0198
// where 42000000 is the asymptotical limit of the token supply
// and 1.98% is the relative size of the premine
let premine_max_size = NeptuneCoins::new(831600);

let total_premine = Block::premine_distribution()
.iter()
.map(|(_receiving_address, amount)| *amount)
.sum::<NeptuneCoins>();

assert!(total_premine <= premine_max_size);
}
}
19 changes: 12 additions & 7 deletions src/models/state/archival_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1063,6 +1063,7 @@ mod archival_state_tests {
let own_receiving_address = genesis_wallet.nth_generation_spending_key(0).to_address();
let global_state_lock =
get_mock_global_state(Network::RegTest, 42, Some(genesis_wallet)).await;
let mut num_utxos = Block::premine_distribution().len();

// 1. Create new block 1 with one input and four outputs and store it to disk
let (mut block_1a, _, _) = make_mock_block_with_valid_pow(
Expand Down Expand Up @@ -1121,11 +1122,13 @@ mod archival_state_tests {
);
archival_state
.write_block(
&block_1a,
// &block_1a,
&mock_block_1b,
Some(mock_block_1b.kernel.header.proof_of_work_family),
)
.await
.unwrap();
num_utxos += mock_block_1b.body().transaction.kernel.outputs.len();

// 4. Update mutator set with that and verify rollback
archival_state
Expand All @@ -1150,14 +1153,14 @@ mod archival_state_tests {
);

assert_eq!(
2,
num_utxos,
archival_state
.archival_mutator_set
.ams()
.kernel
.aocl
.count_leaves(),
"AOCL leaf count must be 2 after two blocks containing only coinbase transactions"
.count_leaves() as usize,
"AOCL leaf count must agree with blockchain after rollback"
);
}

Expand All @@ -1176,6 +1179,7 @@ mod archival_state_tests {

let mut global_state = global_state_lock.lock_guard_mut().await;
let genesis_block: Block = *global_state.chain.archival_state().genesis_block.to_owned();
let mut num_utxos = Block::premine_distribution().len();
let mut previous_block = genesis_block.clone();

// this variable might come in handy for reporting purposes
Expand Down Expand Up @@ -1277,6 +1281,7 @@ mod archival_state_tests {
Some(mock_block_1b.kernel.header.proof_of_work_family),
)
.await?;
num_utxos += mock_block_1b.body().transaction.kernel.outputs.len();

// 4. Update mutator set with that and verify rollback
global_state
Expand Down Expand Up @@ -1305,16 +1310,16 @@ mod archival_state_tests {
);

assert_eq!(
2,
num_utxos,
global_state
.chain
.archival_state()
.archival_mutator_set
.ams()
.kernel
.aocl
.count_leaves(),
"AOCL leaf count must be 2 after two blocks containing only coinbase transactions"
.count_leaves() as usize,
"AOCL leaf count must agree with #premine allocations + #transaction outputs in all blocks, even after rollback"
);

Ok(())
Expand Down

0 comments on commit 9fb265c

Please sign in to comment.