2019-03-14 15:06:03 +03:00
// Copyright 2019 The Grin Developers
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2019-03-14 18:05:13 +03:00
//! JSON-RPC Stub generation for the Owner API
2019-03-14 15:06:03 +03:00
use uuid ::Uuid ;
2020-03-04 16:38:40 +03:00
use crate ::config ::{ TorConfig , WalletConfig } ;
2019-03-14 15:06:03 +03:00
use crate ::core ::core ::Transaction ;
2020-03-04 16:38:40 +03:00
use crate ::core ::global ;
2019-03-14 15:06:03 +03:00
use crate ::keychain ::{ Identifier , Keychain } ;
2019-04-24 11:27:14 +03:00
use crate ::libwallet ::{
2019-05-01 22:12:23 +03:00
AcctPathMapping , ErrorKind , InitTxArgs , IssueInvoiceTxArgs , NodeClient , NodeHeightResult ,
2020-03-04 16:38:40 +03:00
OutputCommitMapping , PaymentProof , Slate , SlateVersion , StatusMessage , TxLogEntry ,
VersionedSlate , WalletInfo , WalletLCProvider ,
2019-03-14 15:06:03 +03:00
} ;
2020-03-04 16:38:40 +03:00
use crate ::util ::logger ::LoggingConfig ;
use crate ::util ::secp ::key ::{ PublicKey , SecretKey } ;
use crate ::util ::{ static_secp_instance , Mutex , ZeroingString } ;
use crate ::{ ECDHPubkey , Owner , PubAddress , Token } ;
2019-08-19 15:05:21 +03:00
use easy_jsonrpc_mw ;
2020-01-24 16:02:09 +03:00
use grin_wallet_util ::OnionV3Address ;
2020-03-04 16:38:40 +03:00
use rand ::thread_rng ;
2020-01-24 16:02:09 +03:00
use std ::convert ::TryFrom ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
use std ::sync ::Arc ;
2020-03-04 16:38:40 +03:00
use std ::time ::Duration ;
2019-03-14 15:06:03 +03:00
2019-04-01 13:16:49 +03:00
/// Public definition used to generate Owner jsonrpc api.
2020-03-04 16:38:40 +03:00
/// Secure version containing wallet lifecycle functions. All calls to this API must be encrypted.
/// See [`init_secure_api`](#tymethod.init_secure_api) for details of secret derivation
/// and encryption.
2019-08-19 15:05:21 +03:00
#[ easy_jsonrpc_mw::rpc ]
2020-03-04 16:38:40 +03:00
pub trait OwnerRpc {
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::accounts ] ( struct . Owner . html #method . accounts ) .
# Json rpc example
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " accounts " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 "
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : [
{
" label " : " default " ,
" path " : " 0200000000000000000000000000000000 "
}
]
} ,
" id " : 1
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn accounts ( & self , token : Token ) -> Result < Vec < AcctPathMapping > , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::create_account_path ] ( struct . Owner . html #method . create_account_path ) .
# Json rpc example
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " create_account_path " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" label " : " account1 "
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " 0200000001000000000000000000000000 "
} ,
" id " : 1
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn create_account_path ( & self , token : Token , label : & String ) -> Result < Identifier , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::set_active_account ] ( struct . Owner . html #method . set_active_account ) .
# Json rpc example
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " set_active_account " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" label " : " default "
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
} ,
" id " : 1
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn set_active_account ( & self , token : Token , label : & String ) -> Result < ( ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::retrieve_outputs ] ( struct . Owner . html #method . retrieve_outputs ) .
2019-03-22 15:03:25 +03:00
# Json rpc example
2019-03-14 15:06:03 +03:00
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " retrieve_outputs " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" include_spent " : false ,
" refresh_from_node " : true ,
" tx_id " : null
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : [
true ,
[
{
" commit " : " 08e1da9e6dc4d6e808a718b2f110a991dd775d65ce5ae408a4e1f002a4961aa9e7 " ,
" output " : {
" commit " : " 08e1da9e6dc4d6e808a718b2f110a991dd775d65ce5ae408a4e1f002a4961aa9e7 " ,
" height " : " 1 " ,
" is_coinbase " : true ,
" key_id " : " 0300000000000000000000000000000000 " ,
" lock_height " : " 4 " ,
" mmr_index " : null ,
" n_child " : 0 ,
" root_key_id " : " 0200000000000000000000000000000000 " ,
" status " : " Unspent " ,
" tx_log_entry " : 0 ,
" value " : " 60000000000 "
}
} ,
{
" commit " : " 087df32304c5d4ae8b2af0bc31e700019d722910ef87dd4eec3197b80b207e3045 " ,
" output " : {
" commit " : " 087df32304c5d4ae8b2af0bc31e700019d722910ef87dd4eec3197b80b207e3045 " ,
" height " : " 2 " ,
" is_coinbase " : true ,
" key_id " : " 0300000000000000000000000100000000 " ,
" lock_height " : " 5 " ,
" mmr_index " : null ,
" n_child " : 1 ,
" root_key_id " : " 0200000000000000000000000000000000 " ,
" status " : " Unspent " ,
" tx_log_entry " : 1 ,
" value " : " 60000000000 "
}
}
]
]
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 2 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
2019-03-22 15:03:25 +03:00
* /
2019-03-14 15:06:03 +03:00
fn retrieve_outputs (
& self ,
2020-03-04 16:38:40 +03:00
token : Token ,
2019-03-14 15:06:03 +03:00
include_spent : bool ,
refresh_from_node : bool ,
tx_id : Option < u32 > ,
2019-03-22 15:03:25 +03:00
) -> Result < ( bool , Vec < OutputCommitMapping > ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::retrieve_txs ] ( struct . Owner . html #method . retrieve_txs ) .
2019-03-22 15:03:25 +03:00
# Json rpc example
2019-03-14 15:06:03 +03:00
` ` `
2019-03-22 15:03:25 +03:00
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " retrieve_txs " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" refresh_from_node " : true ,
" tx_id " : null ,
" tx_slate_id " : null
} ,
2019-03-22 15:03:25 +03:00
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" result " : {
" Ok " : [
true ,
[
{
" amount_credited " : " 60000000000 " ,
" amount_debited " : " 0 " ,
" confirmation_ts " : " 2019-01-15T16:01:26Z " ,
" confirmed " : true ,
" creation_ts " : " 2019-01-15T16:01:26Z " ,
" fee " : null ,
" id " : 0 ,
2019-10-03 17:15:25 +03:00
" kernel_excess " : " 0838e19c490038b10f051c9c190a9b1f96d59bbd242f5d3143f50630deb74342ed " ,
" kernel_lookup_min_height " : 1 ,
2019-03-22 15:03:25 +03:00
" num_inputs " : 0 ,
" num_outputs " : 1 ,
" parent_key_id " : " 0200000000000000000000000000000000 " ,
" stored_tx " : null ,
2019-12-02 16:54:57 +03:00
" ttl_cutoff_height " : null ,
2019-03-22 15:03:25 +03:00
" tx_slate_id " : null ,
2019-11-28 17:34:27 +03:00
" payment_proof " : null ,
2020-03-10 18:49:17 +03:00
" reverted_after " : null ,
2019-03-22 15:03:25 +03:00
" tx_type " : " ConfirmedCoinbase "
} ,
{
" amount_credited " : " 60000000000 " ,
" amount_debited " : " 0 " ,
" confirmation_ts " : " 2019-01-15T16:01:26Z " ,
" confirmed " : true ,
" creation_ts " : " 2019-01-15T16:01:26Z " ,
" fee " : null ,
" id " : 1 ,
2019-10-03 17:15:25 +03:00
" kernel_excess " : " 08cd9d890c0b6a004f700aa5939a1ce0488fe2a11fa33cf096b50732ceab0be1df " ,
" kernel_lookup_min_height " : 2 ,
2019-03-22 15:03:25 +03:00
" num_inputs " : 0 ,
" num_outputs " : 1 ,
" parent_key_id " : " 0200000000000000000000000000000000 " ,
" stored_tx " : null ,
2019-12-02 16:54:57 +03:00
" ttl_cutoff_height " : null ,
2019-11-28 17:34:27 +03:00
" payment_proof " : null ,
2020-03-10 18:49:17 +03:00
" reverted_after " : null ,
2020-03-04 16:38:40 +03:00
" tx_slate_id " : null ,
2019-03-22 15:03:25 +03:00
" tx_type " : " ConfirmedCoinbase "
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
]
]
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 2 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
2019-03-22 15:03:25 +03:00
* /
2019-03-14 15:06:03 +03:00
fn retrieve_txs (
& self ,
2020-03-04 16:38:40 +03:00
token : Token ,
2019-03-14 15:06:03 +03:00
refresh_from_node : bool ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < ( bool , Vec < TxLogEntry > ) , ErrorKind > ;
/**
Networked version of [ Owner ::retrieve_summary_info ] ( struct . Owner . html #method . retrieve_summary_info ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " retrieve_summary_info " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" refresh_from_node " : true ,
" minimum_confirmations " : 1
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : [
true ,
{
" amount_awaiting_confirmation " : " 0 " ,
" amount_awaiting_finalization " : " 0 " ,
" amount_currently_spendable " : " 60000000000 " ,
" amount_immature " : " 180000000000 " ,
" amount_locked " : " 0 " ,
2020-03-10 18:49:17 +03:00
" amount_reverted " : " 0 " ,
2019-03-22 15:03:25 +03:00
" last_confirmed_height " : " 4 " ,
" minimum_confirmations " : " 1 " ,
" total " : " 240000000000 "
}
]
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2019-03-22 15:03:25 +03:00
2019-03-14 15:06:03 +03:00
fn retrieve_summary_info (
& self ,
2020-03-04 16:38:40 +03:00
token : Token ,
2019-03-14 15:06:03 +03:00
refresh_from_node : bool ,
minimum_confirmations : u64 ,
) -> Result < ( bool , WalletInfo ) , ErrorKind > ;
2019-03-14 18:05:13 +03:00
/**
2019-05-01 22:12:23 +03:00
Networked version of [ Owner ::init_send_tx ] ( struct . Owner . html #method . init_send_tx ) .
2019-03-14 18:05:13 +03:00
` ` `
2019-03-22 15:03:25 +03:00
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
2019-05-01 22:12:23 +03:00
" method " : " init_send_tx " ,
2019-03-29 19:00:02 +03:00
" params " : {
2020-03-04 16:38:40 +03:00
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
2019-03-29 19:00:02 +03:00
" args " : {
" src_acct_name " : null ,
" amount " : " 6000000000 " ,
" minimum_confirmations " : 2 ,
" max_outputs " : 500 ,
" num_change_outputs " : 1 ,
" selection_strategy_is_use_all " : true ,
" target_slate_version " : null ,
2020-03-04 16:38:40 +03:00
" payment_proof_recipient_address " : " pa7wkkdgs5bkteha7lykl7ff2wztgdrxxo442xdcq2lnaphe5aidd4id " ,
2019-12-02 16:54:57 +03:00
" ttl_blocks " : null ,
2019-03-29 19:00:02 +03:00
" send_args " : null
}
} ,
2019-03-22 15:03:25 +03:00
" id " : 1
}
# " #
# ,
# r #"
{
2020-05-19 13:19:03 +03:00
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : {
" amt " : " 6000000000 " ,
" fee " : " 8000000 " ,
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
" off " : " 0gKWSQAAAADTApZJAAAAANQClkkAAAAA1QKWSQAAAAA= " ,
" proof " : {
" raddr " : " eD9lKGaXQqmQ4Prwpfyl1bMzDje7uc1cYoaW0Dzk6BA= " ,
" saddr " : " Ms3WOSiFT4smKLHc5GJt3N811Wy3z999ZMylgit41NM= "
} ,
" sigs " : [
{
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" xs " : " Ajh4zoRXJ/Ok7HbKPz20s4otBdY2uMNjIQi4V/7WPJbe "
}
] ,
" sta " : " S1 " ,
" ver " : " 4:2 "
2019-03-22 15:03:25 +03:00
}
2020-05-19 13:19:03 +03:00
}
2019-03-22 15:03:25 +03:00
}
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-03-14 18:05:13 +03:00
` ` `
2019-03-22 15:03:25 +03:00
* /
2019-03-14 18:05:13 +03:00
2020-03-04 16:38:40 +03:00
fn init_send_tx ( & self , token : Token , args : InitTxArgs ) -> Result < VersionedSlate , ErrorKind > ;
2019-05-01 22:12:23 +03:00
/**
Networked version of [ Owner ::issue_invoice_tx ] ( struct . Owner . html #method . issue_invoice_tx ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " issue_invoice_tx " ,
" params " : {
2020-03-04 16:38:40 +03:00
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
2019-05-01 22:12:23 +03:00
" args " : {
" amount " : " 6000000000 " ,
" dest_acct_name " : null ,
" target_slate_version " : null
}
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : {
2020-05-19 13:19:03 +03:00
" amt " : " 6000000000 " ,
2019-05-01 22:12:23 +03:00
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
2020-05-19 13:19:03 +03:00
" off " : " 0gKWSQAAAADTApZJAAAAANQClkkAAAAA1QKWSQAAAAA= " ,
" sigs " : [
2019-05-01 22:12:23 +03:00
{
2020-05-19 13:19:03 +03:00
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" xs " : " Ao6VkhzA1b5ZIjYiZdNSyb2r5RqeFQKj8NShA4fxiT9A "
2019-05-01 22:12:23 +03:00
}
] ,
2020-05-19 13:19:03 +03:00
" sta " : " I1 " ,
" ver " : " 4:2 "
2019-05-01 22:12:23 +03:00
}
}
}
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-05-01 22:12:23 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn issue_invoice_tx (
& self ,
token : Token ,
args : IssueInvoiceTxArgs ,
) -> Result < VersionedSlate , ErrorKind > ;
2019-05-01 22:12:23 +03:00
/**
Networked version of [ Owner ::process_invoice_tx ] ( struct . Owner . html #method . process_invoice_tx ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " process_invoice_tx " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" slate " : {
2020-05-19 13:19:03 +03:00
" amt " : " 6000000000 " ,
2019-05-01 22:12:23 +03:00
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
2020-05-19 13:19:03 +03:00
" off " : " QNjHljmHml/Ot7ogVQDjr3a0M8mBzgN/SLj6NuVh8IM= " ,
" sigs " : [
2019-05-01 22:12:23 +03:00
{
2020-05-19 13:19:03 +03:00
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" xs " : " Ao6VkhzA1b5ZIjYiZdNSyb2r5RqeFQKj8NShA4fxiT9A "
2019-05-01 22:12:23 +03:00
}
] ,
2020-05-19 13:19:03 +03:00
" sta " : " I1 " ,
" ver " : " 4:2 "
2019-05-01 22:12:23 +03:00
} ,
2020-03-04 16:38:40 +03:00
" args " : {
2019-05-01 22:12:23 +03:00
" src_acct_name " : null ,
" amount " : " 0 " ,
" minimum_confirmations " : 2 ,
" max_outputs " : 500 ,
" num_change_outputs " : 1 ,
" selection_strategy_is_use_all " : true ,
" target_slate_version " : null ,
2019-11-28 17:34:27 +03:00
" payment_proof_recipient_address " : null ,
2019-12-02 16:54:57 +03:00
" ttl_blocks " : null ,
2019-05-01 22:12:23 +03:00
" send_args " : null
}
2020-03-04 16:38:40 +03:00
} ,
2019-05-01 22:12:23 +03:00
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : {
2020-05-19 13:19:03 +03:00
" coms " : [
2019-05-01 22:12:23 +03:00
{
2020-05-19 13:19:03 +03:00
" c " : " COHanm3E1ugIpxiy8RCpkd13XWXOWuQIpOHwAqSWGqnn " ,
" f " : 1
2019-05-01 22:12:23 +03:00
} ,
{
2020-05-19 13:19:03 +03:00
" c " : " CUvlfJF4f8IDPV2X+uCZ8abds36kg3DxoTjwlSTHZ/3T " ,
" p " : " ExljCybQI2OGHr2xVRQIbciwdytLtj75uChwTgrDSO+tpnR916KYSBONYwx7QD5XPJzeBL5dJfLTRNtLAQ1riQ3WxUzAkRwMrceooiWy7D8tysiBiaF6piJX6Wnu+d6RcgCdjoZOQT8ZU5mLKFMeWA0+pJWlEtMg6NT/UOdJWmwoPG5UTRY2TTQnKAWJNSbx47b9F270rcVnGxZc8o78+40lwN/NAYosXmW+65IB85gxlOWlIcCETQXHAGVN+u0bmzna4IzJr6ucuJEla8AjetLOeNqLRFhlgPUt00bcr95eRxkX8W5MS1HpZuGUbxPjF3FQPIW7DxtB0cf8yVPnCvVUAGOKNef1YQ+fTFuIGjUGCmk96vRuGDnFSo99LGJrBazTRQtyro8uD4chvLvYViFB0/74UcasPIBp+mOJOJvE/LpeT7SXCaO2Olm6lqgoJ9+9bxbehJ75XzEUWT0gev9uAwFSkp+iILDDtUykGc/L/7egEG3TFU6FiHjH2POMrcw3bFAr3FApK0lEhJNtCEb8P6wQkQlivKTdzKXIC0WP198V6abC85tRZCWiGQqXydDi4vEF7imQXzbjpkihNevzh9C7Kmth2VshUxnW3J7otLJ5iBD7bgHABwQbKIwrOegFya+GyI3Uo4C2o0a0oOZ7umqqxazHAIisMpdIa5DP43HZRkVSdHovdoD0LVYp+wm+2DU4LYQiNHEsBXTFtPJWwibndgJCmYPk3vcVQc/4DM9M07dhaFyRRjyOHHv4KGmcaIUJKCuF51JCTfPaZws8+s3qL2bPuAT+zfi36wVuiRf9rnjYPAEZZOPVoHSIc/gX0Kv0sEwgRScz6sNcMYuW4QClrOD1QIW9JPlouPxbJ24NexNPAdtQs9J3HNzxQj1E "
2019-05-01 22:12:23 +03:00
}
] ,
2020-05-19 13:19:03 +03:00
" fee " : " 8000000 " ,
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
" off " : " CkRYNMTRYXJonCcMMoSQZz8qlEXOyLnKGeS9dhyGDbk= " ,
" sigs " : [
{
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBvxgE9v6OVfVVa72Af++81ysw2Qz3CPjFZEesxjIoJ05g== " ,
" xs " : " Ajh4zoRXJ/Ok7HbKPz20s4otBdY2uMNjIQi4V/7WPJbe "
}
] ,
" sta " : " I2 " ,
" ver " : " 4:2 "
2019-05-01 22:12:23 +03:00
}
}
}
# " #
2020-03-04 16:38:40 +03:00
# , 4 , false , false , false , false ) ;
2019-05-01 22:12:23 +03:00
` ` `
* /
2019-08-06 13:34:59 +03:00
fn process_invoice_tx (
& self ,
2020-03-04 16:38:40 +03:00
token : Token ,
2019-08-06 13:34:59 +03:00
slate : VersionedSlate ,
args : InitTxArgs ,
) -> Result < VersionedSlate , ErrorKind > ;
2019-03-14 15:06:03 +03:00
2019-03-14 18:05:13 +03:00
/**
Networked version of [ Owner ::tx_lock_outputs ] ( struct . Owner . html #method . tx_lock_outputs ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 18:05:13 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " tx_lock_outputs " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" slate " : {
2020-05-19 13:19:03 +03:00
" ver " : " 4:2 " ,
2019-03-22 15:03:25 +03:00
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
2020-05-19 13:19:03 +03:00
" sta " : " S1 " ,
" amt " : " 60000000000 " ,
" fee " : " 7000000 " ,
" sigs " : [
{
" xs " : " AzrCFY+gB38IfeYMGdjkMXU7qltjtuFHfwWipucZDUWS " ,
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP "
}
]
}
2020-03-04 16:38:40 +03:00
}
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 18:05:13 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 18:05:13 +03:00
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : null
}
2019-03-14 18:05:13 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , true , false , false , false ) ;
2019-03-22 15:03:25 +03:00
2019-03-14 18:05:13 +03:00
` ` `
* /
2020-05-19 13:19:03 +03:00
fn tx_lock_outputs ( & self , token : Token , slate : VersionedSlate ) -> Result < ( ) , ErrorKind > ;
2019-03-14 18:05:13 +03:00
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::finalize_tx ] ( struct . Owner . html #method . finalize_tx ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " finalize_tx " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
2020-05-19 13:19:03 +03:00
" slate " :
{
" ver " : " 4:2 " ,
2020-03-04 16:38:40 +03:00
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
2020-05-19 13:19:03 +03:00
" sta " : " S2 " ,
" off " : " pAUskgAAAAGmBSySAAAAAu1WT6tQt1/F6jLOBS/Jvr8= " ,
" sigs " : [
2020-03-04 16:38:40 +03:00
{
2020-05-19 13:19:03 +03:00
" xs " : " Azu+KkGeounWgQqNZlUucJ0Xg8pQdZpE269j/HnAFkxM " ,
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBs1/f5VJx8q5z119Yxw0e+2mzOEx7xQfVfpnlbed+IIdA== "
}
] ,
" coms " : [
{
" c " : " CZtIz7H4CiNH3ImBhEnmjnajxoF6UyqOnvK0pcz0NjhQ " ,
" p " : " KXAc6uJiysd7ebhoyIOikuYebegZK4aO3NEwCwlz2ROWsVas5r1nNAKjA94Q3dil5rfxe6ZVeldKZyvQTMJzqwTtjiyoC6xIM0XA7IQ/UhgUzhMB7JrcOJVqErTZSKzOcSlaT1K83rihyfLWstpdcxJipenAJ275BN+e+NSAAUIM1Z91ovGuXHocfGufFA52E+Uu+eJJ8p+TQLfvuAaZ5GAWQyRhb5j9TN49tSSXyRnpUiL//qy35l3sp+NoqAznE8Gd59pTaXJiKO4zb1vUlFOMEsy//rG5v9X8iQbRxkJFtRbxA/qW2cVpdYN2UsHg+lgD18zxFH2Pkn422nF/eteUcdvhkvX1D4enn8P+Aw26VptjS5LSzzB5k8zlRWM68mOJfNfm6/Tcr7F20HNYvcONA+RaSd+pyMZRfNaNFn/79sO03g4t0hkJy61MRnuE5XAL5HOjmsWcZp18FVxLyrm4Am7qNDHHec0nfkki0rl0Lh9meMvoaew7W370Ey3bbN0Gzyfb6yi+crlJ+ol2EOSOOg14n9Lup1q8l7PcfgDlyLPSTkDG8kESrbcjUriaK+8FmTRTOOnnYgKjxG76Y3CVKyrKQarbrg6jJTGsr82rbdBm12nr9Qz088ClnS1fp5YAoge5QXxiP3atBejMz81AOPlEi8QPEnynwNNy5GB04zT+SfWpVuwAVvTaYB5q+A6xpsSVEFSGnmZbKW2MFPNEyi3F/dXfSjZSU2NloWFa2bQiFlx3v4/mWoNcjgxB4HABTrZu+MUlIE6ZCzo9ZjweQiIbSWiVw3ovDBvwXpEjVAnD/j2JqaedbHhgmrGKRjMRkR9x+je7c7FfzTgUPRQE/SzoEATcf/ic8RFdzAw1zhwb+ZQVhvuVl3DyYYzLcRin "
2020-03-04 16:38:40 +03:00
}
]
}
2019-03-22 15:03:25 +03:00
}
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" result " : {
2020-05-19 13:19:03 +03:00
" Ok " : {
" coms " : [
{
" c " : " CH3zIwTF1K6LKvC8MecAAZ1yKRDvh91O7DGXuAsgfjBF " ,
" f " : 1
} ,
{
" c " : " COHanm3E1ugIpxiy8RCpkd13XWXOWuQIpOHwAqSWGqnn " ,
" f " : 1
} ,
{
" c " : " CZtIz7H4CiNH3ImBhEnmjnajxoF6UyqOnvK0pcz0NjhQ " ,
" p " : " KXAc6uJiysd7ebhoyIOikuYebegZK4aO3NEwCwlz2ROWsVas5r1nNAKjA94Q3dil5rfxe6ZVeldKZyvQTMJzqwTtjiyoC6xIM0XA7IQ/UhgUzhMB7JrcOJVqErTZSKzOcSlaT1K83rihyfLWstpdcxJipenAJ275BN+e+NSAAUIM1Z91ovGuXHocfGufFA52E+Uu+eJJ8p+TQLfvuAaZ5GAWQyRhb5j9TN49tSSXyRnpUiL//qy35l3sp+NoqAznE8Gd59pTaXJiKO4zb1vUlFOMEsy//rG5v9X8iQbRxkJFtRbxA/qW2cVpdYN2UsHg+lgD18zxFH2Pkn422nF/eteUcdvhkvX1D4enn8P+Aw26VptjS5LSzzB5k8zlRWM68mOJfNfm6/Tcr7F20HNYvcONA+RaSd+pyMZRfNaNFn/79sO03g4t0hkJy61MRnuE5XAL5HOjmsWcZp18FVxLyrm4Am7qNDHHec0nfkki0rl0Lh9meMvoaew7W370Ey3bbN0Gzyfb6yi+crlJ+ol2EOSOOg14n9Lup1q8l7PcfgDlyLPSTkDG8kESrbcjUriaK+8FmTRTOOnnYgKjxG76Y3CVKyrKQarbrg6jJTGsr82rbdBm12nr9Qz088ClnS1fp5YAoge5QXxiP3atBejMz81AOPlEi8QPEnynwNNy5GB04zT+SfWpVuwAVvTaYB5q+A6xpsSVEFSGnmZbKW2MFPNEyi3F/dXfSjZSU2NloWFa2bQiFlx3v4/mWoNcjgxB4HABTrZu+MUlIE6ZCzo9ZjweQiIbSWiVw3ovDBvwXpEjVAnD/j2JqaedbHhgmrGKRjMRkR9x+je7c7FfzTgUPRQE/SzoEATcf/ic8RFdzAw1zhwb+ZQVhvuVl3DyYYzLcRin "
} ,
{
" c " : " CBInbMeI5ocGEiltkmy6nw57mBBnBxC1pubxugBtOVd0 " ,
" p " : " KEufkZlBHGu/cifq4VzJ+n7TBTSvPs/4Ww0BbaMpyuHx7fefAUJkNMuQr8wvCh+yluXFGpG15XofAjD9pPjFlQ55hvo3m5nWS2A5qGzH414EC6GSt4EEOVmFEmjKmHSpGIBeqVjIT3/ujTq0Ji8DL1o/hA683Sc7Kb6BARTm6GqVnY5MCAVy4+8knt1q1oUD7DvESGVIUg6id1pBrqZ6rJmUX86eendp1x+JOtfw0BCGkva2hSMSyub5hXBjBVvaWdzlIZJ8cAQLgCakG2UXyuChyUfKJEmEpcCt98ZIOwk5NGxI9hysN9UB9GocWHi2fO4NByP07q3J9dce1enzO0KUtY0+vu/qoT8gNXWZvlSc4Y5uLrHVDhI1zMQOyRhMaKYjdBpyOM5pqjodJRVrO36zj91vvlRzl5/u4zF98nnGDUiiiYJqpMdtvOJNUmiQ1Obi+D6A9nShJI/B3AN9mCAJASrhEz9eFYrmza2xjI1T5KiuVZXHWHgsZ6oMIPFG1SCFz0WjV5TOxFcCgw+JUqaXRHGPvm/g09pm40jdNHOgrO1wgPv1SUw+fhQZFvOxNbMyd/mY/Nms+8qHCYFIZumDil3NpMKUIs8VcpPm/CzMLSVCNReEO9jiHGHO1yMSwLSIFMMSAhsNMVmNI4mwsym6oRaZIqTDQXPdX1QFRb5QZqDykfGocOGq/5TBnwqFUlSIKheYS67aCOjq1T0VY+nuS8NnQnic7086sVgFTX3f4qKze1qKML6E/335p9dYqbdnUaNiIFdyGj7FuHNYLQyRzR/rvBU2YnOYVOoVyZAwI8GTxrV2i1VIQQj4l83EfROpCIsyVY5X8S9YB2aGScmaF7UZBRJzQOi0nEJ3Xxs8qwct+tM9M8weS6WWTXKO0KkF "
}
] ,
2019-03-22 15:03:25 +03:00
" fee " : " 7000000 " ,
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
2020-05-19 13:19:03 +03:00
" off " : " dQ2/T9Q7f0z9aNJpilIvP/bmoArZiVsz8exGSTuDe0k= " ,
" sigs " : [
2019-03-22 15:03:25 +03:00
{
2020-05-19 13:19:03 +03:00
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBs1/f5VJx8q5z119Yxw0e+2mzOEx7xQfVfpnlbed+IIdA== " ,
" xs " : " Azu+KkGeounWgQqNZlUucJ0Xg8pQdZpE269j/HnAFkxM "
2019-03-22 15:03:25 +03:00
} ,
{
2020-05-19 13:19:03 +03:00
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBva2TTaoX235HfE7tkK/tQNEReJbfjE9YYbYwmpSYeAdA== " ,
" xs " : " AwFS0tcuLbp8YIatSaIZ2f8N/g/Zk9yuoi4FjCEAM86T "
2019-03-22 15:03:25 +03:00
}
] ,
2020-05-19 13:19:03 +03:00
" sta " : " S3 " ,
" ver " : " 4:2 "
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , true , true , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn finalize_tx ( & self , token : Token , slate : VersionedSlate )
-> Result < VersionedSlate , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
2019-03-22 15:03:25 +03:00
Networked version of [ Owner ::post_tx ] ( struct . Owner . html #method . post_tx ) .
2019-03-14 15:06:03 +03:00
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
" method " : " post_tx " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
2020-05-19 13:19:03 +03:00
" slate " : {
" ver " : " 4:2 " ,
" id " : " 0436430c-2b02-624c-2032-570501212b00 " ,
" sta " : " S3 " ,
" fee " : " 7000000 " ,
" off " : " dQ2/T9Q7f0z9aNJpilIvP/bmoArZiVsz8exGSTuDe0k= " ,
" sigs " : [
{
" xs " : " Azu+KkGeounWgQqNZlUucJ0Xg8pQdZpE269j/HnAFkxM " ,
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBs1/f5VJx8q5z119Yxw0e+2mzOEx7xQfVfpnlbed+IIdA== "
} ,
{
" xs " : " AwFS0tcuLbp8YIatSaIZ2f8N/g/Zk9yuoi4FjCEAM86T " ,
" nonce " : " AxuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QeP " ,
" part " : " jwfd1en1F5z/GUhgNBge12UFuqrVPl2ZQGQSe1bFhBva2TTaoX235HfE7tkK/tQNEReJbfjE9YYbYwmpSYeAdA== "
}
] ,
" coms " : [
2019-03-22 15:03:25 +03:00
{
2020-05-19 13:19:03 +03:00
" f " : 1 ,
" c " : " CH3zIwTF1K6LKvC8MecAAZ1yKRDvh91O7DGXuAsgfjBF "
2019-03-22 15:03:25 +03:00
} ,
{
2020-05-19 13:19:03 +03:00
" f " : 1 ,
" c " : " COHanm3E1ugIpxiy8RCpkd13XWXOWuQIpOHwAqSWGqnn "
2019-03-22 15:03:25 +03:00
} ,
{
2020-05-19 13:19:03 +03:00
" c " : " CZtIz7H4CiNH3ImBhEnmjnajxoF6UyqOnvK0pcz0NjhQ " ,
" p " : " KXAc6uJiysd7ebhoyIOikuYebegZK4aO3NEwCwlz2ROWsVas5r1nNAKjA94Q3dil5rfxe6ZVeldKZyvQTMJzqwTtjiyoC6xIM0XA7IQ/UhgUzhMB7JrcOJVqErTZSKzOcSlaT1K83rihyfLWstpdcxJipenAJ275BN+e+NSAAUIM1Z91ovGuXHocfGufFA52E+Uu+eJJ8p+TQLfvuAaZ5GAWQyRhb5j9TN49tSSXyRnpUiL//qy35l3sp+NoqAznE8Gd59pTaXJiKO4zb1vUlFOMEsy//rG5v9X8iQbRxkJFtRbxA/qW2cVpdYN2UsHg+lgD18zxFH2Pkn422nF/eteUcdvhkvX1D4enn8P+Aw26VptjS5LSzzB5k8zlRWM68mOJfNfm6/Tcr7F20HNYvcONA+RaSd+pyMZRfNaNFn/79sO03g4t0hkJy61MRnuE5XAL5HOjmsWcZp18FVxLyrm4Am7qNDHHec0nfkki0rl0Lh9meMvoaew7W370Ey3bbN0Gzyfb6yi+crlJ+ol2EOSOOg14n9Lup1q8l7PcfgDlyLPSTkDG8kESrbcjUriaK+8FmTRTOOnnYgKjxG76Y3CVKyrKQarbrg6jJTGsr82rbdBm12nr9Qz088ClnS1fp5YAoge5QXxiP3atBejMz81AOPlEi8QPEnynwNNy5GB04zT+SfWpVuwAVvTaYB5q+A6xpsSVEFSGnmZbKW2MFPNEyi3F/dXfSjZSU2NloWFa2bQiFlx3v4/mWoNcjgxB4HABTrZu+MUlIE6ZCzo9ZjweQiIbSWiVw3ovDBvwXpEjVAnD/j2JqaedbHhgmrGKRjMRkR9x+je7c7FfzTgUPRQE/SzoEATcf/ic8RFdzAw1zhwb+ZQVhvuVl3DyYYzLcRin "
} ,
2019-05-31 10:33:23 +03:00
{
2020-05-19 13:19:03 +03:00
" c " : " CBInbMeI5ocGEiltkmy6nw57mBBnBxC1pubxugBtOVd0 " ,
" p " : " KEufkZlBHGu/cifq4VzJ+n7TBTSvPs/4Ww0BbaMpyuHx7fefAUJkNMuQr8wvCh+yluXFGpG15XofAjD9pPjFlQ55hvo3m5nWS2A5qGzH414EC6GSt4EEOVmFEmjKmHSpGIBeqVjIT3/ujTq0Ji8DL1o/hA683Sc7Kb6BARTm6GqVnY5MCAVy4+8knt1q1oUD7DvESGVIUg6id1pBrqZ6rJmUX86eendp1x+JOtfw0BCGkva2hSMSyub5hXBjBVvaWdzlIZJ8cAQLgCakG2UXyuChyUfKJEmEpcCt98ZIOwk5NGxI9hysN9UB9GocWHi2fO4NByP07q3J9dce1enzO0KUtY0+vu/qoT8gNXWZvlSc4Y5uLrHVDhI1zMQOyRhMaKYjdBpyOM5pqjodJRVrO36zj91vvlRzl5/u4zF98nnGDUiiiYJqpMdtvOJNUmiQ1Obi+D6A9nShJI/B3AN9mCAJASrhEz9eFYrmza2xjI1T5KiuVZXHWHgsZ6oMIPFG1SCFz0WjV5TOxFcCgw+JUqaXRHGPvm/g09pm40jdNHOgrO1wgPv1SUw+fhQZFvOxNbMyd/mY/Nms+8qHCYFIZumDil3NpMKUIs8VcpPm/CzMLSVCNReEO9jiHGHO1yMSwLSIFMMSAhsNMVmNI4mwsym6oRaZIqTDQXPdX1QFRb5QZqDykfGocOGq/5TBnwqFUlSIKheYS67aCOjq1T0VY+nuS8NnQnic7086sVgFTX3f4qKze1qKML6E/335p9dYqbdnUaNiIFdyGj7FuHNYLQyRzR/rvBU2YnOYVOoVyZAwI8GTxrV2i1VIQQj4l83EfROpCIsyVY5X8S9YB2aGScmaF7UZBRJzQOi0nEJ3Xxs8qwct+tM9M8weS6WWTXKO0KkF "
2019-05-31 10:33:23 +03:00
}
2019-03-22 15:03:25 +03:00
]
2020-05-19 13:19:03 +03:00
} ,
2020-03-04 16:38:40 +03:00
" fluff " : false
}
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : null
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , true , true , true , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2019-03-22 15:03:25 +03:00
2020-05-19 13:19:03 +03:00
fn post_tx ( & self , token : Token , slate : VersionedSlate , fluff : bool ) -> Result < ( ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
2019-03-22 15:03:25 +03:00
Networked version of [ Owner ::cancel_tx ] ( struct . Owner . html #method . cancel_tx ) .
2019-03-14 15:06:03 +03:00
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" method " : " cancel_tx " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" tx_id " : null ,
" tx_slate_id " : " 0436430c-2b02-624c-2032-570501212b00 "
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
2019-03-22 15:03:25 +03:00
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , true , true , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn cancel_tx (
& self ,
token : Token ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < ( ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
2019-03-22 15:03:25 +03:00
Networked version of [ Owner ::get_stored_tx ] ( struct . Owner . html #method . get_stored_tx ) .
2019-03-14 15:06:03 +03:00
2019-03-22 15:03:25 +03:00
` ` `
2019-03-14 15:06:03 +03:00
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" method " : " get_stored_tx " ,
" id " : 1 ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
2020-05-19 13:19:03 +03:00
" id " : " 0436430c-2b02-624c-2032-570501212b00 "
2020-03-04 16:38:40 +03:00
}
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : {
" body " : {
2020-05-19 13:19:03 +03:00
" inputs " : [ ] ,
2019-03-22 15:03:25 +03:00
" kernels " : [
{
" excess " : " 000000000000000000000000000000000000000000000000000000000000000000 " ,
" excess_sig " : " 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 " ,
2020-05-19 13:19:03 +03:00
" features " : {
" Plain " : {
" fee " : 7000000
}
}
2019-03-22 15:03:25 +03:00
}
] ,
" outputs " : [
{
" commit " : " 099b48cfb1f80a2347dc89818449e68e76a3c6817a532a8e9ef2b4a5ccf4363850 " ,
" features " : " Plain " ,
2019-06-27 12:41:05 +03:00
" proof " : " 29701ceae262cac77b79b868c883a292e61e6de8192b868edcd1300b0973d91396b156ace6bd673402a303de10ddd8a5e6b7f17ba6557a574a672bd04cc273ab04ed8e2ca80bac483345c0ec843f521814ce1301ec9adc38956a12b4d948acce71295a4f52bcdeb8a1c9f2d6b2da5d731262a5e9c0276ef904df9ef8d48001420cd59f75a2f1ae5c7a1c7c6b9f140e7613e52ef9e249f29f9340b7efb80699e460164324616f98fd4cde3db52497c919e95222fffeacb7e65deca7e368a80ce713c19de7da5369726228ee336f5bd494538c12ccbffeb1b9bfd5fc8906d1c64245b516f103fa96d9c56975837652c1e0fa5803d7ccf1147d8f927e36da717f7ad79471dbe192f5f50f87a79fc3fe030dba569b634b92d2cf307993cce545633af263897cd7e6ebf4dcafb176d07358bdc38d03e45a49dfa9c8c6517cd68d167ffbf6c3b4de0e2dd21909cbad4c467b84e5700be473a39ac59c669d7c155c4bcab9b8026eea3431c779cd277e4922d2b9742e1f6678cbe869ec3b5b7ef4132ddb6cdd06cf27dbeb28be72b949fa897610e48e3a0d789fd2eea75abc97b3dc7e00e5c8b3d24e40c6f24112adb72352b89a2bef0599345338e9e76202a3c46efa6370952b2aca41aadbae0ea32531acafcdab6dd066d769ebf50cf4f3c0a59d2d5fa79600a207b9417c623f76ad05e8cccfcd4038f9448bc40f127ca7c0d372e46074e334fe49f5a956ec0056f4da601e6af80eb1a6c4951054869e665b296d8c14f344ca2dc5fdd5df4a3652536365a1615ad9b422165c77bf8fe65a835c8e0c41e070014eb66ef8c525204e990b3a3d663c1e42221b496895c37a2f0c1bf05e91235409c3fe3d89a9a79d6c78609ab18a463311911f71fa37bb73b15fcd38143d1404fd2ce81004dc7ff89cf1115dcc0c35ce1c1bf9941586fb959770f2618ccb7118a7 "
2019-03-22 15:03:25 +03:00
}
]
} ,
2020-05-19 13:19:03 +03:00
" offset " : " 0000000000000000000000000000000000000000000000000000000000000000 "
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , true , true , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-05-19 13:19:03 +03:00
fn get_stored_tx ( & self , token : Token , id : Uuid ) -> Result < Option < Transaction > , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
2019-11-06 13:04:42 +03:00
Networked version of [ Owner ::scan ] ( struct . Owner . html #method . scan ) .
2019-03-14 15:06:03 +03:00
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
2019-11-06 13:04:42 +03:00
" method " : " scan " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" start_height " : 1 ,
" delete_unconfirmed " : false
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
2019-03-22 15:03:25 +03:00
" Ok " : null
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 1 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn scan (
& self ,
token : Token ,
start_height : Option < u64 > ,
delete_unconfirmed : bool ,
) -> Result < ( ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
/**
Networked version of [ Owner ::node_height ] ( struct . Owner . html #method . node_height ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
2019-03-22 15:03:25 +03:00
# r #"
2019-03-14 15:06:03 +03:00
{
" jsonrpc " : " 2.0 " ,
" method " : " node_height " ,
2020-03-04 16:38:40 +03:00
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 "
} ,
2019-03-14 15:06:03 +03:00
" id " : 1
2019-03-22 15:03:25 +03:00
}
# " #
# ,
# r #"
2019-03-14 15:06:03 +03:00
{
2019-03-22 15:03:25 +03:00
" id " : 1 ,
2019-03-14 15:06:03 +03:00
" jsonrpc " : " 2.0 " ,
" result " : {
2019-03-29 19:00:02 +03:00
" Ok " : {
2019-11-05 00:10:05 +03:00
" header_hash " : " d4b3d3c40695afd8c7760f8fc423565f7d41310b7a4e1c4a4a7950a66f16240d " ,
2019-03-29 19:00:02 +03:00
" height " : " 5 " ,
" updated_from_node " : true
}
2019-03-22 15:03:25 +03:00
}
2019-03-14 15:06:03 +03:00
}
2019-03-22 15:03:25 +03:00
# " #
2020-03-04 16:38:40 +03:00
# , 5 , false , false , false , false ) ;
2019-03-14 15:06:03 +03:00
` ` `
* /
2020-03-04 16:38:40 +03:00
fn node_height ( & self , token : Token ) -> Result < NodeHeightResult , ErrorKind > ;
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
/**
Initializes the secure JSON - RPC API . This function must be called and a shared key
established before any other OwnerAPI JSON - RPC function can be called .
The shared key will be derived using ECDH with the provided public key on the secp256k1 curve . This
function will return its public key used in the derivation , which the caller should multiply by its
private key to derive the shared key .
Once the key is established , all further requests and responses are encrypted and decrypted with the
following parameters :
* AES - 256 in GCM mode with 128 - bit tags and 96 bit nonces
* 12 byte nonce which must be included in each request / response to use on the decrypting side
* Empty vector for additional data
* Suffix length = AES - 256 GCM mode tag length = 16 bytes
*
Fully - formed JSON - RPC requests ( as documented ) should be encrypted using these parameters , encoded
into base64 and included with the one - time nonce in a request for the ` encrypted_request_v3 ` method
as follows :
` ` `
# let s = r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " encrypted_request_v3 " ,
" id " : " 1 " ,
" params " : {
" nonce " : " ef32... " ,
" body_enc " : " e0bcd... "
}
}
# " #;
` ` `
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
With a typical response being :
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
` ` `
# let s = r #" {
{
" jsonrpc " : " 2.0 " ,
" method " : " encrypted_response_v3 " ,
" id " : " 1 " ,
" Ok " : {
" nonce " : " 340b... " ,
" body_enc " : " 3f09c... "
}
}
# } " #;
` ` `
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
* /
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
fn init_secure_api ( & self , ecdh_pubkey : ECDHPubkey ) -> Result < ECDHPubkey , ErrorKind > ;
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
/**
Networked version of [ Owner ::get_top_level_directory ] ( struct . Owner . html #method . get_top_level_directory ) .
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " get_top_level_directory " ,
" params " : {
} ,
" id " : 1
2019-05-01 22:12:23 +03:00
}
2020-03-04 16:38:40 +03:00
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " /doctest/dir "
}
2019-05-01 22:12:23 +03:00
}
2020-03-04 16:38:40 +03:00
# " #
# , 5 , false , false , false , false ) ;
` ` `
* /
2019-05-01 22:12:23 +03:00
2020-03-04 16:38:40 +03:00
fn get_top_level_directory ( & self ) -> Result < String , ErrorKind > ;
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
/**
Networked version of [ Owner ::set_top_level_directory ] ( struct . Owner . html #method . set_top_level_directory ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " set_top_level_directory " ,
" params " : {
" dir " : " /home/wallet_user/my_wallet_dir "
} ,
" id " : 1
2019-03-14 15:06:03 +03:00
}
2020-03-04 16:38:40 +03:00
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
2019-03-14 18:05:13 +03:00
}
2020-03-04 16:38:40 +03:00
# " #
# , 5 , false , false , false , false ) ;
` ` `
* /
2019-03-14 18:05:13 +03:00
2020-03-04 16:38:40 +03:00
fn set_top_level_directory ( & self , dir : String ) -> Result < ( ) , ErrorKind > ;
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
/**
Networked version of [ Owner ::create_config ] ( struct . Owner . html #method . create_config ) .
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
Both the ` wallet_config ` and ` logging_config ` parameters can be ` null ` , the examples
below are for illustration . Note that the values provided for ` log_file_path ` and ` data_file_dir `
will be ignored and replaced with the actual values based on the value of ` get_top_level_directory `
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " create_config " ,
" params " : {
" chain_type " : " Mainnet " ,
" wallet_config " : {
" chain_type " : null ,
" api_listen_interface " : " 127.0.0.1 " ,
" api_listen_port " : 3415 ,
" owner_api_listen_port " : 3420 ,
" api_secret_path " : null ,
" node_api_secret_path " : null ,
" check_node_api_http_addr " : " http://127.0.0.1:3413 " ,
" owner_api_include_foreign " : false ,
" data_file_dir " : " /path/to/data/file/dir " ,
" no_commit_cache " : null ,
" tls_certificate_file " : null ,
" tls_certificate_key " : null ,
" dark_background_color_scheme " : null ,
" keybase_notify_ttl " : null
} ,
" logging_config " : {
" log_to_stdout " : false ,
" stdout_log_level " : " Info " ,
" log_to_file " : true ,
" file_log_level " : " Debug " ,
" log_file_path " : " /path/to/log/file " ,
" log_file_append " : true ,
" log_max_size " : null ,
" log_max_files " : null ,
" tui_running " : null
} ,
" tor_config " : {
" use_tor_listener " : true ,
" socks_proxy_addr " : " 127.0.0.1:9050 " ,
" send_config_dir " : " . "
}
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 5 , false , false , false , false ) ;
` ` `
* /
fn create_config (
& self ,
chain_type : global ::ChainTypes ,
wallet_config : Option < WalletConfig > ,
logging_config : Option < LoggingConfig > ,
tor_config : Option < TorConfig > ,
) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::create_wallet ] ( struct . Owner . html #method . create_wallet ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " create_wallet " ,
" params " : {
" name " : null ,
" mnemonic " : null ,
" mnemonic_length " : 32 ,
" password " : " my_secret_password "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn create_wallet (
& self ,
name : Option < String > ,
mnemonic : Option < String > ,
mnemonic_length : u32 ,
password : String ,
) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::open_wallet ] ( struct . Owner . html #method . open_wallet ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " open_wallet " ,
" params " : {
" name " : null ,
" password " : " my_secret_password "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " d096b3cb75986b3b13f80b8f5243a9edf0af4c74ac37578c5a12cfb5b59b1868 "
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn open_wallet ( & self , name : Option < String > , password : String ) -> Result < Token , ErrorKind > ;
/**
Networked version of [ Owner ::close_wallet ] ( struct . Owner . html #method . close_wallet ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " close_wallet " ,
" params " : {
" name " : null
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn close_wallet ( & self , name : Option < String > ) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::get_mnemonic ] ( struct . Owner . html #method . get_mnemonic ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " get_mnemonic " ,
" params " : {
" name " : null ,
" password " : " "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " fat twenty mean degree forget shell check candy immense awful flame next during february bulb bike sun wink theory day kiwi embrace peace lunch "
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn get_mnemonic ( & self , name : Option < String > , password : String ) -> Result < String , ErrorKind > ;
/**
Networked version of [ Owner ::change_password ] ( struct . Owner . html #method . change_password ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " change_password " ,
" params " : {
" name " : null ,
" old " : " " ,
" new " : " new_password "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn change_password (
& self ,
name : Option < String > ,
old : String ,
new : String ,
) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::delete_wallet ] ( struct . Owner . html #method . delete_wallet ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " delete_wallet " ,
" params " : {
" name " : null
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn delete_wallet ( & self , name : Option < String > ) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::start_updated ] ( struct . Owner . html #method . start_updater ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " start_updater " ,
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" frequency " : 30000
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn start_updater ( & self , token : Token , frequency : u32 ) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::stop_updater ] ( struct . Owner . html #method . stop_updater ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " stop_updater " ,
" params " : null ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn stop_updater ( & self ) -> Result < ( ) , ErrorKind > ;
/**
Networked version of [ Owner ::get_updater_messages ] ( struct . Owner . html #method . get_updater_messages ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " get_updater_messages " ,
" params " : {
" count " : 1
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : [ ]
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn get_updater_messages ( & self , count : u32 ) -> Result < Vec < StatusMessage > , ErrorKind > ;
/**
Networked version of [ Owner ::get_public_proof_address ] ( struct . Owner . html #method . get_public_proof_address ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " get_public_proof_address " ,
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" derivation_index " : 0
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " 32cdd63928854f8b2628b1dce4626ddcdf35d56cb7cfdf7d64cca5822b78d4d3 "
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn get_public_proof_address (
& self ,
token : Token ,
derivation_index : u32 ,
) -> Result < PubAddress , ErrorKind > ;
/**
Networked version of [ Owner ::proof_address_from_onion_v3 ] ( struct . Owner . html #method . proof_address_from_onion_v3 ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " proof_address_from_onion_v3 " ,
" params " : {
" address_v3 " : " 2a6at2obto3uvkpkitqp4wxcg6u36qf534eucbskqciturczzc5suyid "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : " d03c09e9c19bb74aa9ea44e0fe5ae237a9bf40bddf0941064a80913a4459c8bb "
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn proof_address_from_onion_v3 ( & self , address_v3 : String ) -> Result < PubAddress , ErrorKind > ;
/**
Networked version of [ Owner ::retrieve_payment_proof ] ( struct . Owner . html #method . retrieve_payment_proof ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " retrieve_payment_proof " ,
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" refresh_from_node " : true ,
" tx_id " : null ,
" tx_slate_id " : " 0436430c-2b02-624c-2032-570501212b00 "
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : {
" amount " : " 60000000000 " ,
2020-05-19 13:19:03 +03:00
" excess " : " 091f151170bfac881479bfb56c7012c52cd4ce4198ad661586374dd499925922fb " ,
2020-03-04 16:38:40 +03:00
" recipient_address " : " pa7wkkdgs5bkteha7lykl7ff2wztgdrxxo442xdcq2lnaphe5aidd4id " ,
2020-05-19 13:19:03 +03:00
" recipient_sig " : " b9b1885a3f33297df32e1aa4db23220bd305da8ed92ff6873faf3ab2c116fea25e9d0e34bd4f567f022b88a37400821ffbcaec71c9a8c3a327c4626611886d0d " ,
2020-03-04 16:38:40 +03:00
" sender_address " : " glg5mojiqvhywjriwhooiytn3tptlvlmw7h567lezssyek3y2tjzznad " ,
2020-05-19 13:19:03 +03:00
" sender_sig " : " 611b92331e395c3d29871ac35b1fce78ec595e28ccbe8cc55452da40775e8e46d35a2e84eaffd986935da3275e34d46a8d777d02dabcf4339704c2a621da9700 "
2020-03-04 16:38:40 +03:00
}
}
}
# " #
# , 5 , true , true , true , true ) ;
` ` `
* /
fn retrieve_payment_proof (
& self ,
token : Token ,
refresh_from_node : bool ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < PaymentProof , ErrorKind > ;
/**
Networked version of [ Owner ::verify_payment_proof ] ( struct . Owner . html #method . verify_payment_proof ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " verify_payment_proof " ,
" params " : {
" token " : " d202964900000000d302964900000000d402964900000000d502964900000000 " ,
" proof " : {
" amount " : " 60000000000 " ,
2020-05-19 13:19:03 +03:00
" excess " : " 091f151170bfac881479bfb56c7012c52cd4ce4198ad661586374dd499925922fb " ,
2020-03-04 16:38:40 +03:00
" recipient_address " : " pa7wkkdgs5bkteha7lykl7ff2wztgdrxxo442xdcq2lnaphe5aidd4id " ,
2020-05-19 13:19:03 +03:00
" recipient_sig " : " b9b1885a3f33297df32e1aa4db23220bd305da8ed92ff6873faf3ab2c116fea25e9d0e34bd4f567f022b88a37400821ffbcaec71c9a8c3a327c4626611886d0d " ,
2020-03-04 16:38:40 +03:00
" sender_address " : " glg5mojiqvhywjriwhooiytn3tptlvlmw7h567lezssyek3y2tjzznad " ,
2020-05-19 13:19:03 +03:00
" sender_sig " : " 611b92331e395c3d29871ac35b1fce78ec595e28ccbe8cc55452da40775e8e46d35a2e84eaffd986935da3275e34d46a8d777d02dabcf4339704c2a621da9700 "
2020-03-04 16:38:40 +03:00
}
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : [
true ,
false
]
}
}
# " #
# , 5 , true , true , true , true ) ;
` ` `
* /
fn verify_payment_proof (
& self ,
token : Token ,
proof : PaymentProof ,
) -> Result < ( bool , bool ) , ErrorKind > ;
/**
Networked version of [ Owner ::set_tor_config ] ( struct . Owner . html #method . set_tor_config ) .
` ` `
# grin_wallet_api ::doctest_helper_json_rpc_owner_assert_response! (
# r #"
{
" jsonrpc " : " 2.0 " ,
" method " : " set_tor_config " ,
" params " : {
" tor_config " : {
" use_tor_listener " : true ,
" socks_proxy_addr " : " 127.0.0.1:59050 " ,
" send_config_dir " : " . "
}
} ,
" id " : 1
}
# " #
# ,
# r #"
{
" id " : 1 ,
" jsonrpc " : " 2.0 " ,
" result " : {
" Ok " : null
}
}
# " #
# , 0 , false , false , false , false ) ;
` ` `
* /
fn set_tor_config ( & self , tor_config : Option < TorConfig > ) -> Result < ( ) , ErrorKind > ;
}
impl < L , C , K > OwnerRpc for Owner < L , C , K >
where
L : WalletLCProvider < 'static , C , K > ,
C : NodeClient + 'static ,
K : Keychain + 'static ,
{
fn accounts ( & self , token : Token ) -> Result < Vec < AcctPathMapping > , ErrorKind > {
Owner ::accounts ( self , ( & token . keychain_mask ) . as_ref ( ) ) . map_err ( | e | e . kind ( ) )
}
fn create_account_path ( & self , token : Token , label : & String ) -> Result < Identifier , ErrorKind > {
Owner ::create_account_path ( self , ( & token . keychain_mask ) . as_ref ( ) , label )
. map_err ( | e | e . kind ( ) )
}
fn set_active_account ( & self , token : Token , label : & String ) -> Result < ( ) , ErrorKind > {
Owner ::set_active_account ( self , ( & token . keychain_mask ) . as_ref ( ) , label )
. map_err ( | e | e . kind ( ) )
}
fn retrieve_outputs (
& self ,
token : Token ,
include_spent : bool ,
refresh_from_node : bool ,
tx_id : Option < u32 > ,
) -> Result < ( bool , Vec < OutputCommitMapping > ) , ErrorKind > {
Owner ::retrieve_outputs (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
include_spent ,
refresh_from_node ,
tx_id ,
)
. map_err ( | e | e . kind ( ) )
}
fn retrieve_txs (
& self ,
token : Token ,
refresh_from_node : bool ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < ( bool , Vec < TxLogEntry > ) , ErrorKind > {
Owner ::retrieve_txs (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
refresh_from_node ,
tx_id ,
tx_slate_id ,
)
. map_err ( | e | e . kind ( ) )
}
fn retrieve_summary_info (
& self ,
token : Token ,
refresh_from_node : bool ,
minimum_confirmations : u64 ,
) -> Result < ( bool , WalletInfo ) , ErrorKind > {
Owner ::retrieve_summary_info (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
refresh_from_node ,
minimum_confirmations ,
)
. map_err ( | e | e . kind ( ) )
}
fn init_send_tx ( & self , token : Token , args : InitTxArgs ) -> Result < VersionedSlate , ErrorKind > {
let slate = Owner ::init_send_tx ( self , ( & token . keychain_mask ) . as_ref ( ) , args )
. map_err ( | e | e . kind ( ) ) ? ;
2020-03-06 12:33:47 +03:00
let version = SlateVersion ::V4 ;
2020-03-10 21:19:27 +03:00
Ok ( VersionedSlate ::into_version ( slate , version ) . map_err ( | e | e . kind ( ) ) ? )
2020-03-04 16:38:40 +03:00
}
fn issue_invoice_tx (
& self ,
token : Token ,
args : IssueInvoiceTxArgs ,
) -> Result < VersionedSlate , ErrorKind > {
let slate = Owner ::issue_invoice_tx ( self , ( & token . keychain_mask ) . as_ref ( ) , args )
. map_err ( | e | e . kind ( ) ) ? ;
2020-03-06 12:33:47 +03:00
let version = SlateVersion ::V4 ;
2020-03-10 21:19:27 +03:00
Ok ( VersionedSlate ::into_version ( slate , version ) . map_err ( | e | e . kind ( ) ) ? )
2020-03-04 16:38:40 +03:00
}
fn process_invoice_tx (
& self ,
token : Token ,
in_slate : VersionedSlate ,
args : InitTxArgs ,
) -> Result < VersionedSlate , ErrorKind > {
let out_slate = Owner ::process_invoice_tx (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
& Slate ::from ( in_slate ) ,
args ,
)
. map_err ( | e | e . kind ( ) ) ? ;
2020-03-06 12:33:47 +03:00
let version = SlateVersion ::V4 ;
2020-03-10 21:19:27 +03:00
Ok ( VersionedSlate ::into_version ( out_slate , version ) . map_err ( | e | e . kind ( ) ) ? )
2020-03-04 16:38:40 +03:00
}
fn finalize_tx (
& self ,
token : Token ,
in_slate : VersionedSlate ,
) -> Result < VersionedSlate , ErrorKind > {
let out_slate = Owner ::finalize_tx (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
& Slate ::from ( in_slate ) ,
)
. map_err ( | e | e . kind ( ) ) ? ;
2020-03-06 12:33:47 +03:00
let version = SlateVersion ::V4 ;
2020-03-10 21:19:27 +03:00
Ok ( VersionedSlate ::into_version ( out_slate , version ) . map_err ( | e | e . kind ( ) ) ? )
2020-03-04 16:38:40 +03:00
}
2020-05-19 13:19:03 +03:00
fn tx_lock_outputs ( & self , token : Token , in_slate : VersionedSlate ) -> Result < ( ) , ErrorKind > {
2020-03-04 16:38:40 +03:00
Owner ::tx_lock_outputs (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
& Slate ::from ( in_slate ) ,
)
. map_err ( | e | e . kind ( ) )
}
fn cancel_tx (
& self ,
token : Token ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < ( ) , ErrorKind > {
Owner ::cancel_tx ( self , ( & token . keychain_mask ) . as_ref ( ) , tx_id , tx_slate_id )
. map_err ( | e | e . kind ( ) )
}
2020-05-19 13:19:03 +03:00
fn get_stored_tx ( & self , token : Token , uuid : Uuid ) -> Result < Option < Transaction > , ErrorKind > {
Owner ::get_stored_tx ( self , ( & token . keychain_mask ) . as_ref ( ) , uuid ) . map_err ( | e | e . kind ( ) )
2020-03-04 16:38:40 +03:00
}
2020-05-19 13:19:03 +03:00
fn post_tx ( & self , token : Token , slate : VersionedSlate , fluff : bool ) -> Result < ( ) , ErrorKind > {
2020-03-04 16:38:40 +03:00
Owner ::post_tx (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
2020-05-19 13:19:03 +03:00
& Slate ::from ( slate ) ,
2020-03-04 16:38:40 +03:00
fluff ,
)
. map_err ( | e | e . kind ( ) )
}
fn scan (
& self ,
token : Token ,
start_height : Option < u64 > ,
delete_unconfirmed : bool ,
) -> Result < ( ) , ErrorKind > {
Owner ::scan (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
start_height ,
delete_unconfirmed ,
)
. map_err ( | e | e . kind ( ) )
}
fn node_height ( & self , token : Token ) -> Result < NodeHeightResult , ErrorKind > {
Owner ::node_height ( self , ( & token . keychain_mask ) . as_ref ( ) ) . map_err ( | e | e . kind ( ) )
}
fn init_secure_api ( & self , ecdh_pubkey : ECDHPubkey ) -> Result < ECDHPubkey , ErrorKind > {
let secp_inst = static_secp_instance ( ) ;
let secp = secp_inst . lock ( ) ;
let sec_key = SecretKey ::new ( & secp , & mut thread_rng ( ) ) ;
let mut shared_pubkey = ecdh_pubkey . ecdh_pubkey ;
shared_pubkey
. mul_assign ( & secp , & sec_key )
. map_err ( ErrorKind ::Secp ) ? ;
let x_coord = shared_pubkey . serialize_vec ( & secp , true ) ;
let shared_key = SecretKey ::from_slice ( & secp , & x_coord [ 1 .. ] ) . map_err ( ErrorKind ::Secp ) ? ;
{
let mut s = self . shared_key . lock ( ) ;
* s = Some ( shared_key ) ;
}
let pub_key = PublicKey ::from_secret_key ( & secp , & sec_key ) . map_err ( ErrorKind ::Secp ) ? ;
Ok ( ECDHPubkey {
ecdh_pubkey : pub_key ,
} )
}
fn get_top_level_directory ( & self ) -> Result < String , ErrorKind > {
Owner ::get_top_level_directory ( self ) . map_err ( | e | e . kind ( ) )
}
fn set_top_level_directory ( & self , dir : String ) -> Result < ( ) , ErrorKind > {
Owner ::set_top_level_directory ( self , & dir ) . map_err ( | e | e . kind ( ) )
}
fn create_config (
& self ,
chain_type : global ::ChainTypes ,
wallet_config : Option < WalletConfig > ,
logging_config : Option < LoggingConfig > ,
tor_config : Option < TorConfig > ,
) -> Result < ( ) , ErrorKind > {
Owner ::create_config ( self , & chain_type , wallet_config , logging_config , tor_config )
. map_err ( | e | e . kind ( ) )
}
fn create_wallet (
& self ,
name : Option < String > ,
mnemonic : Option < String > ,
mnemonic_length : u32 ,
password : String ,
) -> Result < ( ) , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
let m = match mnemonic {
Some ( s ) = > Some ( ZeroingString ::from ( s ) ) ,
None = > None ,
} ;
Owner ::create_wallet ( self , n , m , mnemonic_length , ZeroingString ::from ( password ) )
. map_err ( | e | e . kind ( ) )
}
fn open_wallet ( & self , name : Option < String > , password : String ) -> Result < Token , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
let sec_key = Owner ::open_wallet ( self , n , ZeroingString ::from ( password ) , true )
. map_err ( | e | e . kind ( ) ) ? ;
Ok ( Token {
keychain_mask : sec_key ,
} )
}
2019-03-14 15:06:03 +03:00
2020-03-04 16:38:40 +03:00
fn close_wallet ( & self , name : Option < String > ) -> Result < ( ) , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
Owner ::close_wallet ( self , n ) . map_err ( | e | e . kind ( ) )
2019-03-14 15:06:03 +03:00
}
2020-03-04 16:38:40 +03:00
fn get_mnemonic ( & self , name : Option < String > , password : String ) -> Result < String , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
let res =
Owner ::get_mnemonic ( self , n , ZeroingString ::from ( password ) ) . map_err ( | e | e . kind ( ) ) ? ;
Ok ( ( & * res ) . to_string ( ) )
2019-03-14 15:06:03 +03:00
}
2020-03-04 16:38:40 +03:00
fn change_password (
& self ,
name : Option < String > ,
old : String ,
new : String ,
) -> Result < ( ) , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
Owner ::change_password ( self , n , ZeroingString ::from ( old ) , ZeroingString ::from ( new ) )
. map_err ( | e | e . kind ( ) )
}
fn delete_wallet ( & self , name : Option < String > ) -> Result < ( ) , ErrorKind > {
let n = name . as_ref ( ) . map ( | s | s . as_str ( ) ) ;
Owner ::delete_wallet ( self , n ) . map_err ( | e | e . kind ( ) )
}
fn start_updater ( & self , token : Token , frequency : u32 ) -> Result < ( ) , ErrorKind > {
Owner ::start_updater (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
Duration ::from_millis ( frequency as u64 ) ,
)
. map_err ( | e | e . kind ( ) )
}
fn stop_updater ( & self ) -> Result < ( ) , ErrorKind > {
Owner ::stop_updater ( self ) . map_err ( | e | e . kind ( ) )
}
fn get_updater_messages ( & self , count : u32 ) -> Result < Vec < StatusMessage > , ErrorKind > {
Owner ::get_updater_messages ( self , count as usize ) . map_err ( | e | e . kind ( ) )
}
fn get_public_proof_address (
& self ,
token : Token ,
derivation_index : u32 ,
) -> Result < PubAddress , ErrorKind > {
let address = Owner ::get_public_proof_address (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
derivation_index ,
)
. map_err ( | e | e . kind ( ) ) ? ;
Ok ( PubAddress { address } )
}
fn retrieve_payment_proof (
& self ,
token : Token ,
refresh_from_node : bool ,
tx_id : Option < u32 > ,
tx_slate_id : Option < Uuid > ,
) -> Result < PaymentProof , ErrorKind > {
Owner ::retrieve_payment_proof (
self ,
( & token . keychain_mask ) . as_ref ( ) ,
refresh_from_node ,
tx_id ,
tx_slate_id ,
)
. map_err ( | e | e . kind ( ) )
}
fn verify_payment_proof (
& self ,
token : Token ,
proof : PaymentProof ,
) -> Result < ( bool , bool ) , ErrorKind > {
Owner ::verify_payment_proof ( self , ( & token . keychain_mask ) . as_ref ( ) , & proof )
. map_err ( | e | e . kind ( ) )
}
fn proof_address_from_onion_v3 ( & self , address_v3 : String ) -> Result < PubAddress , ErrorKind > {
let address =
Owner ::proof_address_from_onion_v3 ( self , & address_v3 ) . map_err ( | e | e . kind ( ) ) ? ;
Ok ( PubAddress { address } )
}
fn set_tor_config ( & self , tor_config : Option < TorConfig > ) -> Result < ( ) , ErrorKind > {
Owner ::set_tor_config ( self , tor_config ) ;
Ok ( ( ) )
2019-03-14 15:06:03 +03:00
}
}
2019-03-22 15:03:25 +03:00
/// helper to set up a real environment to run integrated doctests
2019-03-26 19:02:31 +03:00
pub fn run_doctest_owner (
2019-03-22 15:03:25 +03:00
request : serde_json ::Value ,
test_dir : & str ,
blocks_to_mine : u64 ,
perform_tx : bool ,
lock_tx : bool ,
finalize_tx : bool ,
2020-01-22 16:16:24 +03:00
payment_proof : bool ,
2019-03-22 15:03:25 +03:00
) -> Result < Option < serde_json ::Value > , String > {
2019-08-19 15:05:21 +03:00
use easy_jsonrpc_mw ::Handler ;
2019-03-22 15:03:25 +03:00
use grin_wallet_impls ::test_framework ::{ self , LocalWalletClient , WalletProxy } ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
use grin_wallet_impls ::{ DefaultLCProvider , DefaultWalletImpl } ;
use grin_wallet_libwallet ::{ api_impl , WalletInst } ;
2019-03-26 19:02:31 +03:00
use grin_wallet_util ::grin_keychain ::ExtKeychain ;
2019-03-22 15:03:25 +03:00
use crate ::core ::global ::ChainTypes ;
2019-03-26 19:02:31 +03:00
use grin_wallet_util ::grin_util as util ;
2019-03-22 15:03:25 +03:00
2020-03-04 16:38:40 +03:00
use std ::{ fs , thread } ;
2019-03-22 15:03:25 +03:00
util ::init_test_logger ( ) ;
let _ = fs ::remove_dir_all ( test_dir ) ;
global ::set_mining_mode ( ChainTypes ::AutomatedTesting ) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let mut wallet_proxy : WalletProxy <
DefaultLCProvider < LocalWalletClient , ExtKeychain > ,
LocalWalletClient ,
ExtKeychain ,
> = WalletProxy ::new ( test_dir ) ;
2019-03-22 15:03:25 +03:00
let chain = wallet_proxy . chain . clone ( ) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let rec_phrase_1 = util ::ZeroingString ::from (
2019-03-22 15:03:25 +03:00
" fat twenty mean degree forget shell check candy immense awful \
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
flame next during february bulb bike sun wink theory day kiwi embrace peace lunch " ,
2019-03-22 15:03:25 +03:00
) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let empty_string = util ::ZeroingString ::from ( " " ) ;
let client1 = LocalWalletClient ::new ( " wallet1 " , wallet_proxy . tx . clone ( ) ) ;
let mut wallet1 =
Box ::new ( DefaultWalletImpl ::< LocalWalletClient > ::new ( client1 . clone ( ) ) . unwrap ( ) )
as Box <
2019-08-19 15:05:21 +03:00
dyn WalletInst <
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
'static ,
DefaultLCProvider < LocalWalletClient , ExtKeychain > ,
LocalWalletClient ,
ExtKeychain ,
> ,
> ;
let lc = wallet1 . lc_provider ( ) . unwrap ( ) ;
2019-09-02 18:03:35 +03:00
let _ = lc . set_top_level_directory ( & format! ( " {} /wallet1 " , test_dir ) ) ;
lc . create_wallet ( None , Some ( rec_phrase_1 ) , 32 , empty_string . clone ( ) , false )
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
. unwrap ( ) ;
2019-08-06 14:50:41 +03:00
let mask1 = lc
2020-03-04 16:38:40 +03:00
. open_wallet ( None , empty_string . clone ( ) , true , true )
2019-08-06 14:50:41 +03:00
. unwrap ( ) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let wallet1 = Arc ::new ( Mutex ::new ( wallet1 ) ) ;
2019-08-06 14:50:41 +03:00
if mask1 . is_some ( ) {
println! ( " WALLET 1 MASK: {:?} " , mask1 . clone ( ) . unwrap ( ) ) ;
}
wallet_proxy . add_wallet (
" wallet1 " ,
client1 . get_send_instance ( ) ,
wallet1 . clone ( ) ,
mask1 . clone ( ) ,
) ;
2019-03-22 15:03:25 +03:00
2020-05-19 13:19:03 +03:00
let mut slate_outer = Slate ::blank ( 2 , false ) ;
2020-01-22 16:16:24 +03:00
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let rec_phrase_2 = util ::ZeroingString ::from (
2019-03-22 15:03:25 +03:00
" hour kingdom ripple lunch razor inquiry coyote clay stamp mean \
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
sell finish magic kid tiny wage stand panther inside settle feed song hole exile " ,
2019-03-22 15:03:25 +03:00
) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let client2 = LocalWalletClient ::new ( " wallet2 " , wallet_proxy . tx . clone ( ) ) ;
let mut wallet2 =
Box ::new ( DefaultWalletImpl ::< LocalWalletClient > ::new ( client2 . clone ( ) ) . unwrap ( ) )
as Box <
2019-08-19 15:05:21 +03:00
dyn WalletInst <
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
'static ,
DefaultLCProvider < LocalWalletClient , ExtKeychain > ,
LocalWalletClient ,
ExtKeychain ,
> ,
> ;
let lc = wallet2 . lc_provider ( ) . unwrap ( ) ;
2019-09-02 18:03:35 +03:00
let _ = lc . set_top_level_directory ( & format! ( " {} /wallet2 " , test_dir ) ) ;
lc . create_wallet ( None , Some ( rec_phrase_2 ) , 32 , empty_string . clone ( ) , false )
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
. unwrap ( ) ;
2020-03-04 16:38:40 +03:00
let mask2 = lc . open_wallet ( None , empty_string , true , true ) . unwrap ( ) ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let wallet2 = Arc ::new ( Mutex ::new ( wallet2 ) ) ;
2019-08-06 14:50:41 +03:00
if mask2 . is_some ( ) {
println! ( " WALLET 2 MASK: {:?} " , mask2 . clone ( ) . unwrap ( ) ) ;
}
wallet_proxy . add_wallet (
" wallet2 " ,
client2 . get_send_instance ( ) ,
wallet2 . clone ( ) ,
mask2 . clone ( ) ,
) ;
2019-03-22 15:03:25 +03:00
// Set the wallet proxy listener running
thread ::spawn ( move | | {
if let Err ( e ) = wallet_proxy . run ( ) {
error! ( " Wallet Proxy error: {} " , e ) ;
}
} ) ;
// Mine a few blocks to wallet 1 so there's something to send
for _ in 0 .. blocks_to_mine {
2019-08-06 14:50:41 +03:00
let _ = test_framework ::award_blocks_to_wallet (
& chain ,
wallet1 . clone ( ) ,
( & mask1 ) . as_ref ( ) ,
1 as usize ,
false ,
) ;
2019-03-22 15:03:25 +03:00
//update local outputs after each block, so transaction IDs stay consistent
2019-11-18 13:49:51 +03:00
let ( wallet_refreshed , _ ) = api_impl ::owner ::retrieve_summary_info (
wallet1 . clone ( ) ,
( & mask1 ) . as_ref ( ) ,
& None ,
true ,
1 ,
)
. unwrap ( ) ;
2019-03-22 15:03:25 +03:00
assert! ( wallet_refreshed ) ;
}
2019-11-28 17:34:27 +03:00
//let proof_address = api_impl::owner::get_public_proof_address(wallet2.clone(), (&mask2).as_ref(), 0).unwrap();
2019-03-22 15:03:25 +03:00
if perform_tx {
let amount = 60_000_000_000 ;
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let mut w_lock = wallet1 . lock ( ) ;
let w = w_lock . lc_provider ( ) . unwrap ( ) . wallet_inst ( ) . unwrap ( ) ;
2020-01-22 16:16:24 +03:00
let proof_address = match payment_proof {
true = > {
2020-01-24 16:02:09 +03:00
let address = " 783f6528669742a990e0faf0a5fca5d5b3330e37bbb9cd5c628696d03ce4e810 " ;
Some ( OnionV3Address ::try_from ( address ) . unwrap ( ) )
2020-01-22 16:16:24 +03:00
}
false = > None ,
} ;
2019-03-29 19:00:02 +03:00
let args = InitTxArgs {
src_acct_name : None ,
amount ,
minimum_confirmations : 2 ,
max_outputs : 500 ,
num_change_outputs : 1 ,
selection_strategy_is_use_all : true ,
2020-01-22 16:16:24 +03:00
payment_proof_recipient_address : proof_address ,
2019-03-29 19:00:02 +03:00
.. Default ::default ( )
} ;
2019-08-06 14:50:41 +03:00
let mut slate =
api_impl ::owner ::init_send_tx ( & mut * * w , ( & mask1 ) . as_ref ( ) , args , true ) . unwrap ( ) ;
2019-05-31 10:33:23 +03:00
println! ( " INITIAL SLATE " ) ;
println! ( " {} " , serde_json ::to_string_pretty ( & slate ) . unwrap ( ) ) ;
2019-03-22 15:03:25 +03:00
{
Merge milestone/2.1.0 into master (#199)
* version bump for next potential release
* Merge master into milestone/2.1.0 (#182)
* Derive --version output dynamically from cargo package version (#174)
* add --txid to the `wallet txs` command (#176)
* add --txid to the `wallet txs` command
* add test for `wallet txs` command with `--txid` parameter
* Refactor - Split WalletCommAdapter into multiple traits (#180)
* Derive --version output dynamically from cargo package version (#174)
* add server auth argument to http client
* Revert "add server auth argument to http client"
This reverts commit f52a8d2c7cdfb8583af5716ad621eb560811d6ee.
* modify WalletCommAdapter, moving dest argument into fields on implementors,
visiting havok on automated tests, at least one of which is now out of date and failing
* Split WalletCommAdapter into four traits, one for each of its intended behaviors.
* Remove two vestigals
1. args, a stringly typed argument to put_tx
2. NullAdapter, which is no longer used
* Remove unused "params" argument from listen method.
* Re-add previously existing TODO comment
* Fix non-test build
* completely Fix non-test build
* Full Lifecycle API Support (#184)
* refactoring wallet lib traits
* rustfmt
* rustfmt
* add new files
* explicit lifetime specifiers on all wallet traits
* rustfmt
* modify apis to use new walletinst
* rustfmt
* converting controller crate
* rustfmt
* controller crate compiling
* rustfmt
* compilation
* rustfmt
* Remove config from wallet, implement open_wallet, close_wallet in lifecycle provider, remove password + open_with_credentials from WalletBackend + impl
* rustfmt
* full compilation, changing recovery + init to new model
* rustfmt
* wallet initialisation working, init command output and flow identical to v2.0.0 wallet
* rustfmt
* fix listener and owner api startup
* rustfmt
* rustfmt
* move encryption test
* rustfmt
* fix api doctests
* rustfmt
* fix for most tests in controller crate
* rustfmt
* fix for check tests in controller crate
* fix main wallet tests
* rustfmt
* add explicit functions to handle mnemonic recovery, fix CLI recovery workflow
* rustfmt
* update keybase adapter to use new wallet format
* rustfmt
* test fix
* remove debug output
2019-07-29 15:25:03 +03:00
let mut w_lock = wallet2 . lock ( ) ;
let w2 = w_lock . lc_provider ( ) . unwrap ( ) . wallet_inst ( ) . unwrap ( ) ;
2020-05-19 13:19:03 +03:00
slate = api_impl ::foreign ::receive_tx ( & mut * * w2 , ( & mask2 ) . as_ref ( ) , & slate , None , true )
. unwrap ( ) ;
2019-03-22 15:03:25 +03:00
w2 . close ( ) . unwrap ( ) ;
}
// Spit out slate for input to finalize_tx
if lock_tx {
2020-05-19 13:19:03 +03:00
println! ( " LOCKING TX " ) ;
api_impl ::owner ::tx_lock_outputs ( & mut * * w , ( & mask1 ) . as_ref ( ) , & slate ) . unwrap ( ) ;
2019-03-22 15:03:25 +03:00
}
2019-05-31 10:33:23 +03:00
println! ( " RECEIPIENT SLATE " ) ;
println! ( " {} " , serde_json ::to_string_pretty ( & slate ) . unwrap ( ) ) ;
2019-03-22 15:03:25 +03:00
if finalize_tx {
2020-05-19 13:19:03 +03:00
slate = api_impl ::owner ::finalize_tx ( & mut * * w , ( & mask1 ) . as_ref ( ) , & slate ) . unwrap ( ) ;
2019-05-31 10:33:23 +03:00
error! ( " FINALIZED TX SLATE " ) ;
println! ( " {} " , serde_json ::to_string_pretty ( & slate ) . unwrap ( ) ) ;
2019-03-22 15:03:25 +03:00
}
2020-01-22 16:16:24 +03:00
slate_outer = slate ;
}
if payment_proof {
2020-03-10 21:19:27 +03:00
api_impl ::owner ::post_tx ( & client1 , slate_outer . tx_or_err ( ) . unwrap ( ) , true ) . unwrap ( ) ;
2019-03-22 15:03:25 +03:00
}
if perform_tx & & lock_tx & & finalize_tx {
// mine to move the chain on
2019-08-06 14:50:41 +03:00
let _ = test_framework ::award_blocks_to_wallet (
& chain ,
wallet1 . clone ( ) ,
( & mask1 ) . as_ref ( ) ,
3 as usize ,
false ,
) ;
2019-03-22 15:03:25 +03:00
}
2020-02-06 12:08:24 +03:00
let mut api_owner = Owner ::new ( wallet1 , None ) ;
2019-03-22 15:03:25 +03:00
api_owner . doctest_mode = true ;
2020-03-04 16:38:40 +03:00
let owner_api = & api_owner as & dyn OwnerRpc ;
let res = owner_api . handle_request ( request ) . as_option ( ) ;
2019-08-19 15:05:21 +03:00
let _ = fs ::remove_dir_all ( test_dir ) ;
Ok ( res )
2019-03-22 15:03:25 +03:00
}
2019-03-14 15:06:03 +03:00
#[ doc(hidden) ]
#[ macro_export ]
macro_rules ! doctest_helper_json_rpc_owner_assert_response {
2020-03-04 16:38:40 +03:00
( $request :expr , $expected_response :expr , $blocks_to_mine :expr , $perform_tx :expr , $lock_tx :expr , $finalize_tx :expr , $payment_proof :expr ) = > {
2019-03-14 15:06:03 +03:00
// create temporary wallet, run jsonrpc request on owner api of wallet, delete wallet, return
// json response.
// In order to prevent leaking tempdirs, This function should not panic.
2019-03-22 15:03:25 +03:00
2019-08-19 15:05:21 +03:00
// These cause LMDB to run out of disk space on CircleCI
// disable for now on windows
// TODO: Fix properly
#[ cfg(not(target_os = " windows " )) ]
{
use grin_wallet_api ::run_doctest_owner ;
use serde_json ;
use serde_json ::Value ;
use tempfile ::tempdir ;
let dir = tempdir ( ) . map_err ( | e | format! ( " {:#?} " , e ) ) . unwrap ( ) ;
let dir = dir
. path ( )
. to_str ( )
. ok_or ( " Failed to convert tmpdir path to string. " . to_owned ( ) )
. unwrap ( ) ;
let request_val : Value = serde_json ::from_str ( $request ) . unwrap ( ) ;
let expected_response : Value = serde_json ::from_str ( $expected_response ) . unwrap ( ) ;
let response = run_doctest_owner (
request_val ,
dir ,
$blocks_to_mine ,
$perform_tx ,
$lock_tx ,
$finalize_tx ,
2020-01-22 16:16:24 +03:00
$payment_proof ,
2019-08-19 15:05:21 +03:00
)
. unwrap ( )
. unwrap ( ) ;
2019-03-14 15:06:03 +03:00
2019-08-19 15:05:21 +03:00
if response ! = expected_response {
panic! (
" (left != right) \n left: {} \n right: {} " ,
serde_json ::to_string_pretty ( & response ) . unwrap ( ) ,
serde_json ::to_string_pretty ( & expected_response ) . unwrap ( )
2019-03-14 15:06:03 +03:00
) ;
2019-08-19 15:05:21 +03:00
}
2019-03-14 15:06:03 +03:00
}
} ;
}