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

Update dependencies and reduce compilation time.

For release, we don't need halo2 dev stuff, so we move it into dev-deps.
parazyd 4 лет назад
Родитель
Сommit
d765387fd0

+ 51 - 29
Cargo.lock

@@ -351,13 +351,23 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
 
 [[package]]
 name = "bincode"
-version = "1.3.3"
+version = "2.0.0-rc.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+checksum = "f609ceb2c41b0d0277314a789ef0e7eb14593d5485f7c67320bed3924ebb1b33"
 dependencies = [
+ "bincode_derive",
  "serde",
 ]
 
+[[package]]
+name = "bincode_derive"
+version = "2.0.0-rc.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "913287a8f3e00db4c7ae1b87e9b9b8cebd6b89217eaadfc281fa5c897da35dc3"
+dependencies = [
+ "virtue",
+]
+
 [[package]]
 name = "bit-set"
 version = "0.5.2"
@@ -572,9 +582,9 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
 
 [[package]]
 name = "camino"
-version = "1.0.8"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07fd178c5af4d59e83498ef15cf3f154e1a6f9d091270cb86283c65ef44e9ef0"
+checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
 dependencies = [
  "serde",
 ]
@@ -2330,9 +2340,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
 
 [[package]]
 name = "libc"
-version = "0.2.125"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
 
 [[package]]
 name = "libloading"
@@ -2656,9 +2666,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.10.0"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
+checksum = "7b10983b38c53aebdf33f542c6275b0f58a238129d00c4ae0e6fb59738d783ca"
 
 [[package]]
 name = "opaque-debug"
@@ -3020,11 +3030,11 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.38"
+version = "1.0.39"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
 dependencies = [
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -3245,9 +3255,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.5.5"
+version = "1.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
+checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -3262,9 +3272,9 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.25"
+version = "0.6.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
 
 [[package]]
 name = "region"
@@ -3371,9 +3381,9 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.20.5"
+version = "0.20.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a024a432ae760ab3bff924ad91ce1cfa52cb57ed16e1ef32d0d249cfee1a6c13"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
 dependencies = [
  "log 0.4.17",
  "ring",
@@ -3435,12 +3445,12 @@ dependencies = [
 
 [[package]]
 name = "schannel"
-version = "0.1.19"
+version = "0.1.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
 dependencies = [
  "lazy_static",
- "winapi",
+ "windows-sys",
 ]
 
 [[package]]
@@ -3600,9 +3610,9 @@ dependencies = [
 
 [[package]]
 name = "signal-hook"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
 dependencies = [
  "libc",
  "signal-hook-registry",
@@ -3916,13 +3926,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
 
 [[package]]
 name = "syn"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a"
+checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
 dependencies = [
  "proc-macro2",
  "quote",
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -4265,6 +4275,12 @@ version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
 
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
 [[package]]
 name = "unicode-normalization"
 version = "0.1.19"
@@ -4375,6 +4391,12 @@ version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 
+[[package]]
+name = "virtue"
+version = "0.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "757cfbfe0d17ee6f22fe97e536d463047d451b47cf9d11e2b7d1398b0ef274dd"
+
 [[package]]
 name = "wait-timeout"
 version = "0.2.0"
@@ -4717,9 +4739,9 @@ checksum = "52144d4c78e5cf8b055ceab8e5fa22814ce4315d6002ad32cfd914f37c12fd65"
 
 [[package]]
 name = "wast"
-version = "40.0.0"
+version = "41.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bb4f48a8b083dbc50e291e430afb8f524092bb00428957bcc63f49f856c64ac"
+checksum = "f882898b8b817cc4edc16aa3692fdc087b356edc8cc0c2164f5b5181e31c3870"
 dependencies = [
  "leb128",
  "memchr",
@@ -4728,9 +4750,9 @@ dependencies = [
 
 [[package]]
 name = "wat"
-version = "1.0.42"
+version = "1.0.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0401b6395ce0db91629a75b29597ccb66ea29950af9fc859f1bb3a736609c76e"
+checksum = "48b3b9b3e39e66c7fd3f8be785e74444d216260f491e93369e317ed6482ff80f"
 dependencies = [
  "wast",
 ]

+ 9 - 5
Cargo.toml

@@ -38,7 +38,7 @@ members = [
 
 [dependencies]
 # Hard dependencies
-libc = "0.2.125"
+libc = "0.2.126"
 log = "0.4.17"
 thiserror = "1.0.31"
 
@@ -69,7 +69,7 @@ hex = {version = "0.4.3", optional = true}
 bs58 = {version = "0.4.0", optional = true}
 toml = {version = "0.5.9", optional = true}
 bytes = {version = "1.1.0", optional = true}
-bincode = {version = "1.3.3", optional = true}
+bincode = {version = "2.0.0-rc.1", features = ["serde"], optional = true}
 num-bigint = {version = "0.4.3", features = ["serde"], optional = true}
 serde_json = {version = "1.0.81", optional = true}
 serde = {version = "1.0.137", features = ["derive"], optional = true}
@@ -88,7 +88,7 @@ itertools = {version = "0.10.3", optional = true}
 darkfi-derive = {path = "src/util/derive", optional = true}
 darkfi-derive-internal = {path = "src/util/derive-internal", optional = true}
 chrono = {version = "0.4.19", optional = true}
-regex = {version = "1.5.5", optional = true}
+regex = {version = "1.5.6", optional = true}
 
 # Misc
 termion = {version = "1.5.6", optional = true}
@@ -112,8 +112,10 @@ blake2b_simd = {version = "1.0.0", optional = true}
 pasta_curves = {version = "0.4.0", optional = true}
 crypto_api_chachapoly = {version = "0.5.0", optional = true}
 incrementalmerkletree = {version = "0.3.0", optional = true}
-halo2_proofs = {version = "0.1.0", features = ["dev-graph", "gadget-traces", "sanity-checks"], optional = true}
-halo2_gadgets = {version = "0.1.0", features = ["dev-graph", "test-dependencies"], optional = true}
+#halo2_proofs = {version = "0.1.0", features = ["dev-graph", "gadget-traces", "sanity-checks"], optional = true}
+halo2_proofs = {version = "0.1.0", optional = true}
+halo2_gadgets = {version = "0.1.0", optional = true}
+#halo2_gadgets = {version = "0.1.0", features = ["dev-graph", "test-dependencies"], optional = true}
 
 # Smart contract runtime
 drk-sdk = {path = "src/sdk", optional = true}
@@ -130,6 +132,8 @@ sled = {version = "0.34.7", optional = true}
 
 [dev-dependencies]
 clap = {version = "3.1.18", features = ["derive"]}
+halo2_proofs = {version = "0.1.0", features = ["dev-graph", "gadget-traces", "sanity-checks"]}
+halo2_gadgets = {version = "0.1.0", features = ["dev-graph", "test-dependencies"]}
 
 [features]
 async-runtime = [

+ 7 - 7
bin/cashierd/Cargo.toml

@@ -34,10 +34,10 @@ serde = {version = "1.0.137", features = ["derive"]}
 serde_json = "1.0.81"
 
 # Bitcoin bridge dependencies
-bdk = {version = "0.17.0", optional = true}
+bdk = {version = "0.18.0", optional = true}
 anyhow = {version = "1.0.57", optional = true}
-bitcoin = {version = "0.27.1", optional = true}
-secp256k1 = {version = "0.20.1", default-features = false, features = ["rand-std"], optional = true}
+bitcoin = {version = "0.28.1", optional = true}
+secp256k1 = {version = "0.22.1", default-features = false, features = ["rand-std"], optional = true}
 
 # Ethereum bridge dependencies
 hex = {version = "0.4.3", optional = true}
@@ -49,10 +49,10 @@ num-bigint = {version = "0.4.3", features = ["rand", "serde"], optional = true}
 # Solana bridge dependencies
 native-tls = {version = "0.2.10", optional = true}
 async-native-tls = {version = "0.4.0", optional = true}
-solana-client = {version = "1.10.9", optional = true}
-solana-sdk = {version = "1.10.9", optional = true}
-spl-associated-token-account = {version = "1.0.3", features = ["no-entrypoint"], optional = true}
-spl-token = {version = "3.2.0", features = ["no-entrypoint"], optional = true}
+solana-client = {version = "1.10.17", optional = true}
+solana-sdk = {version = "1.10.17", optional = true}
+spl-associated-token-account = {version = "1.0.5", features = ["no-entrypoint"], optional = true}
+spl-token = {version = "3.4.0-alpha", features = ["no-entrypoint"], optional = true}
 tungstenite = {version = "0.17.2", optional = true}
 
 [features]

+ 4 - 2
example/lead.rs

@@ -27,6 +27,8 @@ use darkfi::{
     zk::circuit::lead_contract::LeadContract,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 fn create_coins_sks(len: usize) -> (Vec<MerkleNode>, Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]>) {
     /*
     at the onset of an epoch, the first slot's coin's secret key
@@ -35,7 +37,7 @@ fn create_coins_sks(len: usize) -> (Vec<MerkleNode>, Vec<[MerkleNode; MERKLE_DEP
      */
     let mut rng = thread_rng();
     let sk: u64 = rng.gen();
-    let mut tree = BridgeTree::<MerkleNode, 32>::new(len);
+    let mut tree = BridgeTree::<MerkleNode, MERKLE_DEPTH>::new(len);
     let mut root_sks: Vec<MerkleNode> = vec![];
     let mut path_sks: Vec<[MerkleNode; MERKLE_DEPTH_ORCHARD]> = vec![];
     for i in 0..len {
@@ -77,7 +79,7 @@ fn create_coins(
         seeds.push(rho.clone());
     }
 
-    let mut tree_cm = BridgeTree::<MerkleNode, 32>::new(len);
+    let mut tree_cm = BridgeTree::<MerkleNode, MERKLE_DEPTH>::new(len);
     let mut coins: Vec<LeadCoin> = vec![];
     for i in 0..len {
         let c_v = pallas::Base::from(values[i]);

+ 5 - 2
example/tx.rs

@@ -4,6 +4,7 @@ use rand::rngs::OsRng;
 
 use darkfi::{
     crypto::{
+        constants::MERKLE_DEPTH_ORCHARD,
         keypair::{Keypair, PublicKey, SecretKey},
         merkle_node::MerkleNode,
         note::{EncryptedNote, Note},
@@ -22,10 +23,12 @@ use darkfi::{
     Result,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 /// The state machine, held in memory.
 struct MemoryState {
     /// The entire Merkle tree state
-    tree: BridgeTree<MerkleNode, 32>,
+    tree: BridgeTree<MerkleNode, MERKLE_DEPTH>,
     /// List of all previous and the current Merkle roots.
     /// This is the hashed value of all the children.
     merkle_roots: Vec<MerkleNode>,
@@ -131,7 +134,7 @@ fn main() -> Result<()> {
     let burn_vk = VerifyingKey::build(K, &BurnContract::default());
 
     let mut state = MemoryState {
-        tree: BridgeTree::<MerkleNode, 32>::new(100),
+        tree: BridgeTree::<MerkleNode, MERKLE_DEPTH>::new(100),
         merkle_roots: vec![],
         nullifiers: vec![],
         own_coins: vec![],

+ 12 - 8
src/error.rs

@@ -76,8 +76,12 @@ pub enum Error {
     TomlDeserializeError(#[from] toml::de::Error),
 
     #[cfg(feature = "bincode")]
-    #[error("bincode error: {0}")]
-    BincodeError(String),
+    #[error("bincode decode error: {0}")]
+    BincodeDecodeError(String),
+
+    #[cfg(feature = "bincode")]
+    #[error("bincode encode error: {0}")]
+    BincodeEncodeError(String),
 
     #[cfg(feature = "bs58")]
     #[error(transparent)]
@@ -467,16 +471,16 @@ impl From<tungstenite::Error> for Error {
 }
 
 #[cfg(feature = "bincode")]
-impl From<bincode::ErrorKind> for Error {
-    fn from(err: bincode::ErrorKind) -> Self {
-        Self::BincodeError(err.to_string())
+impl From<bincode::error::DecodeError> for Error {
+    fn from(err: bincode::error::DecodeError) -> Self {
+        Self::BincodeDecodeError(err.to_string())
     }
 }
 
 #[cfg(feature = "bincode")]
-impl From<Box<bincode::ErrorKind>> for Error {
-    fn from(err: Box<bincode::ErrorKind>) -> Self {
-        Self::BincodeError(err.to_string())
+impl From<bincode::error::EncodeError> for Error {
+    fn from(err: bincode::error::EncodeError) -> Self {
+        Self::BincodeEncodeError(err.to_string())
     }
 }
 

+ 4 - 1
src/node/client.rs

@@ -8,6 +8,7 @@ use crate::{
     crypto::{
         address::Address,
         coin::Coin,
+        constants::MERKLE_DEPTH_ORCHARD,
         keypair::{Keypair, PublicKey},
         merkle_node::MerkleNode,
         proof::ProvingKey,
@@ -28,6 +29,8 @@ use crate::{
     ClientFailed, ClientResult, Result,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 /// The Client structure, used for transaction operations.
 /// This includes, receiving, broadcasting, and building.
 pub struct Client {
@@ -217,7 +220,7 @@ impl Client {
         self.wallet.get_balances().await
     }
 
-    pub async fn get_tree(&self) -> Result<BridgeTree<MerkleNode, 32>> {
+    pub async fn get_tree(&self) -> Result<BridgeTree<MerkleNode, MERKLE_DEPTH>> {
         self.wallet.get_tree().await
     }
 

+ 5 - 2
src/node/memorystate.rs

@@ -3,16 +3,19 @@ use log::debug;
 
 use super::state::{ProgramState, State, StateUpdate};
 use crate::crypto::{
-    keypair::PublicKey, merkle_node::MerkleNode, nullifier::Nullifier, proof::VerifyingKey,
+    constants::MERKLE_DEPTH_ORCHARD, keypair::PublicKey, merkle_node::MerkleNode,
+    nullifier::Nullifier, proof::VerifyingKey,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 /// In-memory state extension for state transition validations
 #[derive(Clone)]
 pub struct MemoryState {
     /// Canonical state
     pub canon: State,
     /// The entire Merkle tree state (copied from `canon`)
-    pub tree: BridgeTree<MerkleNode, 32>,
+    pub tree: BridgeTree<MerkleNode, MERKLE_DEPTH>,
     /// List of all previous and the current merkle roots.
     pub merkle_roots: Vec<MerkleNode>,
     /// Nullifiers prevent double-spending

+ 4 - 1
src/node/state.rs

@@ -7,6 +7,7 @@ use crate::{
     blockchain::{nfstore::NullifierStore, rootstore::RootStore},
     crypto::{
         coin::Coin,
+        constants::MERKLE_DEPTH_ORCHARD,
         keypair::{PublicKey, SecretKey},
         merkle_node::MerkleNode,
         note::{EncryptedNote, Note},
@@ -21,6 +22,8 @@ use crate::{
     Result, VerifyFailed, VerifyResult,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 /// Trait implementing the state functions used by the state transition.
 pub trait ProgramState {
     /// Check if the public key is coming from a trusted cashier
@@ -117,7 +120,7 @@ pub fn state_transition<S: ProgramState>(state: &S, tx: Transaction) -> VerifyRe
 #[derive(Clone)]
 pub struct State {
     /// The entire Merkle tree state
-    pub tree: BridgeTree<MerkleNode, 32>,
+    pub tree: BridgeTree<MerkleNode, MERKLE_DEPTH>,
     /// List of all previous and the current merkle roots.
     /// This is the hashed value of all the children.
     pub merkle_roots: RootStore,

+ 12 - 12
src/runtime/memory.rs

@@ -49,18 +49,18 @@ mod tests {
 
     fn wasmer_instance() -> Instance {
         let wasm_bytes = wat2wasm(
-                                br#"
-                                            (module
-                                                          (type $add_one_t (func (param i32) (result i32)))
-                                                                        (func $add_one_f (type $add_one_t) (param $value i32) (result i32)
-                                                                                        local.get $value
-                                                                                                        i32.const 1
-                                                                                                                        i32.add)
-                                                                                                                                      (export "add_one" (func $add_one_f))
-                                                                                                                                                    (memory $memory (export "memory") 17))
-                                                                                                                                                                "#,
-                                                                                                                                                                        )
-                                                                                                                                                                                .unwrap();
+            br#"
+            (module
+            (type $add_one_t (func (param i32) (result i32)))
+            (func $add_one_f (type $add_one_t) (param $value i32) (result i32)
+            local.get $value
+            i32.const 1
+            i32.add)
+            (export "add_one" (func $add_one_f))
+            (memory $memory (export "memory") 17))
+            "#,
+        )
+        .unwrap();
 
         let store = Store::default();
         let module = Module::new(&store, wasm_bytes).unwrap();

+ 2 - 2
src/util/derive-internal/Cargo.toml

@@ -4,6 +4,6 @@ version = "0.3.0"
 edition = "2021"
 
 [dependencies]
-proc-macro2 = "1.0.38"
+proc-macro2 = "1.0.39"
 quote = "1.0.18"
-syn = {version = "1.0.94", features = ["full", "fold"]}
+syn = {version = "1.0.95", features = ["full", "fold"]}

+ 2 - 2
src/util/derive/Cargo.toml

@@ -8,7 +8,7 @@ proc-macro = true
 
 [dependencies]
 proc-macro-crate = "1.1.3"
-proc-macro2 = "1.0.38"
-syn = {version = "1.0.94", features = ["full", "fold"]}
+proc-macro2 = "1.0.39"
+syn = {version = "1.0.95", features = ["full", "fold"]}
 
 darkfi-derive-internal = {path = "../derive-internal"}

+ 1 - 1
src/wallet/mod.rs

@@ -1,2 +1,2 @@
-pub mod cashierdb;
+//pub mod cashierdb;
 pub mod walletdb;

+ 10 - 6
src/wallet/walletdb.rs

@@ -14,6 +14,7 @@ use crate::{
     crypto::{
         address::Address,
         coin::Coin,
+        constants::MERKLE_DEPTH_ORCHARD,
         keypair::{Keypair, PublicKey, SecretKey},
         merkle_node::MerkleNode,
         note::Note,
@@ -31,6 +32,8 @@ use crate::{
     Result,
 };
 
+const MERKLE_DEPTH: u8 = MERKLE_DEPTH_ORCHARD as u8;
+
 pub type WalletPtr = Arc<WalletDb>;
 
 #[derive(Clone, Debug)]
@@ -205,7 +208,7 @@ impl WalletDb {
         Ok(keypairs)
     }
 
-    pub async fn tree_gen(&self) -> Result<BridgeTree<MerkleNode, 32>> {
+    pub async fn tree_gen(&self) -> Result<BridgeTree<MerkleNode, MERKLE_DEPTH>> {
         debug!("Attempting to generate merkle tree");
         let mut conn = self.conn.acquire().await?;
 
@@ -215,27 +218,28 @@ impl WalletDb {
                 Err(WalletTreeExists)
             }
             Err(_) => {
-                let tree = BridgeTree::<MerkleNode, 32>::new(100);
+                let tree = BridgeTree::<MerkleNode, MERKLE_DEPTH>::new(100);
                 self.put_tree(&tree).await?;
                 Ok(tree)
             }
         }
     }
 
-    pub async fn get_tree(&self) -> Result<BridgeTree<MerkleNode, 32>> {
+    pub async fn get_tree(&self) -> Result<BridgeTree<MerkleNode, MERKLE_DEPTH>> {
         debug!("Getting merkle tree");
         let mut conn = self.conn.acquire().await?;
 
         let row = sqlx::query("SELECT * FROM tree").fetch_one(&mut conn).await?;
-        let tree: BridgeTree<MerkleNode, 32> = bincode::deserialize(row.get("tree"))?;
+        let (tree, _read): (BridgeTree<MerkleNode, MERKLE_DEPTH>, usize) =
+            bincode::serde::decode_from_slice(row.get("tree"), bincode::config::legacy())?;
         Ok(tree)
     }
 
-    pub async fn put_tree(&self, tree: &BridgeTree<MerkleNode, 32>) -> Result<()> {
+    pub async fn put_tree(&self, tree: &BridgeTree<MerkleNode, MERKLE_DEPTH>) -> Result<()> {
         debug!("put_tree(): Attempting to write merkle tree");
         let mut conn = self.conn.acquire().await?;
 
-        let tree_bytes = bincode::serialize(tree)?;
+        let tree_bytes = bincode::serde::encode_to_vec(tree, bincode::config::legacy())?;
 
         debug!("put_tree(): Deleting old row");
         sqlx::query("DELETE FROM tree;").execute(&mut conn).await?;