Sfoglia il codice sorgente

validator: properly initialize and verify genesis block monotree

skoupidi 11 mesi fa
parent
commit
a140ae53b1

+ 1 - 1
bin/darkfid/genesis_block_localnet

@@ -1 +1 @@
-AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAGALfmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCNtqJ3nhmdGy6NXo7EAg7BLwPF3/KIUrAsdAvYbVh5izAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAMTnrmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCBOPxLhdzYeY0CreC7POWy1tPS5Of8EVFm/1WmPy7a7MAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

+ 1 - 1
bin/darkfid/genesis_block_mainnet

@@ -1 +1 @@
-AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAHQLfmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCNtqJ3nhmdGy6NXo7EAg7BLwPF3/KIUrAsdAvYbVh5izAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAM/nrmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCBOPxLhdzYeY0CreC7POWy1tPS5Of8EVFm/1WmPy7a7MAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

+ 1 - 1
bin/darkfid/genesis_block_testnet

@@ -1 +1 @@
-AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAG0LfmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCNtqJ3nhmdGy6NXo7EAg7BLwPF3/KIUrAsdAvYbVh5izAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AYa7rEMKSzoYLxJbN6SG6cSGu/o02E70pmtKI+XwxiWxAAAAAMvnrmgAAAAAAAAAAAAAAAA7PNtvmfHqHEnjNnAS1ULkbCEM4uIYpCgNuv5kw2ETCBOPxLhdzYeY0CreC7POWy1tPS5Of8EVFm/1WmPy7a7MAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

+ 3 - 2
bin/darkfid/src/tests/harness.rs

@@ -89,8 +89,9 @@ impl Harness {
         vks::inject(&sled_db, &vks)?;
         let overlay = BlockchainOverlay::new(&Blockchain::new(&sled_db)?)?;
         deploy_native_contracts(&overlay, config.pow_target).await?;
-        genesis_block.header.state_root =
-            overlay.lock().unwrap().contracts.get_state_monotree()?.get_headroot()?.unwrap();
+        let mut state_monotree = overlay.lock().unwrap().contracts.get_state_monotree()?;
+        overlay.lock().unwrap().contracts.update_state_monotree(&mut state_monotree)?;
+        genesis_block.header.state_root = state_monotree.get_headroot()?.unwrap();
 
         // Generate validators configuration
         // NOTE: we are not using consensus constants here so we

+ 5 - 5
bin/darkfid/src/tests/mod.rs

@@ -259,15 +259,15 @@ fn darkfid_programmatic_control() -> Result<()> {
                 )
                 .unwrap();
                 darkfi::validator::utils::deploy_native_contracts(&overlay, 20).await.unwrap();
-                genesis_block.header.state_root = overlay
+                let mut state_monotree =
+                    overlay.lock().unwrap().contracts.get_state_monotree().unwrap();
+                overlay
                     .lock()
                     .unwrap()
                     .contracts
-                    .get_state_monotree()
-                    .unwrap()
-                    .get_headroot()
-                    .unwrap()
+                    .update_state_monotree(&mut state_monotree)
                     .unwrap();
+                genesis_block.header.state_root = state_monotree.get_headroot().unwrap().unwrap();
                 let bootstrap = genesis_block.header.timestamp.inner();
                 let config = darkfi::validator::ValidatorConfig {
                     confirmation_threshold: 1,

+ 1 - 1
script/research/gg/Cargo.toml

@@ -18,7 +18,7 @@ darkfi = {path = "../../../", features = ["bs58", "validator"]}
 darkfi_money_contract = {path = "../../../src/contract/money", features = ["no-entrypoint", "client"]}
 darkfi-contract-test-harness = {path = "../../../src/contract/test-harness"}
 darkfi-sdk = {path = "../../../src/sdk"}
-darkfi-serial = "0.5.0"
+darkfi-serial = "0.5.1"
 
 # Misc
 bs58 = "0.5.1"

+ 2 - 1
script/research/gg/src/main.rs

@@ -170,7 +170,8 @@ fn main() -> Result<()> {
                 genesis_block.header.transactions_root = tree.root(0).unwrap();
 
                 // Grab the updated contracts states root
-                let state_monotree = overlay.lock().unwrap().get_state_monotree()?;
+                let mut state_monotree = overlay.lock().unwrap().get_state_monotree()?;
+                overlay.lock().unwrap().contracts.update_state_monotree(&mut state_monotree)?;
                 let Some(state_root) = state_monotree.get_headroot()? else {
                     return Err(Error::ContractsStatesRootNotFoundError);
                 };

+ 3 - 2
src/contract/test-harness/src/lib.rs

@@ -276,8 +276,9 @@ impl TestHarness {
         vks::inject(&sled_db, &vks)?;
         let overlay = BlockchainOverlay::new(&Blockchain::new(&sled_db)?)?;
         deploy_native_contracts(&overlay, 90).await?;
-        genesis_block.header.state_root =
-            overlay.lock().unwrap().contracts.get_state_monotree()?.get_headroot()?.unwrap();
+        let mut state_monotree = overlay.lock().unwrap().contracts.get_state_monotree()?;
+        overlay.lock().unwrap().contracts.update_state_monotree(&mut state_monotree)?;
+        genesis_block.header.state_root = state_monotree.get_headroot()?.unwrap();
 
         // Create `Wallet` instances
         let mut holders_map = HashMap::new();

+ 2 - 1
src/validator/verification.rs

@@ -116,7 +116,8 @@ pub async fn verify_genesis_block(
     }
 
     // Verify header contracts states root
-    let state_monotree = overlay.lock().unwrap().get_state_monotree()?;
+    let mut state_monotree = overlay.lock().unwrap().get_state_monotree()?;
+    overlay.lock().unwrap().contracts.update_state_monotree(&mut state_monotree)?;
     let Some(state_root) = state_monotree.get_headroot()? else {
         return Err(Error::ContractsStatesRootNotFoundError);
     };