Browse Source

drk: parse coinbase transaction

skoupidi 2 years ago
parent
commit
af5542da7b
2 changed files with 22 additions and 8 deletions
  1. 3 3
      bin/drk/dao.sql
  2. 19 5
      bin/drk/src/money.rs

+ 3 - 3
bin/drk/dao.sql

@@ -148,8 +148,8 @@ CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_prop
     -- this is NULL until we have voted on this proposal
     -- this is NULL until we have voted on this proposal
     our_vote_id INTEGER UNIQUE,
     our_vote_id INTEGER UNIQUE,
 
 
-    FOREIGN KEY(our_vote_id) REFERENCES dao_votes(vote_id) ON DELETE CASCADE ON UPDATE CASCADE,
-    FOREIGN KEY(dao_id) REFERENCES dao_daos(dao_id) ON DELETE CASCADE ON UPDATE CASCADE
+    FOREIGN KEY(our_vote_id) REFERENCES Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_votes(vote_id) ON DELETE CASCADE ON UPDATE CASCADE,
+    FOREIGN KEY(dao_id) REFERENCES Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_daos(dao_id) ON DELETE CASCADE ON UPDATE CASCADE
 );
 );
 
 
 CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_votes (
 CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_votes (
@@ -165,5 +165,5 @@ CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_vote
     call_index INTEGER,
     call_index INTEGER,
     -- My code has votes merkle tree and position for votes, but
     -- My code has votes merkle tree and position for votes, but
     -- that might be a mistake...
     -- that might be a mistake...
-    FOREIGN KEY(proposal_id) REFERENCES dao_proposals(proposal_id) ON DELETE CASCADE ON UPDATE CASCADE
+    FOREIGN KEY(proposal_id) REFERENCES Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_proposals(proposal_id) ON DELETE CASCADE ON UPDATE CASCADE
 );
 );

+ 19 - 5
bin/drk/src/money.rs

@@ -26,8 +26,8 @@ use darkfi::{tx::Transaction, zk::halo2::Field, Error, Result};
 use darkfi_money_contract::{
 use darkfi_money_contract::{
     client::{MoneyNote, OwnCoin},
     client::{MoneyNote, OwnCoin},
     model::{
     model::{
-        Coin, MoneyTokenFreezeParamsV1, MoneyTokenMintParamsV1, MoneyTransferParamsV1, Nullifier,
-        TokenId,
+        Coin, MoneyPoWRewardParamsV1, MoneyTokenFreezeParamsV1, MoneyTokenMintParamsV1,
+        MoneyTransferParamsV1, Nullifier, TokenId, DARK_TOKEN_ID,
     },
     },
     MoneyFunction,
     MoneyFunction,
 };
 };
@@ -79,11 +79,11 @@ pub const MONEY_KEYS_COL_SECRET: &str = "secret";
 // MONEY_COINS_TABLE
 // MONEY_COINS_TABLE
 pub const MONEY_COINS_COL_COIN: &str = "coin";
 pub const MONEY_COINS_COL_COIN: &str = "coin";
 pub const MONEY_COINS_COL_IS_SPENT: &str = "is_spent";
 pub const MONEY_COINS_COL_IS_SPENT: &str = "is_spent";
-pub const MONEY_COINS_COL_SERIAL: &str = "serial";
 pub const MONEY_COINS_COL_VALUE: &str = "value";
 pub const MONEY_COINS_COL_VALUE: &str = "value";
 pub const MONEY_COINS_COL_TOKEN_ID: &str = "token_id";
 pub const MONEY_COINS_COL_TOKEN_ID: &str = "token_id";
 pub const MONEY_COINS_COL_SPEND_HOOK: &str = "spend_hook";
 pub const MONEY_COINS_COL_SPEND_HOOK: &str = "spend_hook";
 pub const MONEY_COINS_COL_USER_DATA: &str = "user_data";
 pub const MONEY_COINS_COL_USER_DATA: &str = "user_data";
+pub const MONEY_COINS_COL_COIN_BLIND: &str = "coin_blind";
 pub const MONEY_COINS_COL_VALUE_BLIND: &str = "value_blind";
 pub const MONEY_COINS_COL_VALUE_BLIND: &str = "value_blind";
 pub const MONEY_COINS_COL_TOKEN_BLIND: &str = "token_blind";
 pub const MONEY_COINS_COL_TOKEN_BLIND: &str = "token_blind";
 pub const MONEY_COINS_COL_SECRET: &str = "secret";
 pub const MONEY_COINS_COL_SECRET: &str = "secret";
@@ -133,6 +133,9 @@ impl Drk {
             self.wallet.exec_sql(&query, rusqlite::params![0]).await?;
             self.wallet.exec_sql(&query, rusqlite::params![0]).await?;
         }
         }
 
 
+        // Insert DRK alias
+        self.add_alias("DRK".to_string(), *DARK_TOKEN_ID).await?;
+
         Ok(())
         Ok(())
     }
     }
 
 
@@ -633,6 +636,17 @@ impl Drk {
         let mut freezes: Vec<TokenId> = vec![];
         let mut freezes: Vec<TokenId> = vec![];
 
 
         for (i, call) in tx.calls.iter().enumerate() {
         for (i, call) in tx.calls.iter().enumerate() {
+            if call.data.contract_id == cid && call.data.data[0] == MoneyFunction::PoWRewardV1 as u8
+            {
+                eprintln!("Found Money::PoWRewardV1 in call {i}");
+                let params: MoneyPoWRewardParamsV1 = deserialize(&call.data.data[1..])?;
+
+                coins.push(params.output.coin);
+                notes.push(params.output.note);
+
+                continue
+            }
+
             if call.data.contract_id == cid && call.data.data[0] == MoneyFunction::TransferV1 as u8
             if call.data.contract_id == cid && call.data.data[0] == MoneyFunction::TransferV1 as u8
             {
             {
                 eprintln!("Found Money::TransferV1 in call {i}");
                 eprintln!("Found Money::TransferV1 in call {i}");
@@ -726,11 +740,11 @@ impl Drk {
             *MONEY_COINS_TABLE,
             *MONEY_COINS_TABLE,
             MONEY_COINS_COL_COIN,
             MONEY_COINS_COL_COIN,
             MONEY_COINS_COL_IS_SPENT,
             MONEY_COINS_COL_IS_SPENT,
-            MONEY_COINS_COL_SERIAL,
             MONEY_COINS_COL_VALUE,
             MONEY_COINS_COL_VALUE,
             MONEY_COINS_COL_TOKEN_ID,
             MONEY_COINS_COL_TOKEN_ID,
             MONEY_COINS_COL_SPEND_HOOK,
             MONEY_COINS_COL_SPEND_HOOK,
             MONEY_COINS_COL_USER_DATA,
             MONEY_COINS_COL_USER_DATA,
+            MONEY_COINS_COL_COIN_BLIND,
             MONEY_COINS_COL_VALUE_BLIND,
             MONEY_COINS_COL_VALUE_BLIND,
             MONEY_COINS_COL_TOKEN_BLIND,
             MONEY_COINS_COL_TOKEN_BLIND,
             MONEY_COINS_COL_SECRET,
             MONEY_COINS_COL_SECRET,
@@ -745,11 +759,11 @@ impl Drk {
             let params = rusqlite::params![
             let params = rusqlite::params![
                 serialize(&owncoin.coin),
                 serialize(&owncoin.coin),
                 0, // <-- is_spent
                 0, // <-- is_spent
-                serialize(&owncoin.note.coin_blind),
                 serialize(&owncoin.note.value),
                 serialize(&owncoin.note.value),
                 serialize(&owncoin.note.token_id),
                 serialize(&owncoin.note.token_id),
                 serialize(&owncoin.note.spend_hook),
                 serialize(&owncoin.note.spend_hook),
                 serialize(&owncoin.note.user_data),
                 serialize(&owncoin.note.user_data),
+                serialize(&owncoin.note.coin_blind),
                 serialize(&owncoin.note.value_blind),
                 serialize(&owncoin.note.value_blind),
                 serialize(&owncoin.note.token_blind),
                 serialize(&owncoin.note.token_blind),
                 serialize(&owncoin.secret),
                 serialize(&owncoin.secret),