Commit graph

1715 commits

Author SHA1 Message Date
moneromooo-monero d7b681cd65
remove hf_starting_height db
It's not really needed, it used to be an optimization for when
that code was not using the db and needed to recalculate things
fast on startup.
2016-07-13 21:38:34 +01:00
redfish fa85cd845f common: stack trace: make clang happy with func ptrs
Tested that it builds with:
gcc 6.1.1, STATIC=OFF,i686
gcc 6.1.1, STATIC=OFF,armv7h
clang 3.8, STATIC=OFF,i686
clang 3.8, STATIC=OFF,armv7h

gcc 6.1.1, STATIC=ON,i686
clang 3.8, STATIC=ON,i686

Also tested that stack trace is generated fine on exception on:
i686, gcc 6.1.1, STATIC=OFF
(didn't bother testing all the other platforms/configs)

This should fix the build problem on OSX (#871, #901), but
I don't have OSX, so I could only test Clang on Linux.
2016-07-10 21:26:11 -04:00
moneromooo-monero 014f3a0d39
Add a daemon RPC version, and make simplewallet check it
If the version is different, simplewallet will refuse to use that
daemon, unless --allow-mismatched-daemon-version is used.
2016-07-10 16:49:40 +01:00
moneromooo-monero 78cc10f3fa
daemon: fix ban seconds being misinterpreted as absolute
Absolute to relative conversion is already done by the callee.
2016-07-10 15:13:53 +01:00
moneromooo-monero 34ecfdbf15
rpc: fix get_bans and set_bans RPC names, they were missing a _ 2016-07-10 15:10:51 +01:00
moneromooo-monero a95a2cbc4d
wallet_rpc_server: add payment id from integrated addresses to extra 2016-07-10 13:46:18 +01:00
redfish ce6b83128e daemonizer: posix: keep parent's working dir and umask
Keep the working directory (and umask) inherited from
the parent. Otherwise, it's impossible to control
the working directory of the daemon (from systemd, for
example).

Furthermoer, bitmonerod attempts to create logging directories and files
*in current working directory*. This fails due to permission denied and
generates a (caught, nonfatal) exception. Below is the strace with this
patch applied (so, no `chdir("/")`), showing successful opens at `log/`
relative path. Without this patch they fail (sorry, didn't save the
trace).

```
28911 getcwd("/.../bitmonero", 128) = 25
28911 stat64("/var/lib/bitmonero/.bitmonero", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
28911 stat64("/etc/bitmonerod.conf", {st_mode=S_IFREG|0644, st_size=244, ...}) = 0
28911 open("/etc/bitmonerod.conf", O_RDONLY|O_LARGEFILE) = 3
28911 open("/var/log/bitmonero/bitmonero.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 0666) = 3
28911 stat64("log", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
28911 stat64("log/dbg", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
28911 open("log/dbg/main.log", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 4
```
The reasoning of chdir("/") in order to prevent the daemon from holding
a filesystem in busy state is not compelling at all: the choice of
working directory for the daemon is the user's business not the
daemon's.
2016-07-09 20:16:44 -04:00
moneromooo-monero a0bf85d09d
wallet2_api: make this build (smatch needs .str() for /=) 2016-07-07 22:42:59 +01:00
Riccardo Spagni 18fa01c092
Merge pull request #884
c2ad9ca allow peers without port (moneromooo-monero)
2016-07-06 18:20:17 +02:00
Riccardo Spagni 1088ed862b
Merge pull request #883
459ec60 daemon: print exception errors when failing to parse config file (moneromooo-monero)
2016-07-06 18:19:40 +02:00
Riccardo Spagni 0b65717a5d
Merge pull request #882
f11191a rpc: restrict number of fake outs requested in restricted rpc mode (moneromooo-monero)
2016-07-06 18:17:08 +02:00
Riccardo Spagni 00fd89a36d
Merge pull request #879
6b08001 simplewallet: mention the background refresh thread when starting (moneromooo-monero)
2016-07-06 18:15:36 +02:00
Riccardo Spagni 3923cbddaf
Merge pull request #878
945c272 wallet: add a fee multiplier (moneromooo-monero)
2016-07-06 18:14:34 +02:00
Riccardo Spagni 628f57b212
Merge pull request #873
d718960 remove POSIX_C_SOURCE and remove dlfcn.h for static builds (luigi1111)
2016-07-06 18:12:03 +02:00
moneromooo-monero c2ad9caf01
allow peers without port
The default port is then used
2016-07-03 12:51:12 +01:00
moneromooo-monero 459ec6040e
daemon: print exception errors when failing to parse config file
When an exception happens while reading the config file, we need
to print the error, as the logging system isn't initialized yet,
so the generic catch will not print anything.
2016-06-30 22:15:40 +01:00
moneromooo-monero f11191a818
rpc: restrict number of fake outs requested in restricted rpc mode 2016-06-29 20:43:14 +01:00
Ilya Kitaev beb6d9200d CMake: GPL 'libutils' script removed 2016-06-24 14:49:23 +03:00
Ilya Kitaev ab61ba0c9b Merge branch 'master' of https://github.com/mbg033/bitmonero 2016-06-23 16:23:09 +03:00
Ilya Kitaev d60864785f WalletManager::findWallets: searching by "keys" files instead of
"address.txt" files
2016-06-23 16:01:41 +03:00
Ilya Kitaev ca61153003 Wallet: payment id and integrated address 2016-06-23 16:01:41 +03:00
Ilya Kitaev 23cbf6fd97 PendingTransactionImpl: pointer->reference 2016-06-23 16:01:41 +03:00
Ilya Kitaev c1d9e7cd2a commented regex 2016-06-23 16:01:41 +03:00
Ilya Kitaev 563baf1b68 Typo fixed 2016-06-23 16:01:41 +03:00
Ilya Kitaev 2efec04f74 Wallet::createTransaction: added mixin_count param 2016-06-23 16:01:41 +03:00
Ilya Kitaev 85a632244e double/string to monero integer convertion methods 2016-06-23 16:01:41 +03:00
Ilya Kitaev e7d8f2a085 wallet::default_mixin exposed to public interface as
Wallet::setDefaultMixin, Wallet::defaultMixin;
wallet::create_transaction_2 used in Wallet::createTransaction
2016-06-23 16:01:41 +03:00
Ilya Kitaev a5374897f8 Wallet::filename, Wallet::keysFilename, tests for move wallet 2016-06-23 16:01:41 +03:00
Ilya Kitaev a1eddcd693 removed unused "using" 2016-06-23 16:01:41 +03:00
Ilya Kitaev 8390bfa770 Wallet API : WalletManager::findWallets() added 2016-06-23 16:01:41 +03:00
Ilya Kitaev dbc0b039b4 installing wallet_api header 2016-06-23 16:01:33 +03:00
Ilya Kitaev 191cb594de all wallet dependencies merged to single static lib 2016-06-23 16:01:33 +03:00
Ilya Kitaev 64348a2d11 WalletListener::moneySpent test 2016-06-23 16:01:33 +03:00
Ilya Kitaev 060bb62e29 WalletListener::moneySpent(), WalletListener::moneyReceived() 2016-06-23 16:01:33 +03:00
Ilya Kitaev 214014c048 i_wallet_callback: virtual dtor 2016-06-23 16:01:33 +03:00
Ilya Kitaev 374577018d started WalletListener 2016-06-23 16:01:33 +03:00
Ilya Kitaev e6fdd5dd10 TransactionHistory continued 2016-06-23 16:01:26 +03:00
Ilya Kitaev 3dd4b4ccf9 merged with upstream 2016-06-23 15:50:40 +03:00
Ilya Kitaev d500272fa8 Wallet API : transaction history in progress 2016-06-23 15:50:33 +03:00
Ilya Kitaev 663ed04eb8 transaction history api in progress 2016-06-23 15:50:17 +03:00
Ilya Kitaev 12345d382c api implementation splitted over separate files 2016-06-23 15:50:17 +03:00
Ilya Kitaev 60508e6bae TransactionInfo / TransactionHistory APIs design 2016-06-23 15:50:17 +03:00
Ilya Kitaev 951f3b5d83 Wallet::createTransaction API introduced
Transaction API continued

TODOs for Transaction/Transfer interface
2016-06-23 15:49:54 +03:00
Ilya Kitaev 7c51227f88 Wallet::transfer in progress 2016-06-23 15:49:36 +03:00
Ilya Kitaev e04c67ac4c Wallet::refresh + tests 2016-06-23 15:49:36 +03:00
Ilya Kitaev 9cdf0b7d7f "testnet" is default parameter 2016-06-23 15:49:36 +03:00
Ilya Kitaev caf0e02787 testnet option, Wallet::balance(), Wallet::unlockedBalance() 2016-06-23 15:49:22 +03:00
Ilya Kitaev 8df820b301 - testnet option added to api; 2016-06-23 15:49:07 +03:00
Ilya Kitaev 94eaeb50b2 wallet2::store() implemented within wallet2::store_to 2016-06-23 15:40:48 +03:00
moneromooo-monero 6b08001f9e
simplewallet: mention the background refresh thread when starting
It should be less confusing for people who're used to the foreground
refresh from earlier versions.
2016-06-22 23:05:50 +01:00
moneromooo-monero 945c272f6c
wallet: add a fee multiplier
Fee can now be multiplied by 2 or 3, if users want to give
priority to their transactions. There are only three levels
to avoid too much fingerprinting. Default is 1 (minimum fee).
The default multiplier can be set by "set fee-multiplier X".
2016-06-22 22:21:30 +01:00
Ilya Kitaev 4e5521d87d PendingTransactionImpl: pointer->reference 2016-06-22 15:50:59 +03:00
Ilya Kitaev 7b7cf21644 commented regex 2016-06-22 15:06:19 +03:00
Ilya Kitaev eec0f57d60 Typo fixed 2016-06-22 14:37:53 +03:00
luigi1111 d7189600ae
remove POSIX_C_SOURCE and remove dlfcn.h for static builds
The former was a faulty "fix" for gmtime_r not existing on Windows. The latter is needed only for dynamic builds, and is not included with msys2, which ends up fine because Windows is only built static at this time.
2016-06-21 11:16:25 -05:00
Riccardo Spagni de91bb75a1
Merge pull request #870
57dce80 gmtime for Windows (luigi1111)
2016-06-21 09:32:32 +02:00
Riccardo Spagni 8c34cca0f0
Merge pull request #867
f0b85c1 simplewallet: add a status command (moneromooo-monero)
2016-06-21 09:31:50 +02:00
Riccardo Spagni 03477063ba
Merge pull request #868
15c2b69 common: fix build without libunwind (moneromooo-monero)
f72388c CMakeLists: fix build without libunwind (moneromooo-monero)
2016-06-21 09:30:56 +02:00
luigi1111 57dce8083a
gmtime for Windows
gmtime_r is not available in Windows, use gmtime_s instead. Also change shorthand codes (also not working in Windows).
2016-06-20 18:14:12 -05:00
Ilya Kitaev f1c4a376af Wallet::createTransaction: added mixin_count param 2016-06-20 22:56:30 +03:00
moneromooo-monero 15c2b69db7
common: fix build without libunwind 2016-06-20 19:23:32 +01:00
moneromooo-monero f0b85c1631
simplewallet: add a status command
It matches the daemon, and should allow people who're suspicious
of the background refresh to know they're synced.
2016-06-20 19:11:10 +01:00
Riccardo Spagni 21b3a1b43c
Merge pull request #863
0c6e9e4 rpc: fix getblock RPC sending blob as binary, not hex dump (moneromooo-monero)
2016-06-19 21:52:35 +02:00
Riccardo Spagni 2072c642d1
Merge pull request #862
5dc09f2 wallet_rpc_server: fix some string values being returned between <> (moneromooo-monero)
f8213c0 Require 64/16 characters for payment ids (moneromooo-monero)
2016-06-19 21:51:32 +02:00
Riccardo Spagni 551d44a989
Merge pull request #856
c5f00bc cn_deserialize: add minergate data (moneromooo-monero)
2470b20 cn_deserialize: print extra nonce as hex data (moneromooo-monero)
77d8fc3 tx_extra: parse new chunk added by minergate (blashyrkh)
2016-06-19 21:30:20 +02:00
Riccardo Spagni ba61f37f9c
Merge pull request #846
de030d9 fix: error: -Werror=misleading-indentation (moneroexample)
c2d7300 contrib: epee: add exception spec to throwing destructors (redfish)
6898741 src: p2p: add exception spec to throwing destructors (redfish)
21dbc95 crypto: slow-hash: fix misleading indent (redfish)
70f3634 crypto: slow-hash: remove unused hash list for ARM (redfish)
1a7772f crypto: oaes_lib: remove unused _NR array (redfish)
6462a3a crypto: fix compile error: use named type in sizeof (redfish)
2016-06-19 21:25:52 +02:00
Riccardo Spagni e97d96ccfb
Merge pull request #775
e409e59 Print stack trace on exceptions (moneromooo-monero)
ef4ff42 connection_basic: avoid gratuitous exception (moneromooo-monero)
2016-06-19 21:14:11 +02:00
moneromooo-monero 5dc09f2666
wallet_rpc_server: fix some string values being returned between <> 2016-06-19 17:52:46 +01:00
Ilya Kitaev 3318addafa double/string to monero integer convertion methods 2016-06-16 16:42:33 +03:00
moneromooo-monero 0c6e9e4ddd
rpc: fix getblock RPC sending blob as binary, not hex dump 2016-06-10 17:48:19 +01:00
Ilya Kitaev 3ac20a46b3 wallet::default_mixin exposed to public interface as
Wallet::setDefaultMixin, Wallet::defaultMixin;
wallet::create_transaction_2 used in Wallet::createTransaction
2016-06-10 13:52:10 +03:00
Ilya Kitaev c554055ce4 Wallet::filename, Wallet::keysFilename, tests for move wallet 2016-06-10 12:51:09 +03:00
moneromooo-monero c5f00bc751
cn_deserialize: add minergate data 2016-06-06 18:51:36 +01:00
moneromooo-monero 2470b20029
cn_deserialize: print extra nonce as hex data 2016-06-06 18:51:10 +01:00
blashyrkh 77d8fc3344
tx_extra: parse new chunk added by minergate
Patch from blashyrkh on forum.getmonero.org:
https://forum.getmonero.org/5/support/2530/simplewallet-returns-invalid-paymentid
2016-06-06 18:29:16 +01:00
Ilya Kitaev 8f9d98b3e0 removed unused "using" 2016-06-03 16:56:13 +03:00
Ilya Kitaev 2facbe77e4 Wallet API : WalletManager::findWallets() added 2016-06-03 14:52:58 +03:00
Ilya Kitaev bc4584c1ff Merge remote-tracking branch 'upstream/master' 2016-05-27 11:33:08 +03:00
Ilya Kitaev 4327548915 installing wallet_api header 2016-05-27 10:58:07 +03:00
Ilya Kitaev d43ad22595 all wallet dependencies merged to single static lib 2016-05-27 10:00:01 +03:00
redfish 95be58ef0e crypto: slow-hash: disable mul implemented in asm for ARM
The implementation of mul in asm breaks 'slow-hash' test when built with
GCC 6.1.1.  Disable this implementation in favor of plain C until it is
fixed.
2016-05-25 15:53:29 -04:00
redfish 68987416ad src: p2p: add exception spec to throwing destructors
The destructors get a noexcept(true) spec by default, but these
destructors in fact throw exceptions. An alternative fix might be to not
throw (most if not all of these throws are non-essential
error-reporting/logging).
2016-05-18 01:02:21 -04:00
redfish 21dbc95b47 crypto: slow-hash: fix misleading indent
GCC warned about this one.
2016-05-18 01:02:17 -04:00
redfish 70f363401b crypto: slow-hash: remove unused hash list for ARM
This list is already defined within the function. The
removed definition was shadowed.
2016-05-18 01:02:13 -04:00
redfish 1a7772fbae crypto: oaes_lib: remove unused _NR array 2016-05-18 01:02:07 -04:00
redfish 6462a3a6db crypto: fix compile error: use named type in sizeof
Btw, the warning 4200 remains disabled, but it did not get triggered
(GCC 6.1.1, ARM). But, perhaps a better way than disabling
the warning would be to do what is suggested here:
http://stackoverflow.com/questions/3350852/how-to-correctly-fix-zero-sized-array-in-struct-union-warning-c4200-without%3E
2016-05-18 01:01:58 -04:00
Riccardo Spagni a837c9cb0f
Merge pull request #842
d539be3 crypto: make clear generate_random_bytes is not thread safe (moneromooo-monero)
2016-05-17 19:09:57 +02:00
Riccardo Spagni f03def87ad
Merge pull request #840
1c0bffb Restrict also 'get_connections' and 'getbans' APIs. (osensei)
9f8bc49 Don't allow 'flush_txpool' and 'setbans' JSON_RPC methods when running in restricted mode. (osensei)
2016-05-17 19:09:11 +02:00
Riccardo Spagni e54e4d96a4
Merge pull request #831
9ef8c7b tests: fix tests broken by the removal of the block reward accumulation loop (moneromooo-monero)
a6e717e cn_deserialize: deserialize tx_extra too (moneromooo-monero)
3eff37f unit_tests: add a write_varint/read_varint test (moneromooo-monero)
7a66387 unit_tests: fix UNBOUND_LIBRARIES/UNBOUND_LIBRARY typo (moneromooo-monero)
d6bce4b core: move tx_extra parsing errors to log level 1 (moneromooo-monero)
2016-05-17 19:07:28 +02:00
Riccardo Spagni ae205020f6
Merge pull request #827
f1e70d1 Only log 1/N skipped blocks (Howard Chu)
cebb97c Move refresh height to keys file from cache file (Howard Chu)
590c439 Make fast_refresh interruptible (Howard Chu)
687855d Set refresh height earlier (Howard Chu)
2fb00c0 Fix 19fe8ae3ef (Howard Chu)
2016-05-17 19:04:41 +02:00
osensei 1c0bffb5f0 Restrict also 'get_connections' and 'getbans' APIs. 2016-05-16 08:34:15 -03:00
Ilya Kitaev 40087a745f WalletListener::moneySpent test 2016-05-16 13:11:44 +03:00
moneromooo-monero d539be3359
crypto: make clear generate_random_bytes is not thread safe
And add a thread safe version to encourage proper use
2016-05-15 00:05:59 +01:00
osensei 9f8bc4946b Don't allow 'flush_txpool' and 'setbans' JSON_RPC methods when running in restricted mode. 2016-05-14 03:06:04 -03:00
Ilya Kitaev 27d86b73c6 WalletListener::moneySpent(), WalletListener::moneyReceived() 2016-05-13 16:25:31 +03:00
Ilya Kitaev ff52c67aa9 i_wallet_callback: virtual dtor 2016-05-13 12:59:29 +03:00
Ilya Kitaev 2d799097ca Merge remote-tracking branch 'upstream/master' 2016-05-12 15:14:30 +03:00
Ilya Kitaev 5dbd2b8fc3 started WalletListener 2016-05-05 22:24:00 +03:00
Ilya Kitaev 71131a84ea TransactionHistory continued 2016-05-05 21:30:25 +03:00
moneromooo-monero 9ef8c7b694
tests: fix tests broken by the removal of the block reward accumulation loop
The tests for rejection of unmixable outputs in v2 are commented out,
as there are no unmixable outputs created anymore. This should be
restored at some point.
2016-05-01 20:59:41 +01:00
moneromooo-monero a6e717ed30
cn_deserialize: deserialize tx_extra too 2016-05-01 11:42:48 +01:00
moneromooo-monero d6bce4be36
core: move tx_extra parsing errors to log level 1
They're not fatal, though indicate something wrong
2016-05-01 11:35:06 +01:00
Riccardo Spagni 30dce45643 Merge branch 'performance' of https://github.com/LMDB/bitmonero 2016-04-29 21:41:43 +02:00
Howard Chu f1e70d15ca Only log 1/N skipped blocks 2016-04-29 16:50:51 +01:00
Howard Chu cebb97c913 Move refresh height to keys file from cache file 2016-04-29 15:33:28 +01:00
Howard Chu 590c43988c Make fast_refresh interruptible 2016-04-29 15:33:28 +01:00
Howard Chu 687855d658 Set refresh height earlier
Do it before the generate() call so the value actually gets stored.
2016-04-29 15:33:28 +01:00
Ilya Kitaev 93119344ec TransactionHistory continued 2016-04-29 16:26:14 +03:00
Riccardo Spagni 8b0d22a2aa
Merge pull request #826
76c6bf1 simplewallet: display all settings on set with no arguments (moneromooo-monero)
2016-04-29 10:44:59 +02:00
Riccardo Spagni 5b734c2a3a
Merge pull request #825
513a658 add a --max-concurrency flag (moneromooo-monero)
2016-04-29 10:43:48 +02:00
Howard Chu 2fb00c0666 Fix 19fe8ae3ef
Don't prompt for restore-height on generate-new-wallet
2016-04-29 04:51:02 +01:00
moneromooo-monero e409e59d29
Print stack trace on exceptions
if libunwind is found.

Useful for debugging logs.
2016-04-28 23:34:51 +01:00
moneromooo-monero 76c6bf1875
simplewallet: display all settings on set with no arguments 2016-04-28 22:09:49 +01:00
moneromooo-monero 513a658c87
add a --max-concurrency flag
It sets the max number of threads to use for a parallel job.
This is different that the number of total threads, since monero
binaries typically start a lot of them.
2016-04-28 20:33:59 +01:00
moneromooo-monero 09dddf281a
wallet: add a filter_by_height field to get_transfers
It allows a simple get_transfers (with default 0 min_height and
max_height) to return all transactions, instead of the unexpected
set of txes in block 0, which is probably none at all.
2016-04-27 23:43:39 +01:00
Riccardo Spagni bdb93cbf3d
Merge pull request #823
a687e6e simplewallet: fix pending transfers fee display in show_transfers (moneromooo-monero)
2016-04-27 09:18:28 +02:00
Riccardo Spagni 29b2cfa3d9
Merge pull request #822
48ab3f9 wallet: add get_transfers rpc call (moneromooo-monero)
2016-04-27 09:15:15 +02:00
moneromooo-monero a687e6e592
simplewallet: fix pending transfers fee display in show_transfers 2016-04-26 22:42:26 +01:00
moneromooo-monero d7bb1752eb
simplewallet: more threading fixes 2016-04-26 22:40:57 +01:00
moneromooo-monero 48ab3f93ff
wallet: add get_transfers rpc call
Allows getting in, out, pending, and failed transfers, similarly
to the show_transfers command.
2016-04-26 22:39:52 +01:00
moneromooo-monero 7baed9bd89
wallet: allow attaching notes to txids 2016-04-26 19:07:33 +01:00
moneromooo-monero ce6f8a6324
wallet: add GMT timestamps to transfers/payments 2016-04-26 19:07:25 +01:00
Riccardo Spagni 3d984854a6
Merge pull request #819
31587bd random: call abort(3) instead of assert in must_succeed macro (moneromooo-monero)
2016-04-26 18:11:04 +02:00
Riccardo Spagni cde9dce9c4
Merge pull request #817
4b1c0d6 simplewallet: some background refresh threading fixes (moneromooo-monero)
2016-04-26 18:08:59 +02:00
Riccardo Spagni 714dcc2866
Merge pull request #815
b0850a9 wallet: add a new sweep_all command and RPC command (moneromooo-monero)
2016-04-26 18:08:09 +02:00
Riccardo Spagni 7098ad6804
Merge pull request #814
68cbe15 	modified:   src/wallet/wallet2.cpp 	modified:   src/wallet/wallet2.h (awfulcrawler)
4b325bd 	modified:   src/simplewallet/simplewallet.cpp 	modified:   src/wallet/wallet2.cpp 	modified:   src/wallet/wallet2.h (awfulcrawler)
2016-04-26 18:04:00 +02:00
Riccardo Spagni fbfb8f46a9
Merge pull request #813
70c8656 blockchain: add missing overflow check for already generated coins (moneromooo-monero)
d6fd6be blockchain: update cumulative block limit when popping a block (moneromooo-monero)
2016-04-26 18:03:31 +02:00
Riccardo Spagni 0fb0e7701b
Merge pull request #812
3102feb abstract_tcp_server2: fix send queue limit warning spam (moneromooo-monero)
6bca9a8 abstract_tcp_server2: avoid deadlock waiting for send queue to drain (moneromooo-monero)
7450656 net_node: fix connection leak when ping fails with bad response (moneromooo-monero)
2016-04-26 18:02:57 +02:00
Riccardo Spagni 0922ae2b43
Merge pull request #811
672162d tests: fix compile failure on wallet2::transfer (moneromooo-monero)
b0c18ef wallet2: move output selection api public (moneromooo-monero)
2016-04-26 18:02:26 +02:00
Ilya Kitaev 566166aafd merged with upstream 2016-04-26 13:46:20 +03:00
Ilya Kitaev dce5374660 Merge remote-tracking branch 'upstream/master' into develop 2016-04-26 11:08:40 +03:00
Howard Chu 2b0fa05f0d Another take on migration
Delete old indices and recreate them, rather than updating them
Maybe not quite as slow as before.
2016-04-24 17:46:50 +01:00
moneromooo-monero 31587bdd15
random: call abort(3) instead of assert in must_succeed macro
Avoids silent use of bad RNG in release builds, in case those
calls might actually fail.

Reported by smooth.
2016-04-24 12:26:56 +01:00
Ilya Kitaev 53a97bdcd3 Wallet API: transaction history in progress 2016-04-22 13:33:09 +03:00
Ilya Kitaev 02c9df5de2 Wallet API : transaction history in progress 2016-04-22 13:21:08 +03:00
moneromooo-monero 4b1c0d69f4
simplewallet: some background refresh threading fixes
We want to lock operations which access the blockchain in
wallet2. We also want the background refresh to happen again
when we cancel a foreground refresh. Wrap the locking setup
in a macro so it doesn't get copy/pasted/mangled, and use
a scope exit trick to ensure it's always properly restored.
2016-04-21 00:11:11 +01:00
Ilya Kitaev a213887476 transaction history api in progress 2016-04-20 13:33:54 +03:00
Ilya Kitaev b6aaf53a60 transaction history api in progress 2016-04-20 13:17:27 +03:00
Ilya Kitaev f83f3cbd96 api implementation splitted over separate files 2016-04-20 13:01:00 +03:00
moneromooo-monero b0850a9bea
wallet: add a new sweep_all command and RPC command
This sends all outputs in a wallet to a given address, alleviating
the difficulty people have had trying to send all monero but
being left with some small amount left.
2016-04-19 21:20:27 +01:00
Ilya Kitaev 4e1c2dc365 TransactionInfo / TransactionHistory APIs design 2016-04-19 12:25:03 +03:00
awfulcrawler 68cbe1579e modified: src/wallet/wallet2.cpp
modified:   src/wallet/wallet2.h

Removed working comments
2016-04-18 20:20:31 +12:00
awfulcrawler 4b325bdb66 modified: src/simplewallet/simplewallet.cpp
modified:   src/wallet/wallet2.cpp
	modified:   src/wallet/wallet2.h

Update to fix unconfirmed balance and give a slightly more verbose and informative confirmation message for transfers
2016-04-18 14:57:47 +12:00
Howard Chu 19fe8ae3ef Add --restore-height option
For specifying the block height from which to start a restore
2016-04-17 15:25:46 +01:00
Howard Chu b6e42c3276 Speed up new wallet refresh
Use the current blockchain height as the refresh_from_block_height.
2016-04-17 15:25:46 +01:00
Howard Chu b7140daea2 Add GET_HASHES_FAST rpc, use it in wallet
When m_refresh_from_block_height has been set, only hashes will be
retrieved up to that height, instead of full blocks. The same will
be done for "refresh <height>" when the specified height is beyond
the current local blockchain.
2016-04-17 15:25:46 +01:00
moneromooo-monero 70c86561af
blockchain: add missing overflow check for already generated coins
When reaching the tail emission phase, the amount of coins will
eventually go over MONEY_SUPPLY, overflowing 64 bits. There was
a check added to blockchain_storage, but this was not ported to
the blockchain DB version.

Reported by smooth.
2016-04-17 14:46:17 +01:00
moneromooo-monero d6fd6be5de
blockchain: update cumulative block limit when popping a block
Avoids possible issues with accepting a tx too large to fit
in an actual block.

Reported by smooth.
2016-04-17 14:46:13 +01:00
moneromooo-monero 7450656bf3
net_node: fix connection leak when ping fails with bad response
If there is no comms error, but the response is not as expected,
close would not be called.
2016-04-17 11:24:07 +01:00
moneromooo-monero b0c18ef9cd
wallet2: move output selection api public 2016-04-17 11:20:44 +01:00
Riccardo Spagni 1c66fe04bc
Merge pull request #803
c33ffc8 simplewallet: save fixes in RPC mode (moneromooo-monero)
2016-04-14 16:26:46 +09:00
Riccardo Spagni 0ecb152810
Merge pull request #785
1a58d20 simplewallet: optional address in --generate-from-json (moneromooo-monero)
2016-04-14 16:26:11 +09:00
Riccardo Spagni 8f78f1407e
Merge pull request #784
087373e Fix potential race with parallel processing of txes/signatures/blocks (moneromooo-monero)
2016-04-14 16:25:53 +09:00
Riccardo Spagni 6bfb8799c3
Merge pull request #783
48d0747 wallet: better output selection for transfer/transfer_new (moneromooo-monero)
2016-04-14 16:25:38 +09:00
Riccardo Spagni 17049fa8e8
Merge pull request #782
113cdc1 core: keep the acc loop for the genesis block (moneromooo-monero)
2016-04-14 16:25:18 +09:00
Riccardo Spagni a299e5269b
Merge pull request #801
ed61a2c simplewallet: set strict umask at start (moneromooo-monero)
7385c03 util: add a function to set umask to 077 (moneromooo-monero)
2016-04-14 16:21:29 +09:00
Riccardo Spagni 784a2108f4
Merge pull request #800
4cfb4df blockchain: remove the tx validation result cache (moneromooo-monero)
2016-04-14 16:21:08 +09:00
Riccardo Spagni c2e9866fc6
Merge pull request #797
d662ab5 rpc: print human readable time since received when printing pool (moneromooo-monero)
5c9dd23 rpc: add a do_not_relay boolean to tx submission (moneromooo-monero)
2016-04-14 16:20:41 +09:00
Riccardo Spagni da277e17b5
Merge pull request #796
d817aec tx_pool: ensure no txes that fail check_inputs get in the block template (moneromooo-monero)
2016-04-14 16:20:17 +09:00
Ilya Kitaev 1774d9574b TODOs for Transaction/Transfer interface 2016-04-12 22:30:20 +03:00
moneromooo-monero c33ffc8e94
simplewallet: save fixes in RPC mode
^C when in RPC mode would not save the wallet while it was still
refreshing after starting up.

Also, save the wallet out of the signal handler. We don't want
to call complex stuff in a signal handler.
2016-04-10 16:56:12 +01:00
moneromooo-monero f17b2f42b2
rpc: add pool/blockchain and block height results to gettransactions 2016-04-09 12:40:32 +01:00
Howard Chu c14f9efd52 Migration
Migrate from DB version 0 to version 1 on startup
2016-04-08 03:11:05 +01:00
moneromooo-monero ed61a2ccc1
simplewallet: set strict umask at start 2016-04-06 20:00:25 +01:00
moneromooo-monero 7385c036bd
util: add a function to set umask to 077
Useful to ensure files are written without group/other read rights.
2016-04-06 19:59:34 +01:00
moneromooo-monero 4cfb4dff3e
blockchain: remove the tx validation result cache
As pointed out by smooth, a transaction's validity may change
over time as the blockchain changes.
2016-04-06 19:01:28 +01:00
Ilya Kitaev d97e9ef8a5 Transaction API continued 2016-04-06 13:56:57 +03:00
moneromooo-monero 1aad759bf1
tx_pool: fix (hopefully) save/load of kept_by_block 2016-04-06 00:11:31 +01:00
Howard Chu d7ea7d9a23 Merge branch 'performance' into master 2016-04-05 21:13:16 +01:00
Howard Chu 372acee723 Cleanup
drop obsolete remove_output()
fix get_output_key(global), fix crash in blockchain_dump
2016-04-05 21:05:24 +01:00
Howard Chu 591e421875 Cleanup and clarify
Try to rationalize the variable names, document usage.
2016-04-05 20:57:45 +01:00
Howard Chu b2f1c58805 Use cursors in some remove functions
Helps when they're called repeatedly in one txn
2016-04-05 20:57:31 +01:00
Howard Chu 118dd69dd5 Use DUPFIXED for block_info and output_txs
Saves another ~150MB or so on the full blockchain
2016-04-05 20:55:16 +01:00
Howard Chu 6225716f3c More outputs consolidation
Also bumped DB VERSION to 1
Another significant speedup and space savings:
Get rid of global_output_indices, remove indirection from output to keys

This is the change warptangent described on irc but never got to finish.
2016-04-05 20:55:12 +01:00
Howard Chu 7c5abdc3a3 Use DUPFIXED for output_keys
Saves another 90MB on 200000 block import.
Had to bring back compare_uint64 for this, but it's safe since
this table is always 64-bit aligned.
2016-04-05 20:54:42 +01:00
Howard Chu 8e9d8e3364 Use DUPFIXED for tx_indices
Small space savings, no measurable speedup
2016-04-05 20:54:39 +01:00
Howard Chu a12f9365f8 Use DUPFIXED for block_heights
Only a small savings...
2016-04-05 20:54:07 +01:00
Howard Chu 38c2277d6f Use DUPFIXED for spent_keys 2016-04-05 20:54:07 +01:00
warptangent bf769c32ba Add back changes from revert.
m_tx_outputs doesn't need to be changed, as it's no longer dup list.
2016-04-05 20:54:07 +01:00
warptangent 46b991b362 Use MDB_APPEND mode with two tx subdbs
This is possible on those using a tx index as a key.
2016-04-05 20:54:07 +01:00
warptangent 9aadedb1d0 Schema update: tx_indices - consolidate the tx subdbs from 5 to 3 2016-04-05 20:54:06 +01:00
warptangent a2f518aa01 Schema update: tx_indices - yet less indirection 2016-04-05 20:54:06 +01:00
warptangent 8d12a8df2c Schema update: tx_indices - improve further with less indirection 2016-04-05 20:54:06 +01:00
warptangent 7c013f66e9 Add batch warning for further review 2016-04-05 20:54:06 +01:00
warptangent ae0854a431 Schema update: tx_indices 2016-04-05 20:54:06 +01:00
Howard Chu 8d252a4214 Consolidated block info 2016-04-05 20:53:59 +01:00
warptangent 132c666f67 Update schema for "tx_outputs" to use array containing amount output indices
This speeds up wallet refresh by directly retrieving a tx's amount output indices.

It removes the indirection and walking the amount output duplicate list
for every amount in each requested tx.

"tx_outputs" is used by:
Amount output indices are needed for wallet refresh.
Global output indices are needed for removing a tx.

Both amount output indices and global output indices are now stored in
an array of 64-bit unsigned ints:

tx_outputs[<tx_hash>] -> [ <a1_oi, a1_gi, a2_oi, a2_gi, ...> ]

Previously it was:
tx_outputs[<tx_hash>] -> duplicate list of <a1_gi, a2_gi, a3_gi, ...>

The amount output list had to be walked for every amount in order to
find each amount's output index, by comparing the amount's global output
index with each one in the duplicate list until a match was found.

See also d045dfa7ce
2016-04-05 20:30:50 +01:00
warptangent 309f8f3d44 blockchain_utilities: Update documentation 2016-04-05 20:30:50 +01:00
luigi1111 7ac1db42c2 get_payments short ID
Add support for short/integrated/encrypted IDs to get_payments RPC
2016-04-05 20:30:50 +01:00
moneromooo-monero d662ab5cec
rpc: print human readable time since received when printing pool 2016-04-05 20:16:05 +01:00
moneromooo-monero 5c9dd23b1c
rpc: add a do_not_relay boolean to tx submission
Just to make it easier
2016-04-05 20:15:54 +01:00
Ilya Kitaev 079fbd3d42 Wallet::createTransaction API introduced 2016-04-05 15:24:44 +03:00
moneromooo-monero d817aeca80
tx_pool: ensure no txes that fail check_inputs get in the block template 2016-04-05 13:06:29 +01:00
Ilya Kitaev ee5bb17f26 Wallet::transfer() continued 2016-04-04 14:56:17 +03:00
Ilya Kitaev c37c856d6d Wallet::transfer in progress 2016-04-03 14:34:38 +03:00
moneromooo-monero 1a58d202b2
simplewallet: optional address in --generate-from-json
When present, it can be used to validate the keys, as well
as deduce the spend key, if it is absent (watch wallet).
2016-04-02 15:22:59 +01:00
moneromooo-monero 087373eccf
Fix potential race with parallel processing of txes/signatures/blocks 2016-04-02 14:20:51 +01:00
moneromooo-monero 48d0747d00
wallet: better output selection for transfer/transfer_new
This now requests the set of outputs that can be mixed first,
to avoid trying non dust but unmixable outputs, which we know
will fail.
2016-04-02 14:17:02 +01:00
moneromooo-monero 113cdc10a2
core: keep the acc loop for the genesis block
For unknown reasons, it was generated with a block reward
consisting of a single large dusty output.
2016-04-02 11:17:49 +01:00
Riccardo Spagni a42e19e1b7
bumped version number 2016-04-02 12:21:59 +09:00
Riccardo Spagni cc54e2764a
Merge pull request #779
daac1cc core: remove the block reward accumulation loop (moneromooo-monero)
2016-04-02 12:05:57 +09:00
Riccardo Spagni dea1aa75bc
Merge pull request #778
efbdde2 Detect map resize failures (Howard Chu)
2016-04-02 12:05:40 +09:00
Riccardo Spagni ab43e80331
Merge pull request #777
8757e46 add blockhashing blob to getblocktemplate (Howard Chu)
2016-04-02 12:05:07 +09:00
Riccardo Spagni b22f550c67
Merge pull request #772
ead6956 simplewallet: always gracefully exit on EOF (moneromooo-monero)
2016-04-02 12:03:25 +09:00
Riccardo Spagni 4ac6bdbb3f
Merge pull request #769
b4eada9 wallet: make load_keys check types when loading JSON (moneromooo-monero)
3e55725 wallet: make the JSON reading type safe (moneromooo-monero)
f8d05f3 common: new json_util.h (moneromooo-monero)
2016-04-02 12:02:49 +09:00
Riccardo Spagni a38ad63f8f
Merge pull request #767
24b3e90 Convey tx verification failure reasons to the RPC client (moneromooo-monero)
2016-04-02 12:02:07 +09:00
Riccardo Spagni f68670a80e
Merge pull request #766
77d1c6b simplewallet: default to trusted daemon for loopback address (moneromooo-monero)
2016-04-02 12:01:29 +09:00
Riccardo Spagni 44559ca4b0
Merge pull request #764
f746c9d minor corrections/clarifications (Thomas Winget)
c6bb201 Transaction pool documentation (and some cleanup) (Thomas Winget)
2016-04-02 12:01:15 +09:00
moneromooo-monero daac1cc259
core: remove the block reward accumulation loop
This can generate non decomposed outputs for very large block
rewards (or not so large ones if a miner decides to not quantize
the block rewards). Out of an abundance of caution, we refuse
to generate those. They are still accepted by the consensus code,
however.
2016-04-01 21:42:19 +01:00
Ilya Kitaev 830c19c934 Wallet::refresh + tests 2016-03-31 16:38:57 +03:00
Ilya Kitaev 1ae9cdc6bf "testnet" is default parameter 2016-03-31 15:39:28 +03:00
Ilya Kitaev 2157a9ac48 testnet option, Wallet::balance(), Wallet::unlockedBalance() 2016-03-31 12:48:41 +03:00
Ilya Kitaev df6026182a Merge remote-tracking branch 'upstream/master' 2016-03-31 12:01:19 +03:00
Howard Chu efbdde2c66 Detect map resize failures 2016-03-30 20:37:28 +01:00
Thomas Winget f746c9d01b
minor corrections/clarifications 2016-03-30 11:55:54 -04:00
Howard Chu 8757e46b78 add blockhashing blob to getblocktemplate 2016-03-30 16:54:36 +01:00
moneromooo-monero ead6956080
simplewallet: always gracefully exit on EOF 2016-03-29 17:52:45 +01:00
moneromooo-monero ef4ff4252a
connection_basic: avoid gratuitous exception
The remote endpoint is usually invalid, so use a version of the
call that returns an error code instead.
2016-03-28 18:59:09 +01:00
moneromooo-monero 878ab5d896
wallet: fix --generate-from-keys saving as watch only 2016-03-28 16:46:37 +01:00
moneromooo-monero b4eada907c
wallet: make load_keys check types when loading JSON 2016-03-27 23:39:34 +01:00
moneromooo-monero 3e557254c7
wallet: make the JSON reading type safe 2016-03-27 23:39:17 +01:00
moneromooo-monero f8d05f3cd9
common: new json_util.h
With code to help factor out reading typed fields from JSON
2016-03-27 23:35:32 +01:00
Riccardo Spagni 2b57845766
Merge pull request #765
d5d46e6 tests: obligatory hardfork unit build fix after interface change (moneromooo-monero)
25672d3 wallet: pass std::function by const ref, not value (moneromooo-monero)
0be6e08 wallet: do not leak owned amounts to the daemon unless --trusted-daemon (moneromooo-monero)
12146da wallet: change sweep_dust to sweep_unmixable (moneromooo-monero)
600a3cf New RPC and daemon command to get output histogram (moneromooo-monero)
f9a2fd2 wallet: handle rare case where fee adjustment can bump to the next kB (moneromooo-monero)
f26651a wallet: factor fee calculation (moneromooo-monero)
2016-03-27 14:09:53 +02:00
moneromooo-monero 24b3e9007a
Convey tx verification failure reasons to the RPC client
This allows appropriate action to be taken, like displaying
the reason to the user.

Do just that in simplewallet, which should help a lot in
determining why users fail to send.

Also make it so a tx which is accepted but not relayed is
seen as a success rather than a failure.
2016-03-27 12:37:18 +01:00
moneromooo-monero 77d1c6b672
simplewallet: default to trusted daemon for loopback address 2016-03-27 11:00:15 +01:00
moneromooo-monero 25672d3f10
wallet: pass std::function by const ref, not value
Because we can.
2016-03-26 23:32:45 +00:00
moneromooo-monero 0be6e08dd0
wallet: do not leak owned amounts to the daemon unless --trusted-daemon
This will be slower, though more private.

New trusted_daemon parameter to the matching RPC call, false by default.
2016-03-26 23:29:29 +00:00
moneromooo-monero 12146daeed
wallet: change sweep_dust to sweep_unmixable
With the change in mixin rules for v2, the "annoying" outputs are
slightly changed. There is high correlation between dust and
unmixable, but no equivalence.
2016-03-26 21:15:47 +00:00
moneromooo-monero 600a3cf0c0
New RPC and daemon command to get output histogram
This is a list of existing output amounts along with the number
of outputs of that amount in the blockchain.

The daemon command takes:
- no parameters: all outputs with at least 3 instances
- one parameter: all outputs with at least that many instances
- two parameters: all outputs within that many instances

The default starts at 3 to avoid massive spamming of all dust
outputs in the blockchain, and is the current minimum mixin
requirement.

An optional vector of amounts may be passed, to request
histogram only for those outputs.
2016-03-26 21:10:43 +00:00
moneromooo-monero f9a2fd2ff5
wallet: handle rare case where fee adjustment can bump to the next kB
It resulted in a tx being sent with too low a fee, and thus rejected.
2016-03-26 11:51:58 +00:00
moneromooo-monero f26651ab8a
wallet: factor fee calculation 2016-03-26 11:44:43 +00:00
moneromooo-monero b8527668ff
blockchain: for v3, require miner tx to have well behaved outs
This was meant to go in v2, but the miner tx slipped through
the cracks as it doesn't go through the main tx verification
since it doesn't get added to the pool.
2016-03-25 15:11:53 +00:00
moneromooo-monero 97638b1fb7
core: fix miner tx block reward with fees 2016-03-25 15:11:45 +00:00
Ilya Kitaev 8790904cf9 - testnet option added to api; 2016-03-25 17:06:30 +03:00
Riccardo Spagni 287e88283c
remove connectivity tool, comment it out from munin plugins too 2016-03-25 14:52:19 +02:00
Riccardo Spagni 0d30b65785 Merge pull request #749
bfd4a28 Update BlockchainDB documentation (Thomas Winget)
797357e Change Doxyfile, Blockchain not blockchain_storage (Thomas Winget)
c835215 remove defunct code from cryptonote::core (Thomas Winget)
50dba6d cryptonote::core doxygen documentation (Thomas Winget)
8ac329d doxygen documentation for difficulty functions (Thomas Winget)
540a76c Move checkpoint functions into checkpoints class (Thomas Winget)
1b0c98e doxygen documentation for checkpoints.{h,cpp} (Thomas Winget)
89c24ac Remove unnecessary or defunct code (Thomas Winget)
ab0ed14 doxygen include private and static members (Thomas Winget)
3a48449 Updated documentation for blockchain.* (Thomas Winget)
2016-03-25 09:12:25 +02:00
Riccardo Spagni 01e0a69c17 Revert "Merge pull request #749"
This reverts commit 7fa63a82a1, reversing
changes made to cb6be986c3.
2016-03-25 08:42:42 +02:00
Riccardo Spagni 40b8a5f327
Merge pull request #756
a2e378b wallet: add a --generate-from-json flag (moneromooo-monero)
2016-03-25 08:27:42 +02:00
Riccardo Spagni 7fa63a82a1
Merge pull request #749
bfd4a28 Update BlockchainDB documentation (Thomas Winget)
797357e Change Doxyfile, Blockchain not blockchain_storage (Thomas Winget)
c835215 remove defunct code from cryptonote::core (Thomas Winget)
50dba6d cryptonote::core doxygen documentation (Thomas Winget)
8ac329d doxygen documentation for difficulty functions (Thomas Winget)
540a76c Move checkpoint functions into checkpoints class (Thomas Winget)
1b0c98e doxygen documentation for checkpoints.{h,cpp} (Thomas Winget)
89c24ac Remove unnecessary or defunct code (Thomas Winget)
ab0ed14 doxygen include private and static members (Thomas Winget)
3a48449 Updated documentation for blockchain.* (Thomas Winget)
2016-03-25 08:22:06 +02:00
Riccardo Spagni cb6be986c3
Merge pull request #748
cc4b19c blockchain: fix partial block reward detection (moneromooo-monero)
2016-03-25 08:20:56 +02:00
moneromooo-monero a2e378b91b
wallet: add a --generate-from-json flag
It takes a filename containing JSON data to generate a wallet.
The following fields are valid:

  version: integer, should be 1
  filename: string, path/filename for the newly created wallet
  scan_from_height: 64 bit unsigned integer, optional
  password: string, optional
  viewkey: string, hex representation
  spendkey: string, hex representation
  seed: string, optional, list of words separated by spaces

Either seed or private keys should be given. If using private
keys, the spend key may be omitted (the wallet will not be
able to spend, but will see incoming transactions).

If scan_from_height is given, blocks below this height will not
be checked for transactions as an optimization.
2016-03-25 00:56:11 +00:00
Thomas Winget c6bb201a07
Transaction pool documentation (and some cleanup)
tx_pool.h doxygen documentation completed.
Many notes made on areas for improvement, be that functionality or
code clarity.
Commented code and unused code removed.
2016-03-24 20:03:02 -04:00
Thomas Winget bfd4a28c41
Update BlockchainDB documentation
BlockchainDB is now Doxygen-compliant and its documentation is
up-to-date with recent changes.
2016-03-24 03:40:04 -04:00
Thomas Winget c835215ea9
remove defunct code from cryptonote::core 2016-03-24 03:39:58 -04:00
Thomas Winget 50dba6d301
cryptonote::core doxygen documentation 2016-03-24 03:39:55 -04:00
Thomas Winget 8ac329df02
doxygen documentation for difficulty functions 2016-03-24 03:39:52 -04:00
Thomas Winget 540a76c5c2
Move checkpoint functions into checkpoints class
The functions in src/cryptonote_core/checkpoints_create.{h,cpp} should
be member functions of the checkpoints class, if nothing else for the
sake of keeping their documentation together.

This commit covers moving those functions to be member functions of the
checkpoints class as well as documenting those functions.
2016-03-24 03:39:41 -04:00
Thomas Winget 1b0c98e7e9
doxygen documentation for checkpoints.{h,cpp}
All functions in src/cryptonote_core/checkpoints.h are now documented in
doxygen style.

checkpoints.cpp has been reviewed, one function has been marked for
discussion on correctness.
2016-03-22 20:23:15 -04:00
Thomas Winget 89c24ac2be
Remove unnecessary or defunct code 2016-03-22 20:23:06 -04:00
Thomas Winget 3a484497bc
Updated documentation for blockchain.*
All functions are now documented in doxygen format.  Comments have been
updated to reflect the current state of the code.  Many areas for
improvement in clarity and design have been noted, as well as cruft to
be removed.  These changes are not reflected in this commit both to
allow time for comment and to keep commits organized by purpose.
2016-03-22 17:30:21 -04:00