Просмотр исходного кода

blockchain/contract_store: simplyfied native contract key checks

skoupidi 1 год назад
Родитель
Сommit
592571059d
2 измененных файлов с 8 добавлено и 13 удалено
  1. 4 13
      src/blockchain/contract_store.rs
  2. 4 0
      src/sdk/src/crypto/contract_id.rs

+ 4 - 13
src/blockchain/contract_store.rs

@@ -19,7 +19,7 @@ r* This program is distributed in the hope that it will be useful,
 use std::{collections::BTreeMap, io::Cursor};
 use std::{collections::BTreeMap, io::Cursor};
 
 
 use darkfi_sdk::{
 use darkfi_sdk::{
-    crypto::contract_id::{ContractId, DAO_CONTRACT_ID, DEPLOYOOOR_CONTRACT_ID, MONEY_CONTRACT_ID},
+    crypto::contract_id::{ContractId, NATIVE_CONTRACT_IDS_BYTES},
     monotree::Monotree,
     monotree::Monotree,
 };
 };
 use darkfi_serial::{deserialize, serialize};
 use darkfi_serial::{deserialize, serialize};
@@ -290,10 +290,7 @@ impl ContractStore {
             let (key, value) = record?;
             let (key, value) = record?;
 
 
             // Skip native ones
             // Skip native ones
-            if key == MONEY_CONTRACT_ID.to_bytes() ||
-                key == DAO_CONTRACT_ID.to_bytes() ||
-                key == DEPLOYOOOR_CONTRACT_ID.to_bytes()
-            {
+            if NATIVE_CONTRACT_IDS_BYTES.contains(&deserialize(&key)?) {
                 continue
                 continue
             }
             }
 
 
@@ -490,10 +487,7 @@ impl ContractStoreOverlay {
             let (key, value) = record?;
             let (key, value) = record?;
 
 
             // Skip native ones
             // Skip native ones
-            if key == MONEY_CONTRACT_ID.to_bytes() ||
-                key == DAO_CONTRACT_ID.to_bytes() ||
-                key == DEPLOYOOOR_CONTRACT_ID.to_bytes()
-            {
+            if NATIVE_CONTRACT_IDS_BYTES.contains(&deserialize(&key)?) {
                 continue
                 continue
             }
             }
 
 
@@ -553,10 +547,7 @@ impl ContractStoreOverlay {
                 let (key, value) = record?;
                 let (key, value) = record?;
 
 
                 // Skip native ones
                 // Skip native ones
-                if key == MONEY_CONTRACT_ID.to_bytes() ||
-                    key == DAO_CONTRACT_ID.to_bytes() ||
-                    key == DEPLOYOOOR_CONTRACT_ID.to_bytes()
-                {
+                if NATIVE_CONTRACT_IDS_BYTES.contains(&deserialize(&key)?) {
                     continue
                     continue
                 }
                 }
 
 

+ 4 - 0
src/sdk/src/crypto/contract_id.rs

@@ -51,6 +51,10 @@ lazy_static! {
     /// `EJs7oEjKkvCeEVCmpRsd6fEoTGCFJ7WKUBfmAjwaegN`
     /// `EJs7oEjKkvCeEVCmpRsd6fEoTGCFJ7WKUBfmAjwaegN`
     pub static ref DEPLOYOOOR_CONTRACT_ID: ContractId =
     pub static ref DEPLOYOOOR_CONTRACT_ID: ContractId =
         ContractId::from(poseidon_hash([*CONTRACT_ID_PREFIX, pallas::Base::zero(), pallas::Base::from(2)]));
         ContractId::from(poseidon_hash([*CONTRACT_ID_PREFIX, pallas::Base::zero(), pallas::Base::from(2)]));
+
+    /// Native contract IDs bytes, for various checks
+    pub static ref NATIVE_CONTRACT_IDS_BYTES: [[u8; 32]; 3] =
+        [MONEY_CONTRACT_ID.to_bytes(), DAO_CONTRACT_ID.to_bytes(), DEPLOYOOOR_CONTRACT_ID.to_bytes()];
 }
 }
 
 
 /// ContractId represents an on-chain identifier for a certain smart contract.
 /// ContractId represents an on-chain identifier for a certain smart contract.