From 6c322acaf8011ca5c298818202afda6ff03844ca Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Fri, 31 May 2019 15:52:09 +0100 Subject: [PATCH 1/8] rework kernel features support to handle fee and lock_height on features variants --- controller/tests/transaction.rs | 6 +-- libwallet/src/slate.rs | 60 +++++++++++++++++------------- libwallet/src/slate_versions/v2.rs | 5 ++- libwallet/tests/libwallet.rs | 4 +- 4 files changed, 41 insertions(+), 34 deletions(-) diff --git a/controller/tests/transaction.rs b/controller/tests/transaction.rs index 22731c0d..6c79e1f5 100644 --- a/controller/tests/transaction.rs +++ b/controller/tests/transaction.rs @@ -119,13 +119,9 @@ fn basic_transaction_api(test_dir: &'static str) -> Result<(), libwallet::Error> // Check we have a single kernel and that it is a Plain kernel (no lock_height). assert_eq!(slate.tx.kernels().len(), 1); - assert_eq!( - slate.tx.kernels().first().map(|k| k.lock_height).unwrap(), - 0 - ); assert_eq!( slate.tx.kernels().first().map(|k| k.features).unwrap(), - transaction::KernelFeatures::Plain + transaction::KernelFeatures::Plain { fee: 0 } ); Ok(()) diff --git a/libwallet/src/slate.rs b/libwallet/src/slate.rs index 310e0539..a3ddd92b 100644 --- a/libwallet/src/slate.rs +++ b/libwallet/src/slate.rs @@ -20,8 +20,7 @@ use crate::error::{Error, ErrorKind}; use crate::grin_core::core::amount_to_hr_string; use crate::grin_core::core::committed::Committed; use crate::grin_core::core::transaction::{ - kernel_features, kernel_sig_msg, Input, Output, Transaction, TransactionBody, TxKernel, - Weighting, + Input, KernelFeatures, Output, Transaction, TransactionBody, TxKernel, Weighting, }; use crate::grin_core::core::verifier_cache::LruVerifierCache; use crate::grin_core::libtx::{aggsig, build, proof::ProofBuild, secp_ser, tx_fee}; @@ -290,11 +289,16 @@ impl Slate { } // This is the msg that we will sign as part of the tx kernel. - // Currently includes the fee and the lock_height. + // If lock_height is 0 then build a plain kernel, otherwise build a height locked kernel. fn msg_to_sign(&self) -> Result { - // Currently we only support interactively creating a tx with a "default" kernel. - let features = kernel_features(self.lock_height); - let msg = kernel_sig_msg(self.fee, self.lock_height, features)?; + let features = match self.lock_height { + 0 => KernelFeatures::Plain { fee: self.fee }, + _ => KernelFeatures::HeightLocked { + fee: self.fee, + lock_height: self.lock_height, + }, + }; + let msg = features.kernel_sig_msg()?; Ok(msg) } @@ -881,19 +885,19 @@ impl From<&Output> for OutputV2 { impl From<&TxKernel> for TxKernelV2 { fn from(kernel: &TxKernel) -> TxKernelV2 { - let TxKernel { - features, - fee, - lock_height, - excess, - excess_sig, - } = *kernel; + let (features, fee, lock_height) = match kernel.features { + KernelFeatures::Plain { fee } => (CompatKernelFeatures::Plain, fee, 0), + KernelFeatures::Coinbase => (CompatKernelFeatures::Coinbase, 0, 0), + KernelFeatures::HeightLocked { fee, lock_height } => { + (CompatKernelFeatures::HeightLocked, fee, lock_height) + } + }; TxKernelV2 { features, fee, lock_height, - excess, - excess_sig, + excess: kernel.excess, + excess_sig: kernel.excess_sig, } } } @@ -1025,19 +1029,23 @@ impl From<&OutputV2> for Output { impl From<&TxKernelV2> for TxKernel { fn from(kernel: &TxKernelV2) -> TxKernel { - let TxKernelV2 { - features, - fee, - lock_height, - excess, - excess_sig, - } = *kernel; + let (fee, lock_height) = (kernel.fee, kernel.lock_height); + let features = match kernel.features { + CompatKernelFeatures::Plain => KernelFeatures::Plain { fee }, + CompatKernelFeatures::Coinbase => KernelFeatures::Coinbase, + CompatKernelFeatures::HeightLocked => KernelFeatures::HeightLocked { fee, lock_height }, + }; TxKernel { features, - fee, - lock_height, - excess, - excess_sig, + excess: kernel.excess, + excess_sig: kernel.excess_sig, } } } + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum CompatKernelFeatures { + Plain, + Coinbase, + HeightLocked, +} diff --git a/libwallet/src/slate_versions/v2.rs b/libwallet/src/slate_versions/v2.rs index 336fb896..2c5832f8 100644 --- a/libwallet/src/slate_versions/v2.rs +++ b/libwallet/src/slate_versions/v2.rs @@ -35,13 +35,14 @@ //! orig_version: u16, //! block_header_version: u16, -use crate::grin_core::core::transaction::{KernelFeatures, OutputFeatures}; +use crate::grin_core::core::transaction::OutputFeatures; use crate::grin_core::libtx::secp_ser; use crate::grin_keychain::BlindingFactor; use crate::grin_util::secp; use crate::grin_util::secp::key::PublicKey; use crate::grin_util::secp::pedersen::{Commitment, RangeProof}; use crate::grin_util::secp::Signature; +use crate::slate::CompatKernelFeatures; use uuid::Uuid; #[derive(Serialize, Deserialize, Debug, Clone)] @@ -162,7 +163,7 @@ pub struct OutputV2 { #[derive(Serialize, Deserialize, Debug, Clone)] pub struct TxKernelV2 { /// Options for a kernel's structure or use - pub features: KernelFeatures, + pub features: CompatKernelFeatures, /// Fee originally included in the transaction this proof is for. #[serde(with = "secp_ser::string_or_u64")] pub fee: u64, diff --git a/libwallet/tests/libwallet.rs b/libwallet/tests/libwallet.rs index 09505794..e858052b 100644 --- a/libwallet/tests/libwallet.rs +++ b/libwallet/tests/libwallet.rs @@ -23,7 +23,9 @@ use grin_wallet_util::grin_util::secp::key::{PublicKey, SecretKey}; use rand::thread_rng; fn kernel_sig_msg() -> secp::Message { - transaction::kernel_sig_msg(0, 0, transaction::KernelFeatures::Plain).unwrap() + transaction::KernelFeatures::Plain { fee: 0 } + .kernel_sig_msg() + .unwrap() } #[test] From 6b95593e7ff074832747e930a7cbba5b3f640f7c Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Tue, 4 Jun 2019 13:56:52 +0100 Subject: [PATCH 2/8] make sure we only set lock_height if >0 --- libwallet/src/internal/selection.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libwallet/src/internal/selection.rs b/libwallet/src/internal/selection.rs index d4793cbc..1fa89b1f 100644 --- a/libwallet/src/internal/selection.rs +++ b/libwallet/src/internal/selection.rs @@ -286,9 +286,10 @@ where let (mut parts, change_amounts_derivations) = inputs_and_change(&coins, wallet, keychain_mask, amount, fee, change_outputs)?; - // This is more proof of concept than anything but here we set lock_height - // on tx being sent (based on current chain height via api). - parts.push(build::with_lock_height(lock_height)); + // Build a "Plain" kernel unless lock_height>0 explicitly specified. + if lock_height > 0 { + parts.push(build::with_lock_height(lock_height)); + } Ok((parts, coins, change_amounts_derivations, fee)) } From 4b993b045690f27e3fcec06ad1c6bd6714a8b524 Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Thu, 1 Aug 2019 14:50:31 +0100 Subject: [PATCH 3/8] rebase against master and compile against kernel_feature_enum_variants branch on grin repo --- Cargo.lock | 74 +++++++++++++++++++------------------------------ util/Cargo.toml | 36 ++++++++++++------------ 2 files changed, 47 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95656d2c..e4e1a240 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -581,17 +581,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "grin_api" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_chain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_p2p 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_pool 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_chain 2.0.1-beta.1", + "grin_core 2.0.1-beta.1", + "grin_p2p 2.0.1-beta.1", + "grin_pool 2.0.1-beta.1", + "grin_store 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-rustls 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -613,7 +612,6 @@ dependencies = [ [[package]] name = "grin_chain" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -621,10 +619,10 @@ dependencies = [ "croaring 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_keychain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_core 2.0.1-beta.1", + "grin_keychain 2.0.1-beta.1", + "grin_store 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -636,7 +634,6 @@ dependencies = [ [[package]] name = "grin_core" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -645,8 +642,8 @@ dependencies = [ "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_keychain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_keychain 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -663,12 +660,11 @@ dependencies = [ [[package]] name = "grin_keychain" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_util 2.0.1-beta.1", "hmac 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -686,16 +682,15 @@ dependencies = [ [[package]] name = "grin_p2p" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_chain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_chain 2.0.1-beta.1", + "grin_core 2.0.1-beta.1", + "grin_store 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", @@ -708,16 +703,15 @@ dependencies = [ [[package]] name = "grin_pool" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_keychain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_core 2.0.1-beta.1", + "grin_keychain 2.0.1-beta.1", + "grin_store 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", @@ -742,15 +736,14 @@ dependencies = [ [[package]] name = "grin_store" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "croaring 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_core 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "lmdb-zero 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -763,7 +756,6 @@ dependencies = [ [[package]] name = "grin_util" version = "2.0.1-beta.1" -source = "git+https://github.com/mimblewimble/grin#705fcbb1a62a1cfddb1e8b4fc9c30bab4a388818" dependencies = [ "backtrace 0.3.34 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -926,12 +918,12 @@ name = "grin_wallet_util" version = "2.1.0-beta.1" dependencies = [ "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "grin_api 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_chain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_keychain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", - "grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)", + "grin_api 2.0.1-beta.1", + "grin_chain 2.0.1-beta.1", + "grin_core 2.0.1-beta.1", + "grin_keychain 2.0.1-beta.1", + "grin_store 2.0.1-beta.1", + "grin_util 2.0.1-beta.1", "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2886,15 +2878,7 @@ dependencies = [ "checksum getrandom 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8e190892c840661957ba9f32dacfb3eb405e657f9f9f60485605f0bb37d6f8" "checksum git2 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cb400360e8a4d61b10e648285bbfa919bbf9519d0d5d5720354456f44349226" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" -"checksum grin_api 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_chain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_core 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_keychain 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_p2p 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_pool 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" "checksum grin_secp256k1zkp 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "23027a7673df2c2b20fb9589d742ff400a10a9c3e4c769a77e9fa3bd19586822" -"checksum grin_store 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" -"checksum grin_util 2.0.1-beta.1 (git+https://github.com/mimblewimble/grin)" = "" "checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum hmac 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "733e1b3ac906631ca01ebb577e9bb0f5e37a454032b9036b5eaea4013ed6f99a" diff --git a/util/Cargo.toml b/util/Cargo.toml index 2700825a..ddc800bf 100644 --- a/util/Cargo.toml +++ b/util/Cargo.toml @@ -25,28 +25,28 @@ dirs = "1.0.3" # grin_store = "2.0.0" # For beta release -# grin_core = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } -# grin_keychain = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } -# grin_chain = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } -# grin_util = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } -# grin_api = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } -# grin_store = { git = "https://github.com/mimblewimble/grin", tag = "2.0.0-beta.2" } +# grin_core = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } +# grin_keychain = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } +# grin_chain = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } +# grin_util = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } +# grin_api = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } +# grin_store = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } # For bleeding edge -grin_core = { git = "https://github.com/mimblewimble/grin", branch = "master" } -grin_keychain = { git = "https://github.com/mimblewimble/grin", branch = "master" } -grin_chain = { git = "https://github.com/mimblewimble/grin", branch = "master" } -grin_util = { git = "https://github.com/mimblewimble/grin", branch = "master" } -grin_api = { git = "https://github.com/mimblewimble/grin", branch = "master" } -grin_store = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_core = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_keychain = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_chain = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_util = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_api = { git = "https://github.com/mimblewimble/grin", branch = "master" } +#grin_store = { git = "https://github.com/mimblewimble/grin", branch = "master" } # For local testing -#grin_core = { path = "../../grin/core", version= "2.0.1-beta.1"} -#grin_keychain = { path = "../../grin/keychain", version= "2.0.1-beta.1"} -#grin_chain = { path = "../../grin/chain", version= "2.0.1-beta.1"} -#grin_util = { path = "../../grin/util", version= "2.0.1-beta.1"} -#grin_api = { path = "../../grin/api", version= "2.0.1-beta.1"} -#grin_store = { path = "../../grin/store", version= "2.0.1-beta.1"} +grin_core = { path = "../../grin/core", version= "2.0.1-beta.1"} +grin_keychain = { path = "../../grin/keychain", version= "2.0.1-beta.1"} +grin_chain = { path = "../../grin/chain", version= "2.0.1-beta.1"} +grin_util = { path = "../../grin/util", version= "2.0.1-beta.1"} +grin_api = { path = "../../grin/api", version= "2.0.1-beta.1"} +grin_store = { path = "../../grin/store", version= "2.0.1-beta.1"} [dev-dependencies] pretty_assertions = "0.5.1" From 3c45dad84652cf861fb5f04d893796d9c41ed83b Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Wed, 14 Aug 2019 11:36:35 +0100 Subject: [PATCH 4/8] bleeding edge grin libs (master) --- util/Cargo.toml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/util/Cargo.toml b/util/Cargo.toml index ddc800bf..f97ce5f2 100644 --- a/util/Cargo.toml +++ b/util/Cargo.toml @@ -33,20 +33,20 @@ dirs = "1.0.3" # grin_store = { git = "https://github.com/mimblewimble/grin", tag = "2.0.1-beta.1" } # For bleeding edge -#grin_core = { git = "https://github.com/mimblewimble/grin", branch = "master" } -#grin_keychain = { git = "https://github.com/mimblewimble/grin", branch = "master" } -#grin_chain = { git = "https://github.com/mimblewimble/grin", branch = "master" } -#grin_util = { git = "https://github.com/mimblewimble/grin", branch = "master" } -#grin_api = { git = "https://github.com/mimblewimble/grin", branch = "master" } -#grin_store = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_core = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_keychain = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_chain = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_util = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_api = { git = "https://github.com/mimblewimble/grin", branch = "master" } +grin_store = { git = "https://github.com/mimblewimble/grin", branch = "master" } # For local testing -grin_core = { path = "../../grin/core", version= "2.0.1-beta.1"} -grin_keychain = { path = "../../grin/keychain", version= "2.0.1-beta.1"} -grin_chain = { path = "../../grin/chain", version= "2.0.1-beta.1"} -grin_util = { path = "../../grin/util", version= "2.0.1-beta.1"} -grin_api = { path = "../../grin/api", version= "2.0.1-beta.1"} -grin_store = { path = "../../grin/store", version= "2.0.1-beta.1"} +#grin_core = { path = "../../grin/core", version= "2.0.1-beta.1"} +#grin_keychain = { path = "../../grin/keychain", version= "2.0.1-beta.1"} +#grin_chain = { path = "../../grin/chain", version= "2.0.1-beta.1"} +#grin_util = { path = "../../grin/util", version= "2.0.1-beta.1"} +#grin_api = { path = "../../grin/api", version= "2.0.1-beta.1"} +#grin_store = { path = "../../grin/store", version= "2.0.1-beta.1"} [dev-dependencies] pretty_assertions = "0.5.1" From ec3d08a710688eab3fa81a0d8b4bc6d3d98124ab Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Mon, 19 Aug 2019 16:35:05 +0100 Subject: [PATCH 5/8] translate to/from TransactionV2 correctly in owner api and foreign api --- api/src/foreign_rpc.rs | 27 ++++++++-------- api/src/owner_rpc.rs | 35 ++++++++++---------- api/src/owner_rpc_s.rs | 53 +++++++++++++++++++------------ impls/src/test_framework/mod.rs | 4 +-- libwallet/src/api_impl/types.rs | 5 +-- libwallet/src/internal/updater.rs | 3 +- 6 files changed, 72 insertions(+), 55 deletions(-) diff --git a/api/src/foreign_rpc.rs b/api/src/foreign_rpc.rs index a71cc6db..2028c11b 100644 --- a/api/src/foreign_rpc.rs +++ b/api/src/foreign_rpc.rs @@ -192,7 +192,7 @@ pub trait ForeignRpc { # ,false, 1 ,false, false); ``` */ - fn verify_slate_messages(&self, slate: &Slate) -> Result<(), ErrorKind>; + fn verify_slate_messages(&self, slate: VersionedSlate) -> Result<(), ErrorKind>; /** Networked version of [Foreign::receive_tx](struct.Foreign.html#method.receive_tx). @@ -513,7 +513,7 @@ pub trait ForeignRpc { # ,false, 5, false, true); ``` */ - fn finalize_invoice_tx(&self, slate: &Slate) -> Result; + fn finalize_invoice_tx(&self, slate: VersionedSlate) -> Result; } impl<'a, L, C, K> ForeignRpc for Foreign<'a, L, C, K> @@ -530,31 +530,32 @@ where Foreign::build_coinbase(self, block_fees).map_err(|e| e.kind()) } - fn verify_slate_messages(&self, slate: &Slate) -> Result<(), ErrorKind> { - Foreign::verify_slate_messages(self, slate).map_err(|e| e.kind()) + fn verify_slate_messages(&self, slate: VersionedSlate) -> Result<(), ErrorKind> { + Foreign::verify_slate_messages(self, &Slate::from(slate)).map_err(|e| e.kind()) } fn receive_tx( &self, - slate: VersionedSlate, + in_slate: VersionedSlate, dest_acct_name: Option, message: Option, ) -> Result { - let version = slate.version(); - let slate: Slate = slate.into(); - let slate = Foreign::receive_tx( + let version = in_slate.version(); + let out_slate = Foreign::receive_tx( self, - &slate, + &Slate::from(in_slate), dest_acct_name.as_ref().map(String::as_str), message, ) .map_err(|e| e.kind())?; - - Ok(VersionedSlate::into_version(slate, version)) + Ok(VersionedSlate::into_version(out_slate, version)) } - fn finalize_invoice_tx(&self, slate: &Slate) -> Result { - Foreign::finalize_invoice_tx(self, slate).map_err(|e| e.kind()) + fn finalize_invoice_tx(&self, in_slate: VersionedSlate) -> Result { + let version = in_slate.version(); + let out_slate = + Foreign::finalize_invoice_tx(self, &Slate::from(in_slate)).map_err(|e| e.kind())?; + Ok(VersionedSlate::into_version(out_slate, version)) } } diff --git a/api/src/owner_rpc.rs b/api/src/owner_rpc.rs index 5ec3be38..b7a42568 100644 --- a/api/src/owner_rpc.rs +++ b/api/src/owner_rpc.rs @@ -17,6 +17,7 @@ use uuid::Uuid; use crate::core::core::Transaction; use crate::keychain::{Identifier, Keychain}; +use crate::libwallet::slate_versions::v2::TransactionV2; use crate::libwallet::{ AcctPathMapping, ErrorKind, InitTxArgs, IssueInvoiceTxArgs, NodeClient, NodeHeightResult, OutputCommitMapping, Slate, SlateVersion, TxLogEntry, VersionedSlate, WalletInfo, @@ -949,7 +950,7 @@ pub trait OwnerRpc: Sync + Send { ``` */ - fn post_tx(&self, tx: &Transaction, fluff: bool) -> Result<(), ErrorKind>; + fn post_tx(&self, tx: TransactionV2, fluff: bool) -> Result<(), ErrorKind>; /** Networked version of [Owner::cancel_tx](struct.Owner.html#method.cancel_tx). @@ -1073,7 +1074,7 @@ pub trait OwnerRpc: Sync + Send { # , false, 5, true, true, false); ``` */ - fn get_stored_tx(&self, tx: &TxLogEntry) -> Result, ErrorKind>; + fn get_stored_tx(&self, tx: &TxLogEntry) -> Result, ErrorKind>; /** Networked version of [Owner::verify_slate_messages](struct.Owner.html#method.verify_slate_messages). @@ -1304,19 +1305,18 @@ where fn process_invoice_tx( &self, - slate: VersionedSlate, + in_slate: VersionedSlate, args: InitTxArgs, ) -> Result { - let in_slate = Slate::from(slate); - let out_slate = - Owner::process_invoice_tx(self, None, &in_slate, args).map_err(|e| e.kind())?; + let out_slate = Owner::process_invoice_tx(self, None, &Slate::from(in_slate), args) + .map_err(|e| e.kind())?; let version = SlateVersion::V2; Ok(VersionedSlate::into_version(out_slate, version)) } - fn finalize_tx(&self, slate: VersionedSlate) -> Result { - let in_slate = Slate::from(slate); - let out_slate = Owner::finalize_tx(self, None, &in_slate).map_err(|e| e.kind())?; + fn finalize_tx(&self, in_slate: VersionedSlate) -> Result { + let out_slate = + Owner::finalize_tx(self, None, &Slate::from(in_slate)).map_err(|e| e.kind())?; let version = SlateVersion::V2; Ok(VersionedSlate::into_version(out_slate, version)) } @@ -1326,25 +1326,26 @@ where slate: VersionedSlate, participant_id: usize, ) -> Result<(), ErrorKind> { - let in_slate = Slate::from(slate); - Owner::tx_lock_outputs(self, None, &in_slate, participant_id).map_err(|e| e.kind()) + Owner::tx_lock_outputs(self, None, &Slate::from(slate), participant_id) + .map_err(|e| e.kind()) } fn cancel_tx(&self, tx_id: Option, tx_slate_id: Option) -> Result<(), ErrorKind> { Owner::cancel_tx(self, None, tx_id, tx_slate_id).map_err(|e| e.kind()) } - fn get_stored_tx(&self, tx: &TxLogEntry) -> Result, ErrorKind> { - Owner::get_stored_tx(self, None, tx).map_err(|e| e.kind()) + fn get_stored_tx(&self, tx: &TxLogEntry) -> Result, ErrorKind> { + Owner::get_stored_tx(self, None, tx) + .map(|x| x.map(|y| TransactionV2::from(y))) + .map_err(|e| e.kind()) } - fn post_tx(&self, tx: &Transaction, fluff: bool) -> Result<(), ErrorKind> { - Owner::post_tx(self, None, tx, fluff).map_err(|e| e.kind()) + fn post_tx(&self, tx: TransactionV2, fluff: bool) -> Result<(), ErrorKind> { + Owner::post_tx(self, None, &Transaction::from(tx), fluff).map_err(|e| e.kind()) } fn verify_slate_messages(&self, slate: VersionedSlate) -> Result<(), ErrorKind> { - let in_slate = Slate::from(slate); - Owner::verify_slate_messages(self, None, &in_slate).map_err(|e| e.kind()) + Owner::verify_slate_messages(self, None, &Slate::from(slate)).map_err(|e| e.kind()) } fn restore(&self) -> Result<(), ErrorKind> { diff --git a/api/src/owner_rpc_s.rs b/api/src/owner_rpc_s.rs index 2861ee68..8ee4fb71 100644 --- a/api/src/owner_rpc_s.rs +++ b/api/src/owner_rpc_s.rs @@ -17,6 +17,7 @@ use uuid::Uuid; use crate::core::core::Transaction; use crate::keychain::{Identifier, Keychain}; +use crate::libwallet::slate_versions::v2::TransactionV2; use crate::libwallet::{ AcctPathMapping, ErrorKind, InitTxArgs, IssueInvoiceTxArgs, NodeClient, NodeHeightResult, OutputCommitMapping, Slate, SlateVersion, TxLogEntry, VersionedSlate, WalletInfo, @@ -987,7 +988,7 @@ pub trait OwnerRpcS { ``` */ - fn post_tx(&self, token: Token, tx: &Transaction, fluff: bool) -> Result<(), ErrorKind>; + fn post_tx(&self, token: Token, tx: TransactionV2, fluff: bool) -> Result<(), ErrorKind>; /** Networked version of [Owner::cancel_tx](struct.Owner.html#method.cancel_tx). @@ -1125,7 +1126,7 @@ pub trait OwnerRpcS { &self, token: Token, tx: &TxLogEntry, - ) -> Result, ErrorKind>; + ) -> Result, ErrorKind>; /** Networked version of [Owner::verify_slate_messages](struct.Owner.html#method.verify_slate_messages). @@ -1402,13 +1403,16 @@ where fn process_invoice_tx( &self, token: Token, - slate: VersionedSlate, + in_slate: VersionedSlate, args: InitTxArgs, ) -> Result { - let in_slate = Slate::from(slate); - let out_slate = - Owner::process_invoice_tx(self, (&token.keychain_mask).as_ref(), &in_slate, args) - .map_err(|e| e.kind())?; + let out_slate = Owner::process_invoice_tx( + self, + (&token.keychain_mask).as_ref(), + &Slate::from(in_slate), + args, + ) + .map_err(|e| e.kind())?; let version = SlateVersion::V2; Ok(VersionedSlate::into_version(out_slate, version)) } @@ -1416,11 +1420,14 @@ where fn finalize_tx( &self, token: Token, - slate: VersionedSlate, + in_slate: VersionedSlate, ) -> Result { - let in_slate = Slate::from(slate); - let out_slate = Owner::finalize_tx(self, (&token.keychain_mask).as_ref(), &in_slate) - .map_err(|e| e.kind())?; + let out_slate = Owner::finalize_tx( + self, + (&token.keychain_mask).as_ref(), + &Slate::from(in_slate), + ) + .map_err(|e| e.kind())?; let version = SlateVersion::V2; Ok(VersionedSlate::into_version(out_slate, version)) } @@ -1428,14 +1435,13 @@ where fn tx_lock_outputs( &self, token: Token, - slate: VersionedSlate, + in_slate: VersionedSlate, participant_id: usize, ) -> Result<(), ErrorKind> { - let in_slate = Slate::from(slate); Owner::tx_lock_outputs( self, (&token.keychain_mask).as_ref(), - &in_slate, + &Slate::from(in_slate), participant_id, ) .map_err(|e| e.kind()) @@ -1455,17 +1461,24 @@ where &self, token: Token, tx: &TxLogEntry, - ) -> Result, ErrorKind> { - Owner::get_stored_tx(self, (&token.keychain_mask).as_ref(), tx).map_err(|e| e.kind()) + ) -> Result, ErrorKind> { + Owner::get_stored_tx(self, (&token.keychain_mask).as_ref(), tx) + .map(|x| x.map(|y| TransactionV2::from(y))) + .map_err(|e| e.kind()) } - fn post_tx(&self, token: Token, tx: &Transaction, fluff: bool) -> Result<(), ErrorKind> { - Owner::post_tx(self, (&token.keychain_mask).as_ref(), tx, fluff).map_err(|e| e.kind()) + fn post_tx(&self, token: Token, tx: TransactionV2, fluff: bool) -> Result<(), ErrorKind> { + Owner::post_tx( + self, + (&token.keychain_mask).as_ref(), + &Transaction::from(tx), + fluff, + ) + .map_err(|e| e.kind()) } fn verify_slate_messages(&self, token: Token, slate: VersionedSlate) -> Result<(), ErrorKind> { - let in_slate = Slate::from(slate); - Owner::verify_slate_messages(self, (&token.keychain_mask).as_ref(), &in_slate) + Owner::verify_slate_messages(self, (&token.keychain_mask).as_ref(), &Slate::from(slate)) .map_err(|e| e.kind()) } diff --git a/impls/src/test_framework/mod.rs b/impls/src/test_framework/mod.rs index 3e8a8b59..08fe970e 100644 --- a/impls/src/test_framework/mod.rs +++ b/impls/src/test_framework/mod.rs @@ -16,7 +16,7 @@ use crate::api; use crate::chain; use crate::chain::Chain; use crate::core; -use crate::core::core::{OutputFeatures, OutputIdentifier, Transaction}; +use crate::core::core::{OutputFeatures, OutputIdentifier, Transaction, TxKernel}; use crate::core::{consensus, global, pow}; use crate::keychain; use crate::libwallet; @@ -82,7 +82,7 @@ pub fn add_block_with_reward(chain: &Chain, txs: Vec<&Transaction>, reward: CbDa &prev, txs.into_iter().cloned().collect(), next_header_info.clone().difficulty, - (reward.output, reward.kernel), + (reward.output, TxKernel::from(&reward.kernel)), ) .unwrap(); b.header.timestamp = prev.timestamp + Duration::seconds(60); diff --git a/libwallet/src/api_impl/types.rs b/libwallet/src/api_impl/types.rs index 07e7f0af..d74aa65d 100644 --- a/libwallet/src/api_impl/types.rs +++ b/libwallet/src/api_impl/types.rs @@ -14,10 +14,11 @@ //! Types specific to the wallet api, mostly argument serialization -use crate::grin_core::core::{Output, TxKernel}; +use crate::grin_core::core::Output; use crate::grin_core::libtx::secp_ser; use crate::grin_keychain::Identifier; use crate::grin_util::secp::pedersen; +use crate::slate_versions::v2::TxKernelV2; use crate::slate_versions::SlateVersion; use crate::types::OutputData; @@ -185,7 +186,7 @@ pub struct CbData { /// Output pub output: Output, /// Kernel - pub kernel: TxKernel, + pub kernel: TxKernelV2, /// Key Id pub key_id: Option, } diff --git a/libwallet/src/internal/updater.rs b/libwallet/src/internal/updater.rs index 3306afc6..b9525151 100644 --- a/libwallet/src/internal/updater.rs +++ b/libwallet/src/internal/updater.rs @@ -29,6 +29,7 @@ use crate::grin_util as util; use crate::grin_util::secp::key::SecretKey; use crate::grin_util::secp::pedersen; use crate::internal::keys; +use crate::slate_versions::v2::TxKernelV2; use crate::types::{ NodeClient, OutputData, OutputStatus, TxLogEntry, TxLogEntryType, WalletBackend, WalletInfo, }; @@ -467,7 +468,7 @@ where Ok(CbData { output: out, - kernel: kern, + kernel: TxKernelV2::from(&kern), key_id: block_fees.key_id, }) } From caea305587ac389b475ea5479c54439ca1820177 Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Mon, 19 Aug 2019 16:58:13 +0100 Subject: [PATCH 6/8] revert CbData changes mining node calls build_coinbase and this needs to be consistent with grin node --- api/src/foreign_rpc.rs | 4 +--- impls/src/test_framework/mod.rs | 2 +- libwallet/src/api_impl/types.rs | 5 ++--- libwallet/src/internal/updater.rs | 3 +-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/api/src/foreign_rpc.rs b/api/src/foreign_rpc.rs index 2028c11b..fef2d2dc 100644 --- a/api/src/foreign_rpc.rs +++ b/api/src/foreign_rpc.rs @@ -94,9 +94,7 @@ pub trait ForeignRpc { "kernel": { "excess": "08dfe86d732f2dd24bac36aa7502685221369514197c26d33fac03041d47e4b490", "excess_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841be02fa098c54c9bf638e0ee1ad5eb896caa11565f632be7b9cd65643ba371044f", - "features": "Coinbase", - "fee": "0", - "lock_height": "0" + "features": "Coinbase" }, "key_id": "0300000000000000000000000400000000", "output": { diff --git a/impls/src/test_framework/mod.rs b/impls/src/test_framework/mod.rs index 08fe970e..1328b06d 100644 --- a/impls/src/test_framework/mod.rs +++ b/impls/src/test_framework/mod.rs @@ -82,7 +82,7 @@ pub fn add_block_with_reward(chain: &Chain, txs: Vec<&Transaction>, reward: CbDa &prev, txs.into_iter().cloned().collect(), next_header_info.clone().difficulty, - (reward.output, TxKernel::from(&reward.kernel)), + (reward.output, reward.kernel), ) .unwrap(); b.header.timestamp = prev.timestamp + Duration::seconds(60); diff --git a/libwallet/src/api_impl/types.rs b/libwallet/src/api_impl/types.rs index d74aa65d..07e7f0af 100644 --- a/libwallet/src/api_impl/types.rs +++ b/libwallet/src/api_impl/types.rs @@ -14,11 +14,10 @@ //! Types specific to the wallet api, mostly argument serialization -use crate::grin_core::core::Output; +use crate::grin_core::core::{Output, TxKernel}; use crate::grin_core::libtx::secp_ser; use crate::grin_keychain::Identifier; use crate::grin_util::secp::pedersen; -use crate::slate_versions::v2::TxKernelV2; use crate::slate_versions::SlateVersion; use crate::types::OutputData; @@ -186,7 +185,7 @@ pub struct CbData { /// Output pub output: Output, /// Kernel - pub kernel: TxKernelV2, + pub kernel: TxKernel, /// Key Id pub key_id: Option, } diff --git a/libwallet/src/internal/updater.rs b/libwallet/src/internal/updater.rs index b9525151..3306afc6 100644 --- a/libwallet/src/internal/updater.rs +++ b/libwallet/src/internal/updater.rs @@ -29,7 +29,6 @@ use crate::grin_util as util; use crate::grin_util::secp::key::SecretKey; use crate::grin_util::secp::pedersen; use crate::internal::keys; -use crate::slate_versions::v2::TxKernelV2; use crate::types::{ NodeClient, OutputData, OutputStatus, TxLogEntry, TxLogEntryType, WalletBackend, WalletInfo, }; @@ -468,7 +467,7 @@ where Ok(CbData { output: out, - kernel: TxKernelV2::from(&kern), + kernel: kern, key_id: block_fees.key_id, }) } From 1f76d702092b0624754069a1e80330ec41f00de0 Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Mon, 19 Aug 2019 18:02:08 +0100 Subject: [PATCH 7/8] cleanup imports --- impls/src/test_framework/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impls/src/test_framework/mod.rs b/impls/src/test_framework/mod.rs index 1328b06d..3e8a8b59 100644 --- a/impls/src/test_framework/mod.rs +++ b/impls/src/test_framework/mod.rs @@ -16,7 +16,7 @@ use crate::api; use crate::chain; use crate::chain::Chain; use crate::core; -use crate::core::core::{OutputFeatures, OutputIdentifier, Transaction, TxKernel}; +use crate::core::core::{OutputFeatures, OutputIdentifier, Transaction}; use crate::core::{consensus, global, pow}; use crate::keychain; use crate::libwallet; From fbc8173629cc240132539ee1e9dfe8565108bb0a Mon Sep 17 00:00:00 2001 From: antiochp <30642645+antiochp@users.noreply.github.com> Date: Tue, 20 Aug 2019 00:51:35 +0100 Subject: [PATCH 8/8] fixup controller tests --- controller/tests/accounts.rs | 10 +++++---- controller/tests/transaction.rs | 2 +- impls/src/test_framework/testclient.rs | 31 ++++++++++++++++---------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/controller/tests/accounts.rs b/controller/tests/accounts.rs index 8350a55b..aee816f0 100644 --- a/controller/tests/accounts.rs +++ b/controller/tests/accounts.rs @@ -137,13 +137,16 @@ fn accounts_test_impl(test_dir: &'static str) -> Result<(), libwallet::Error> { assert_eq!(txs.len(), 5); Ok(()) })?; + // now check second account { - let mut w_lock = wallet1.lock(); - let lc = w_lock.lc_provider()?; - let w = lc.wallet_inst()?; + // let mut w_lock = wallet1.lock(); + // let lc = w_lock.lc_provider()?; + // let w = lc.wallet_inst()?; + wallet_inst!(wallet1, w); w.set_parent_key_id_by_name("account1")?; } + wallet::controller::owner_single_use(wallet1.clone(), mask1, |api, m| { // check last confirmed height on this account is different from above (should be 0) let (_, wallet1_info) = api.retrieve_summary_info(m, false, 1)?; @@ -183,7 +186,6 @@ fn accounts_test_impl(test_dir: &'static str) -> Result<(), libwallet::Error> { wallet_inst!(wallet1, w); w.set_parent_key_id_by_name("account1")?; } - wallet::controller::owner_single_use(wallet1.clone(), mask1, |api, m| { let args = InitTxArgs { src_acct_name: None, diff --git a/controller/tests/transaction.rs b/controller/tests/transaction.rs index 6c79e1f5..361f12f6 100644 --- a/controller/tests/transaction.rs +++ b/controller/tests/transaction.rs @@ -121,7 +121,7 @@ fn basic_transaction_api(test_dir: &'static str) -> Result<(), libwallet::Error> assert_eq!(slate.tx.kernels().len(), 1); assert_eq!( slate.tx.kernels().first().map(|k| k.features).unwrap(), - transaction::KernelFeatures::Plain { fee: 0 } + transaction::KernelFeatures::Plain { fee: 2000000 } ); Ok(()) diff --git a/impls/src/test_framework/testclient.rs b/impls/src/test_framework/testclient.rs index 0c9b67f7..1e75889b 100644 --- a/impls/src/test_framework/testclient.rs +++ b/impls/src/test_framework/testclient.rs @@ -26,6 +26,7 @@ use crate::core::{pow, ser}; use crate::keychain::Keychain; use crate::libwallet; use crate::libwallet::api_impl::foreign; +use crate::libwallet::slate_versions::v2::SlateV2; use crate::libwallet::{ NodeClient, NodeVersionInfo, Slate, TxWrapper, WalletInst, WalletLCProvider, }; @@ -214,23 +215,30 @@ where Some(w) => w, }; - let mut slate = serde_json::from_str(&m.body).context( + let slate: SlateV2 = serde_json::from_str(&m.body).context( libwallet::ErrorKind::ClientCallback("Error parsing TxWrapper".to_owned()), )?; -; - { + + let slate: Slate = { let mut w_lock = wallet.1.lock(); let w = w_lock.lc_provider()?.wallet_inst()?; let mask = wallet.2.clone(); // receive tx - slate = foreign::receive_tx(&mut **w, (&mask).as_ref(), &slate, None, None, false)?; - } + foreign::receive_tx( + &mut **w, + (&mask).as_ref(), + &Slate::from(slate), + None, + None, + false, + )? + }; Ok(WalletProxyMessage { sender_id: m.dest, dest: m.sender_id, method: m.method, - body: serde_json::to_string(&slate).unwrap(), + body: serde_json::to_string(&SlateV2::from(slate)).unwrap(), }) } @@ -332,7 +340,7 @@ impl LocalWalletClient { sender_id: self.id.clone(), dest: dest.to_owned(), method: "send_tx_slate".to_owned(), - body: serde_json::to_string(slate).unwrap(), + body: serde_json::to_string(&SlateV2::from(slate)).unwrap(), }; { let p = self.proxy_tx.lock(); @@ -343,11 +351,10 @@ impl LocalWalletClient { let r = self.rx.lock(); let m = r.recv().unwrap(); trace!("Received send_tx_slate response: {:?}", m.clone()); - Ok( - serde_json::from_str(&m.body).context(libwallet::ErrorKind::ClientCallback( - "Parsing send_tx_slate response".to_owned(), - ))?, - ) + let slate: SlateV2 = serde_json::from_str(&m.body).context( + libwallet::ErrorKind::ClientCallback("Parsing send_tx_slate response".to_owned()), + )?; + Ok(Slate::from(slate)) } }