From 4bb3c804ca1d99d940213c73edea0a55751e6522 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Fri, 9 Oct 2026 09:19:38 +0000 Subject: [PATCH] D02: reconciled with TV-01's supply spec (32 rows exact), the paid model at 10 blocks/s, B1 and B4 closed Co-Authored-By: Claude Opus 5.5 --- .../token-value/phase0/d02/README.md | 78 ++++++++++++++----- .../phase0/d02/d02-manifest.sha256 | 7 +- .../phase0/d02/d02-tv01-reconcile.csv | 33 ++++++++ .../phase0/d02/evidence/box-generate.log | 11 ++- 4 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-tv01-reconcile.csv diff --git a/docs/plans/igneum-2.0-master/token-value/phase0/d02/README.md b/docs/plans/igneum-2.0-master/token-value/phase0/d02/README.md index 92c04d9ca..4a368df19 100644 --- a/docs/plans/igneum-2.0-master/token-value/phase0/d02/README.md +++ b/docs/plans/igneum-2.0-master/token-value/phase0/d02/README.md @@ -13,8 +13,8 @@ Status: NOT RUN. A model, landed as a document and its tests; nothing activates. | `consensus/core/src/igneum.rs` (the cap, the year-one emission, the 20 percent proving share) | blob `ac914b7ef3dbeea6f861a8b82b16415bbe7f33c7` | | `consensus/core/src/config/params.rs` (MAINNET_PARAMS.emission = CURRENT rescaled to 18 decimals) | blob `d0ebf9bb3951ffafbdd9a3d9d0600537229ea710` | | `consensus/core/src/unit.rs` (8 and 18 decimals) | blob `6af7040f07b939e71f8930090f01d022c6136e87` | -| `site/litepaper.html` on master at this landing | blob `ad11eaf29ca1f725a35dda3c7f4060dbf1fce509` | -| TV-01's supply spec, `docs/plans/igneum-2.0-master/token-value/phase0/tv-01/supply-spec.json` | not landed at this version (BLOCKED row B1) | +| `site/litepaper.html` in the tree the generator ran on (each quoted sentence is checked present) | sha256 `aec583e6e868eb2d3aa8474df3f8892eeebba8a98c887a019ea86bd2efc2f786` | +| TV-01's supply spec, `docs/plans/igneum-2.0-master/token-value/phase0/tv-01/supply-spec.json` (read by the generator; section 9) | sha256 `3ffdd3084aff06d963df6c326cda88719d576f07d9cbfb56079de1a8b40c4403` | ## What D02 asks @@ -33,7 +33,7 @@ The volume names the shape of the longer branch and no number. B is its literal - A year is 31,557,600 DAA seconds (365.25 days, emission.rs `YEAR_SECONDS`). Year y is DAA seconds [(y - 1) x year, y x year). Emission is keyed to DAA time, so a calendar year equals a schedule year within the accuracy of the difficulty controller. - Every schedule carries the 30-day launch ramp from 10 percent and `Tail::Cap`: the curve runs to zero and its sum, less the ramp's withheld coins and the integer floors, is the scheduled total, never above the 4,000,000,000 IGN cap. - The split is the consensus split: 80 percent of each block's subsidy to the block's producer and 20 percent to the proving escrow (igneum.rs `PROVING_POOL_SHARE_PERCENT`). It is applied to each year's total; the per-block floor moves at most one base unit a block toward the producer, and the signing bonus moves part of a silent block's producer share to the pool without changing the total. -- Per-block figures are at 1 block a second. Mainnet's params carry the inherited block-rate activation (`crescendo_activation`); a faster block rate divides every per-block figure by the same factor for every schedule, so the shares in the late-miner table do not move. +- Two views of the same rule. The supply and issuance tables use the node's closed form (`scheduled_supply_at`, per DAA second). The paid model sums one `block_subsidy` per DAA score at mainnet's 10 blocks a second (params.rs `blockrate`, the coinbase's rate), which is what the coinbase pays and what TV-01's spec sums; the two differ by the per-block floors, under one IGN in total, except at the far tail, where the per-block floor reaches zero years before the per-second rate does (the schedules table). Per-block figures are at 10 blocks a second. - No price appears. Every amount is native IGN or base units. - Fee dependence uses a reference security budget of 1 percent of the cap a year (40M IGN), a stated yardstick and not a cost estimate, scaled by TV-04's revenue multiples (0.25x / 1x / 4x / 10x). "Fees needed" is the first year the subsidy alone falls under the budget; "fees exceed subsidy" is the first year the subsidy falls under half of it, after which fees must pay more than the subsidy for the budget to hold. Both read the subsidy's decline alone. The fee series is a parameter, never a forecast: `--fee-flat-ign N --fee-growth-bps G` prints the first year the subsidy plus that series falls under each budget. TV-04's own budget replaces the yardstick when it lands (BLOCKED row B2). - The volume defines no Gini-style cohort measure, so concentration is the share of the cap issued by each horizon and the share issued in years 1 to 2 against years 3 to 20. @@ -77,11 +77,11 @@ EmissionSchedule { } ``` -| key | schedule | launch rate (base units a DAA second) | launch rate a year (IGN) | step (DAA s) | step multiplier (Q32) | curve steps | subsidy zero from year | scheduled total (IGN) | cap minus total (IGN) | -|---|---|---|---|---|---|---|---|---|---| -| A | current pacing (release-2.0.2 mainnet) | 31,688,087,810,000,000,000 | 1,000.0M | 63,115,200 (2 years) | 2,147,483,648 | 66 | 131 | 3,963,039,000 | 36,961,000 | -| B | longer distribution, same cap (the volume; time axis x2) | 15,844,043,900,000,000,000 | 500.0M | 126,230,400 (4 years) | 2,147,483,648 | 65 | 257 | 3,981,519,498 | 18,480,502 | -| C | smooth glide, same cap (this lane's alternative) | 21,806,679,390,000,000,000 | 688.2M | 2,629,800 (1 month) | 4,233,391,203 | 2831 | 236 | 3,974,564,679 | 25,435,321 | +| key | schedule | launch rate (base units a DAA second) | launch rate a year (IGN) | step (DAA s) | step multiplier (Q32) | curve steps | rate per second zero after (years) | paid a block zero after (years, 10 blocks/s) | paid total (IGN, 10 blocks/s) | cap minus paid total (IGN) | +|---|---|---|---|---|---|---|---|---|---|---| +| A | current pacing (release-2.0.2 mainnet) | 31,688,087,810,000,000,000 | 1,000.0M | 63,115,200 (2 years) | 2,147,483,648 | 66 | 130.00 | 124.00 | 3,963,038,999.61 | 36,961,000.39 | +| B | longer distribution, same cap (the volume; time axis x2) | 15,844,043,900,000,000,000 | 500.0M | 126,230,400 (4 years) | 2,147,483,648 | 65 | 256.00 | 244.00 | 3,981,519,498.29 | 18,480,501.71 | +| C | smooth glide, same cap (this lane's alternative) | 21,806,679,390,000,000,000 | 688.2M | 2,629,800 (1 month) | 4,233,391,203 | 2831 | 235.83 | 235.08 | 3,974,564,678.81 | 25,435,321.19 | ## 1. Issued supply and its share of the cap, at the end of each year @@ -125,11 +125,11 @@ Meaning: the ratio column is how many coins years 1 to 2 issue for every coin ye ## 5. Late-miner participation (the subsidy a block pays a miner who joins later) -| schedule | year 1 full-rate subsidy a block (IGN, 1 block/s) | joining in year 5: a block (share of year 1) | joining in year 10: a block (share of year 1) | joining in year 20: a block (share of year 1) | +| schedule | year 1 full-rate subsidy a block (IGN, 10 blocks/s) | joining in year 5: a block (share of year 1) | joining in year 10: a block (share of year 1) | joining in year 20: a block (share of year 1) | |---|---|---|---|---| -| A | 31.6881 | 7.9220 (25.00%) | 1.9805 (6.25%) | 0.0619 (0.20%) | -| B | 15.8440 | 7.9220 (50.00%) | 3.9610 (25.00%) | 0.9903 (6.25%) | -| C | 21.8067 | 10.9033 (50.00%) | 4.5843 (21.02%) | 0.8104 (3.72%) | +| A | 3.16881 | 0.79220 (25.00%) | 0.19805 (6.25%) | 0.00619 (0.20%) | +| B | 1.58440 | 0.79220 (50.00%) | 0.39610 (25.00%) | 0.09903 (6.25%) | +| C | 2.18067 | 1.09033 (50.00%) | 0.45843 (21.02%) | 0.08104 (3.72%) | Meaning: a miner joining in year 10 sees 6.3% of the year-1 block subsidy under A, 25.0% under B and 21.0% under C; B pays that miner 2.0 times what A pays. @@ -157,7 +157,7 @@ The volume gives no factor; this sweep shows how the trade moves with it. ## 8. The litepaper against the code -| litepaper sentence (site/litepaper.html) | the code, ramp included | the code's curve without the ramp | +| litepaper sentence (site/litepaper.html, present in the tree) | the code, ramp included | the code's curve without the ramp | |---|---|---| | "Half of the 4 billion cap is mined in the first two years" | 49.08% | 50.00% | | "Nearly a quarter of all supply is mined in the first year" | 24.08% | 25.00% | @@ -166,20 +166,62 @@ The volume gives no factor; this sweep shows how the trade moves with it. Meaning: the litepaper's sentences describe the curve without the 30-day ramp; the code, ramp included, issues slightly less in the first years. The words "approached and never reached" hold for every schedule here: each scheduled total is under the cap (table above, last column). +## 9. Reconciliation with TV-01's supply spec + +The generator reads TV-01's spec from the tree and compares every rule field, the cap, the unit and each profile's year-end supplies, terminal DAA score, terminal supply and cap shortfall, exact integers, against its own paid model of A. Result: all 32 rows agree exactly. + +| profile | quantity | TV-01 supply spec | this generator (paid model) | agree | +|---|---|---|---|---| +| rules | launch_rate_per_second | `31688087810000000000` | `31688087810000000000` | yes | +| rules | ramp_seconds | `2592000` | `2592000` | yes | +| rules | ramp_start_percent | `10` | `10` | yes | +| rules | step_seconds | `63115200` | `63115200` | yes | +| rules | step_decay_q32 | `2147483648` | `2147483648` | yes | +| rules | year_seconds | `31557600` | `31557600` | yes | +| rules | tail | `cap` | `cap` | yes | +| cap | base_units | `4000000000000000000000000000` | `4000000000000000000000000000` | yes | +| units | decimals | `18` | `18` | yes | +| mainnet (10 blocks/s) | supply at the end of year 1 | `963038999991632485488480000` | `963038999991632485488480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 2 | `1963038999864488485488480000` | `1963038999864488485488480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 5 | `3213038999705558485488480000` | `3213038999705558485488480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 10 | `3838038999626093485488480000` | `3838038999626093485488480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 12 | `3900538999618146985488480000` | `3900538999618146985488480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 20 | `3959132749610697141738480000` | `3959132749610697141738480000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 50 | `3963038880400910946483264000` | `3963038880400910946483264000` | yes | +| mainnet (10 blocks/s) | supply at the end of year 100 | `3963038999610196921373136000` | `3963038999610196921373136000` | yes | +| mainnet (10 blocks/s) | terminal DAA score (first unpaid) | `39131424000` | `39131424000` | yes | +| mainnet (10 blocks/s) | terminal supply | `3963038999610200467816224000` | `3963038999610200467816224000` | yes | +| mainnet (10 blocks/s) | cap shortfall | `36961000389799532183776000` | `36961000389799532183776000` | yes | +| mainnet (10 blocks/s) | block rate of the contract profile | `10` | `10` | yes | +| devnet-4 (1 block/s) | supply at the end of year 1 | `963038999991632485498848000` | `963038999991632485498848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 2 | `1963038999864488485498848000` | `1963038999864488485498848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 5 | `3213038999705558485498848000` | `3213038999705558485498848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 10 | `3838038999626093485498848000` | `3838038999626093485498848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 12 | `3900538999618146985498848000` | `3900538999618146985498848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 20 | `3959132749610697141748848000` | `3959132749610697141748848000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 50 | `3963038880400910949333816000` | `3963038880400910949333816000` | yes | +| devnet-4 (1 block/s) | supply at the end of year 100 | `3963038999610196931229475200` | `3963038999610196931229475200` | yes | +| devnet-4 (1 block/s) | terminal DAA score (first unpaid) | `4102488000` | `4102488000` | yes | +| devnet-4 (1 block/s) | terminal supply | `3963038999610200483289816000` | `3963038999610200483289816000` | yes | +| devnet-4 (1 block/s) | cap shortfall | `36961000389799516710184000` | `36961000389799516710184000` | yes | + +Meaning: the schedule this comparison calls A is TV-01's mainnet contract profile to the base unit, so every difference shown for B and C is measured from the compiled mainnet schedule and not from a model of it. + ## Commands and checksums Every run is on build-3 under the pid file `~/tv-d02/run.pid` (`tools/token-value/d02/run_on_box.sh`), never on the Mac. | what | command | sha256 | |---|---|---| -| the generator | `python3 tools/token-value/d02/d02_emission.py --out docs/plans/igneum-2.0-master/token-value/phase0/d02` | `0133addf96266a21a14d7dcff86139edca0c0a5f277d1488add85d09fe80f6ef` | -| the README template | (read by the generator) | `92b14fee872fb1d78ff715a09dcda217fda905793aacde9e05c22f2fb7a3060d` | -| the tests (known-failed first) | `python3 tools/token-value/d02/test_d02.py` | `cbe13d8becb72953bce3531065f27c51b957866a646eba96211feb93649178cc` | +| the generator | `python3 tools/token-value/d02/d02_emission.py --out docs/plans/igneum-2.0-master/token-value/phase0/d02` | `ef1d48182c1702ff59c21eb7373f4cea9e2de64f98a2a86426f2c3309b25ed03` | +| the README template | (read by the generator) | `009b07323513790a05e8bd4575ffd2d6b92d37d2d486796de29c55433dc195f0` | +| the tests (known-failed first) | `python3 tools/token-value/d02/test_d02.py` | `87252bf447f7c4fcd894790ca42839e1e511a9fb1cda53e9eed3807313bae1b9` | | the byte-identical check | `python3 tools/token-value/d02/d02_emission.py --check docs/plans/igneum-2.0-master/token-value/phase0/d02` | (exit 0 = byte-identical) | | `d02-schedules.csv` (parameters, curve steps, terminal values) | the generator | `1abd30eb7879607a43052c74bf2a6ee4fc27202754d6700cacbfb342ea20e3ae` | | `d02-years.csv` (years 1 to 40, every schedule) | the generator | `c03933af686c9c11454a0b1c188bf2dfa7903549dcc274fdbe43cd2c609723fd` | | `d02-horizons.csv` (years 1, 2, 5, 10, 20) | the generator | `4329ec9f51015577f297f56440b486543e4a40f1cb075270f7b17b02da5f542f` | | `d02-fee-dependence.csv` (every multiple, every schedule, fees required at each horizon) | the generator | `07375dc4cd075a720591326a792c238c54b28a0d8fa9decf38534bd2d738f854` | +| `d02-tv01-reconcile.csv` (section 9, every row) | the generator | `34fcfc388b138ffcd18600d661debe3458c82c37b087501d0d6b17f471dd2892` | | `d02-manifest.sha256` (this README and every CSV) | the generator | (lists this file's sha) | Searches for a crossing year run to year 1,000; an empty cell means the budget holds that long on the subsidy alone. @@ -198,10 +240,10 @@ Searches for a crossing year run to year 1,000; an empty cell means the budget h | row | question | waits on | earliest clock (UK) | |---|---|---|---| | B0 | Which schedule launches: A, B (and at which factor), C, or another same-cap shape. This document does not pick it. | the founder ("pending evidence") after the independent panel reads this | the founder's word | -| B1 | Reconcile against TV-01's supply spec (cap, unit, launch rate, ramp, step, terminal rule) | TV-01's `supply-spec.json` landing | 13:00 today, then this generator gains the read | | B2 | Replace the 1 percent yardstick with TV-04's role-by-role budget and its revenue multiples' base | TV-04's landing | TV-04's clock | | B3 | Arrival times and cohort shares under each schedule (delayed entrants as people, not blocks) | TV-03's simulation inputs and a cohort definition | TV-03's clock | -| B4 | The litepaper's "after year 5" tail-vote sentence beside a capped schedule (D01 ratified capped issuance subject to TV-04) | D01's wording landing | the D01 lane's clock | + +Closed since the first version (09:44 UK): B1, the reconciliation with TV-01's supply spec (section 9); B4, the litepaper's year-five tail-vote sentence, which the site lane rewrote under D01 (TV-01's conflict C01). ## Registry diff --git a/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-manifest.sha256 b/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-manifest.sha256 index 0c2cc19e2..e8f10a55f 100644 --- a/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-manifest.sha256 +++ b/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-manifest.sha256 @@ -1,7 +1,8 @@ -# input 0133addf96266a21a14d7dcff86139edca0c0a5f277d1488add85d09fe80f6ef tools/token-value/d02/d02_emission.py -# input 92b14fee872fb1d78ff715a09dcda217fda905793aacde9e05c22f2fb7a3060d tools/token-value/d02/README.template.md +# input ef1d48182c1702ff59c21eb7373f4cea9e2de64f98a2a86426f2c3309b25ed03 tools/token-value/d02/d02_emission.py +# input 009b07323513790a05e8bd4575ffd2d6b92d37d2d486796de29c55433dc195f0 tools/token-value/d02/README.template.md 1abd30eb7879607a43052c74bf2a6ee4fc27202754d6700cacbfb342ea20e3ae d02-schedules.csv c03933af686c9c11454a0b1c188bf2dfa7903549dcc274fdbe43cd2c609723fd d02-years.csv 4329ec9f51015577f297f56440b486543e4a40f1cb075270f7b17b02da5f542f d02-horizons.csv 07375dc4cd075a720591326a792c238c54b28a0d8fa9decf38534bd2d738f854 d02-fee-dependence.csv -593b8c95381c0f3c4f83c0e0ca77273e81b946d43589a7af008a2507ad1ad3c6 README.md +34fcfc388b138ffcd18600d661debe3458c82c37b087501d0d6b17f471dd2892 d02-tv01-reconcile.csv +4f5a7ac5aba5fee1aef646e4e3f55fdb491db197429654cfdba0bab9bfb38db3 README.md diff --git a/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-tv01-reconcile.csv b/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-tv01-reconcile.csv new file mode 100644 index 000000000..3f7c3e6cf --- /dev/null +++ b/docs/plans/igneum-2.0-master/token-value/phase0/d02/d02-tv01-reconcile.csv @@ -0,0 +1,33 @@ +profile,quantity,tv01_spec,d02_generator,agree +"rules","launch_rate_per_second",31688087810000000000,31688087810000000000,yes +"rules","ramp_seconds",2592000,2592000,yes +"rules","ramp_start_percent",10,10,yes +"rules","step_seconds",63115200,63115200,yes +"rules","step_decay_q32",2147483648,2147483648,yes +"rules","year_seconds",31557600,31557600,yes +"rules","tail",cap,cap,yes +"cap","base_units",4000000000000000000000000000,4000000000000000000000000000,yes +"units","decimals",18,18,yes +"mainnet (10 blocks/s)","supply at the end of year 1",963038999991632485488480000,963038999991632485488480000,yes +"mainnet (10 blocks/s)","supply at the end of year 2",1963038999864488485488480000,1963038999864488485488480000,yes +"mainnet (10 blocks/s)","supply at the end of year 5",3213038999705558485488480000,3213038999705558485488480000,yes +"mainnet (10 blocks/s)","supply at the end of year 10",3838038999626093485488480000,3838038999626093485488480000,yes +"mainnet (10 blocks/s)","supply at the end of year 12",3900538999618146985488480000,3900538999618146985488480000,yes +"mainnet (10 blocks/s)","supply at the end of year 20",3959132749610697141738480000,3959132749610697141738480000,yes +"mainnet (10 blocks/s)","supply at the end of year 50",3963038880400910946483264000,3963038880400910946483264000,yes +"mainnet (10 blocks/s)","supply at the end of year 100",3963038999610196921373136000,3963038999610196921373136000,yes +"mainnet (10 blocks/s)","terminal DAA score (first unpaid)",39131424000,39131424000,yes +"mainnet (10 blocks/s)","terminal supply",3963038999610200467816224000,3963038999610200467816224000,yes +"mainnet (10 blocks/s)","cap shortfall",36961000389799532183776000,36961000389799532183776000,yes +"mainnet (10 blocks/s)","block rate of the contract profile",10,10,yes +"devnet-4 (1 block/s)","supply at the end of year 1",963038999991632485498848000,963038999991632485498848000,yes +"devnet-4 (1 block/s)","supply at the end of year 2",1963038999864488485498848000,1963038999864488485498848000,yes +"devnet-4 (1 block/s)","supply at the end of year 5",3213038999705558485498848000,3213038999705558485498848000,yes +"devnet-4 (1 block/s)","supply at the end of year 10",3838038999626093485498848000,3838038999626093485498848000,yes +"devnet-4 (1 block/s)","supply at the end of year 12",3900538999618146985498848000,3900538999618146985498848000,yes +"devnet-4 (1 block/s)","supply at the end of year 20",3959132749610697141748848000,3959132749610697141748848000,yes +"devnet-4 (1 block/s)","supply at the end of year 50",3963038880400910949333816000,3963038880400910949333816000,yes +"devnet-4 (1 block/s)","supply at the end of year 100",3963038999610196931229475200,3963038999610196931229475200,yes +"devnet-4 (1 block/s)","terminal DAA score (first unpaid)",4102488000,4102488000,yes +"devnet-4 (1 block/s)","terminal supply",3963038999610200483289816000,3963038999610200483289816000,yes +"devnet-4 (1 block/s)","cap shortfall",36961000389799516710184000,36961000389799516710184000,yes diff --git a/docs/plans/igneum-2.0-master/token-value/phase0/d02/evidence/box-generate.log b/docs/plans/igneum-2.0-master/token-value/phase0/d02/evidence/box-generate.log index e964a1086..b5a53fe8a 100644 --- a/docs/plans/igneum-2.0-master/token-value/phase0/d02/evidence/box-generate.log +++ b/docs/plans/igneum-2.0-master/token-value/phase0/d02/evidence/box-generate.log @@ -1,10 +1,11 @@ -host igneum-build-3 python Python 3.12.3 commit 20872fa0c9e1668fa5e7aad3d5cbeaa671939d96 utc 2026-10-09T08:27:50Z pidfile /home/build/tv-d02/run.pid +host igneum-build-3 python Python 3.12.3 commit 71e1e14841a1678b3357c42e3fd8376e1acf85c6 utc 2026-10-09T09:19:28Z pidfile /home/build/tv-d02/run.pid 1abd30eb7879607a43052c74bf2a6ee4fc27202754d6700cacbfb342ea20e3ae d02-schedules.csv c03933af686c9c11454a0b1c188bf2dfa7903549dcc274fdbe43cd2c609723fd d02-years.csv 4329ec9f51015577f297f56440b486543e4a40f1cb075270f7b17b02da5f542f d02-horizons.csv 07375dc4cd075a720591326a792c238c54b28a0d8fa9decf38534bd2d738f854 d02-fee-dependence.csv -593b8c95381c0f3c4f83c0e0ca77273e81b946d43589a7af008a2507ad1ad3c6 README.md -b3278f06aaf0aca950dbba77c4bd67c670c3742049d3cb7367d0b0888daea407 d02-manifest.sha256 +34fcfc388b138ffcd18600d661debe3458c82c37b087501d0d6b17f471dd2892 d02-tv01-reconcile.csv +4f5a7ac5aba5fee1aef646e4e3f55fdb491db197429654cfdba0bab9bfb38db3 README.md +f632f8d14e6c7446c47b0ec0cf03a934f47ed4a43d691e0a687451a6bd705431 d02-manifest.sha256 test_a_one_byte_change_is_caught (__main__.ByteIdentical.test_a_one_byte_change_is_caught) ... ok test_outputs_regenerate_byte_identically (__main__.ByteIdentical.test_outputs_regenerate_byte_identically) ... ok test_current_at_8_decimals_is_the_33_step_table (__main__.NodeConstants.test_current_at_8_decimals_is_the_33_step_table) ... ok @@ -12,9 +13,11 @@ test_q32_root_reproduces_the_node_glide_constant (__main__.NodeConstants.test_q3 test_ramp_and_block_subsidy_match_the_node_rules (__main__.NodeConstants.test_ramp_and_block_subsidy_match_the_node_rules) ... ok test_every_schedule_is_same_cap_and_node_valid (__main__.SameCap.test_every_schedule_is_same_cap_and_node_valid) ... ok test_the_longer_schedules_pay_less_in_year_one (__main__.SameCap.test_the_longer_schedules_pay_less_in_year_one) ... ok +test_paid_and_closed_form_agree_within_one_coin (__main__.TV01Spec.test_paid_and_closed_form_agree_within_one_coin) ... ok +test_the_paid_model_reproduces_tv01_exactly (__main__.TV01Spec.test_the_paid_model_reproduces_tv01_exactly) ... ok ---------------------------------------------------------------------- -Ran 7 tests in 0.008s +Ran 9 tests in 4.011s OK exit 0