Compare commits

...

106 Commits

Author SHA1 Message Date
Jonathan "Duke" Leto 459cd64a24 still not happy 5 years ago
Jonathan "Duke" Leto b205aa6d1e safe mode is ok 5 years ago
Jonathan "Duke" Leto 7659972da4 fix compile 5 years ago
Jonathan "Duke" Leto ded7b28ac0 more stuff 5 years ago
Jonathan "Duke" Leto a804fb4dba Merge z_viewtransaction from str4d zcash PR4146 5 years ago
Jonathan "Duke" Leto eb55f2b8c3 clean up some unused files 5 years ago
Jonathan "Duke" Leto e26cced916 clean up some unused files 5 years ago
Jonathan "Duke" Leto c770445168 bump version 5 years ago
Jack Grigg 982d7daba6 Ignore exceptions when deserializing note plaintexts 5 years ago
Duke Leto 0b88e9c2e8 Fix binary names for debian packages 5 years ago
Duke Leto 728959886a add docs about making .deb's 5 years ago
Duke Leto f5be29c97e Merge branch 'debian' into dev 5 years ago
Duke Leto 34ac6cbe60 update changelog 5 years ago
Duke Leto 901faee104 add unix man pages for hush 5 years ago
Duke Leto 91fdc1991c Add sapling params to debian package and prevent some lintian warnings 5 years ago
Duke Leto e02628a57c Fix manpage generation 5 years ago
Duke Leto e2d8a7c020 Greatly improve debian package generation script 5 years ago
Duke Leto b940671461 Making debs actually works again 5 years ago
Duke Leto 5d2098ca1a update deb generation script 5 years ago
Duke Leto 73256cc780 get rid of verus junk 5 years ago
Duke Leto f58a76e34c debian stuff 5 years ago
Duke Leto a6eecea14f Merge remote-tracking branch 'origin/dev' into dev 5 years ago
Jonathan "Duke" Leto 2e24035318 Merge branch 'duke' into dev 5 years ago
Jonathan "Duke" Leto 80c0a3b039 Merge remote-tracking branch 'jl777/FSM' into duke 5 years ago
Jonathan "Duke" Leto 0ea6bb5764 Merge branch 'duke' into dev 5 years ago
jl777 cea537ff95
Merge pull request #1694 from jl777/jl777 5 years ago
jl777 34f6908ae6
Merge pull request #1693 from jl777/nSPV 5 years ago
jl777 9fac123016 Don't change adaptivepow to default on: -ADAPTIVEPOW_CHANGETO_DEFAULTON 5 years ago
jl777 6c8947b0b5
Merge pull request #1692 from letolabs/FSM 5 years ago
Jonathan "Duke" Leto 7c7fad183f fix compile 5 years ago
Jonathan "Duke" Leto 6a3e69d344 fix 5 years ago
jl777 6db9e3b9f2 Merge branch 'jl777' into nSPV 5 years ago
jl777 5c80a6656e Merge branch 'FSM' into jl777 5 years ago
jl777 784e93c677 Merge branch 'dev' into FSM 5 years ago
Jonathan "Duke" Leto f686d9288c blockindex bugfix suggested by blackjoker 5 years ago
Jonathan "Duke" Leto 89b2ee896d add missing zstat and new dep 5 years ago
Jonathan "Duke" Leto 13dad469c7 add missing zstat and new dep 5 years ago
Jonathan "Duke" Leto d0d6a9cea9 Merge remote-tracking branch 'jl777/FSM' into duke 5 years ago
Jonathan "Duke" Leto a00c217b75 Merge branch 'duke' into dev 5 years ago
Duke Leto 2390a7e499
Merge pull request #27 from MyHush/ztxstats 5 years ago
jl777 65dd98f02f -prints 5 years ago
Jonathan "Duke" Leto 76543056ab Changing -zindex on or off requires reindex 5 years ago
Jonathan "Duke" Leto c91d1d1fdf Use uints to save RAM/disk on block stats; fix ntz serialization 5 years ago
Jonathan "Duke" Leto 3b49c1d256 Improve ntz detection and serialize to disk 5 years ago
Jonathan "Duke" Leto d03d774c18 Fix zindex flag detection 5 years ago
Jonathan "Duke" Leto b2c03c82a5 Explain about changing heuristics + on-disk data 5 years ago
Jonathan "Duke" Leto 44f34a22e7 more -zindex 5 years ago
Jonathan "Duke" Leto 5c310aa048 Define -zindex 5 years ago
Jonathan "Duke" Leto 5365d15e69 Correct various stats and add block height to response 5 years ago
Jonathan "Duke" Leto 3f94feb836 Shielding+deshielding payments in z-only section 5 years ago
Jonathan "Duke" Leto 80b1479184 Improve shielded-only zstats 5 years ago
Jonathan "Duke" Leto 469c3c9cf2 So many zstats 5 years ago
Jonathan "Duke" Leto 2b3023444d Properly serialize/deserialize new blockindex with zstats 5 years ago
Jonathan "Duke" Leto 1a6c19dc81 Also calc shielded stats on index load 5 years ago
Jonathan "Duke" Leto c9b00ef093 Add chain payments 5 years ago
Jonathan "Duke" Leto 22c0a22926 Compiles, RPC gives back some shielded stats, which have bugs 5 years ago
jl777 4215ba1ce2 -print 5 years ago
jl777 6195f50ea0 Skip initdone 5 years ago
jl777 e3bf886386
Merge pull request #1688 from jl777/FSM 5 years ago
jl777 ebc5339fe2
Merge pull request #1687 from jl777/jl777 5 years ago
jl777 921dcafc2e
Merge pull request #1686 from jl777/nSPV 5 years ago
jl777 8c187928dd Protocol version 3 5 years ago
jl777 8ac5147dd3 4 longs in a hash 5 years ago
jl777 9d4caa8a55 Syntax 5 years ago
jl777 25c87fa94f Encode 8 amounts 5 years ago
jl777 e4073351d4 Return height -1 if tx can't be found 5 years ago
jl777 d654b4136c Syntax 5 years ago
jl777 856e38870c Void * 5 years ago
jl777 094da66e5f Overload mempool txid with last amount, for coinaddr mode 5 years ago
jl777 c257f7834b
Merge pull request #1685 from letolabs/docs2 5 years ago
Jonathan "Duke" Leto 674da4ce68 update dependency installation instructions 5 years ago
Jonathan "Duke" Leto 70eb669e63 Return json data about shielded xtns/payments 5 years ago
Jonathan "Duke" Leto 464251bdc3 Add total payment stats to getchaintxstats 5 years ago
jl777 1b3e4d46d4
Merge pull request #1684 from Mixa84/nSPV 5 years ago
Mihailo Milenkovic a7204d9f85
CC fixes for nSPV and others (#30) 5 years ago
jl777 d8ef27d7a8
Merge pull request #1683 from jl777/FSM 5 years ago
Jonathan "Duke" Leto 6ddcdc2497 Various improvements to shielded transaction and payment stats gathering 5 years ago
jl777 0638c7f079
Merge pull request #1680 from jl777/FSM 5 years ago
Jonathan "Duke" Leto 8db846da67 Improve calculation of shielded stats 5 years ago
Jonathan "Duke" Leto 188b44937b Clean up and improve some definitions of shielded stats; fix some compiler issues 5 years ago
Duke Leto 4831ec41ec Merge remote-tracking branch 'origin/ztxstats' into ztxstats 5 years ago
Duke Leto bfe058f29b Keep track of more zxtn stats 5 years ago
Jonathan "Duke" Leto 65109fba53 Merge branch 'duke' into ztxstats 5 years ago
Duke Leto 5c519f9665 Start teaching hushd to track various stats about shielded xtns 5 years ago
jl777 48064059c5
Merge pull request #1674 from jl777/FSM 5 years ago
jl777 a76df00fe6
Merge pull request #1670 from jl777/FSM 5 years ago
jl777 3e7609633d
Merge pull request #1667 from jl777/kolo 5 years ago
Mihail Fedorov d9df55aad2 Reverting binary var 5 years ago
jl777 0f26b91c0d
Merge pull request #1663 from jl777/FSM 5 years ago
jl777 c5657390e2
Merge pull request #1660 from jl777/FSM 5 years ago
jl777 4bcd9a0b36
Merge pull request #1656 from jl777/FSM 5 years ago
jl777 9016ef63d8
Merge pull request #1655 from jl777/FSM 5 years ago
jl777 3695e84aba
Merge pull request #1651 from jl777/FSM 5 years ago
jl777 d4399190e7
Merge pull request #1641 from KomodoPlatform/dev 5 years ago
ca333 d4a257f616
update RICK & MORTY 5 years ago
ca333 7933de4486
update RICK & MORTY 5 years ago
ca333 d3a82df56b
Merge pull request #199 from jl777/dev 5 years ago
jl777 d493f7d3f6
Merge pull request #1634 from Alrighttt/dev 5 years ago
jl777 64f825c6bb
Merge pull request #1636 from KomodoPlatform/dev 5 years ago
ca333 39f999f960
update logo 5 years ago
ca333 c64a7cbaf2
Merge pull request #198 from jl777/dev 5 years ago
Alrighttt 107307ec7b
Merge pull request #11 from blackjok3rtt2/dev 5 years ago
Alrighttt 0cf9dfe467
Merge pull request #10 from jl777/dev 5 years ago
blackjok3r 0eff14e36b Change mpz_t to use import/export 5 years ago
ca333 4e82836901
Merge pull request #189 from jl777/dev 5 years ago
ca333 41be7b81c8
Merge pull request #186 from jl777/dev 5 years ago
  1. 12
      INSTALL.md
  2. 2
      configure.ac
  3. 240
      contrib/debian/changelog
  4. 5
      contrib/debian/control
  5. 4
      contrib/debian/copyright
  6. 36
      contrib/debian/examples/hush.conf
  7. 129
      contrib/debian/examples/zcash.conf
  8. 1
      contrib/debian/hush.examples
  9. 9
      contrib/debian/hush.install
  10. 2
      contrib/debian/hush.manpages
  11. 2
      contrib/debian/postinst
  12. 2
      contrib/debian/postrm
  13. 2
      contrib/debian/preinst
  14. 2
      contrib/debian/prerm
  15. 1
      contrib/debian/zcash.examples
  16. 3
      contrib/debian/zcash.install
  17. 2
      contrib/debian/zcash.manpages
  18. 27
      contrib/devtools/gen-manpages.sh
  19. 4
      depends/packages/packages.mk
  20. 91
      doc/man/hush-cli.1
  21. 104
      doc/man/hush-tx.1
  22. 637
      doc/man/hushd.1
  23. 13
      doc/man/verus-cli/linux/README.txt
  24. 17
      doc/man/verus-cli/mac/README.txt
  25. 21
      doc/man/verus-cli/windows/README.txt
  26. 525
      src/KMD.batch0.txids
  27. 166
      src/KMD.batch1.txids
  28. 100
      src/KMD.batch2.txids
  29. 97
      src/KMD.batch4.txids
  30. 323
      src/REVS.batch0
  31. 78
      src/REVS.batch1
  32. 25
      src/REVS.batch1.txids
  33. 48
      src/REVS.batch2
  34. 15
      src/REVS.batch2.txids
  35. 44
      src/REVS.batch3
  36. 94
      src/REVS.batch3.txids
  37. 27
      src/REVS.batch4
  38. 107
      src/REVS.batchtxids0
  39. 5492
      src/REVS.raw
  40. 5492
      src/REVS.rawtxids
  41. 5653
      src/REVS.snapshot
  42. 3683
      src/REVS.txids
  43. 5650
      src/REVS.txids0
  44. 3
      src/assetchains
  45. 12
      src/assetchains.json
  46. 4
      src/assetchains.old
  47. 4
      src/assetchains_stop
  48. 6
      src/bitcoind.cpp
  49. 3
      src/cc/CCinclude.h
  50. 2
      src/cc/CCtokens.cpp
  51. 21
      src/cc/CCtx.cpp
  52. 8
      src/cc/CCutils.cpp
  53. 2
      src/cc/channels.cpp
  54. 25
      src/cc/gateways.cpp
  55. 3
      src/cc/oracles.cpp
  56. 40
      src/cc/payments.cpp
  57. 2
      src/cc/pegs.cpp
  58. 128
      src/chain.h
  59. 4
      src/clientversion.h
  60. 10
      src/consensus/upgrades.cpp
  61. 8
      src/cryptoconditions/src/cryptoconditions.c
  62. 3
      src/fiat-cli
  63. 5
      src/hush-cli
  64. 5
      src/hush-cli-testnet
  65. 10
      src/hush-tx
  66. 10
      src/hushd
  67. 10
      src/hushd-testnet
  68. 18
      src/init.cpp
  69. 5
      src/komodo.h
  70. 9
      src/komodo_defs.h
  71. 2
      src/komodo_gateway.h
  72. 2
      src/komodo_nSPV_defs.h
  73. 115
      src/komodo_nSPV_fullnode.h
  74. 17
      src/komodo_nSPV_superlite.h
  75. 15
      src/komodo_nSPV_wallet.h
  76. 217
      src/main.cpp
  77. 2
      src/main.h
  78. 9
      src/net.cpp
  79. 90
      src/rpc/blockchain.cpp
  80. 1
      src/rpc/client.cpp
  81. 2
      src/rpc/misc.cpp
  82. 4
      src/rpc/rawtransaction.cpp
  83. 15
      src/script/sign.cpp
  84. 43
      src/txdb.cpp
  85. 37
      src/wallet/rpcdump.cpp
  86. 220
      src/wallet/rpcwallet.cpp
  87. 101
      src/wallet/wallet.cpp
  88. 10
      src/wallet/wallet.h
  89. 50
      src/zcash/Note.cpp
  90. 432
      zcutil/VerusCoin.xml
  91. 97
      zcutil/build-debian-package.sh

12
INSTALL.md

@ -24,7 +24,7 @@ sudo swapon /swapfile
# install build depedencies
sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib \
autoconf libtool ncurses-dev unzip git python zlib1g-dev wget \
bsdmainutils automake curl unzip nano
bsdmainutils automake curl unzip nano libsodium-dev
# pull
git clone https://github.com/MyHush/hush3.git
cd hush3
@ -49,7 +49,7 @@ Get dependencies:
sudo apt-get install \
build-essential pkg-config libc6-dev m4 g++-multilib \
autoconf libtool ncurses-dev unzip git python \
zlib1g-dev wget bsdmainutils automake mingw-w64 cmake
zlib1g-dev wget bsdmainutils automake mingw-w64 cmake libsodium-dev
```
Downloading Git source repo, building and running Hush:
@ -78,3 +78,11 @@ set.
This also means that RaspberryPi devices will not work, unless they have a
newer ARMv8-based Raspberry Pi.
## Building Debian Packages
You can build your own custom Hush debian package for your production infrastructure
and also to use in containers for testing. Make sure to compile Hush first, then run:
./zcutil/build-debian-package.sh

2
configure.ac

@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 3)
define(_CLIENT_VERSION_MINOR, 1)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_BUILD, 0)
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))

240
contrib/debian/changelog

@ -1,239 +1,5 @@
zcash (2.0.1) stable; urgency=medium
hush (3.1.0) stable; urgency=medium
* 2.0.1 release.
* 3.1.0 release.
-- Zcash Company <team@z.cash> Sun, 14 Oct 2018 13:40:30 -0700
zcash (2.0.1~rc1) stable; urgency=medium
* 2.0.1-rc1 release.
-- Zcash Company <team@z.cash> Mon, 08 Oct 2018 12:40:54 -0700
zcash (2.0.0) stable; urgency=medium
* 2.0.0 release.
-- Zcash Company <team@z.cash> Wed, 15 Aug 2018 17:57:50 -0700
zcash (2.0.0~rc1) stable; urgency=medium
* 2.0.0-rc1 release.
-- Zcash Company <team@z.cash> Thu, 09 Aug 2018 16:56:56 +0000
zcash (1.1.2) stable; urgency=medium
* 1.1.2 release.
-- Zcash Company <team@z.cash> Sun, 01 Jul 2018 20:12:33 -0700
zcash (1.1.2~rc1) stable; urgency=medium
* 1.1.2-rc1 release.
-- Zcash Company <team@z.cash> Fri, 22 Jun 2018 17:03:41 -0700
zcash (1.1.1) stable; urgency=medium
* 1.1.1 release.
-- Zcash Company <team@z.cash> Fri, 25 May 2018 15:49:34 +1200
zcash (1.1.1~rc2) stable; urgency=medium
* 1.1.1-rc2 release.
-- Zcash Company <team@z.cash> Wed, 23 May 2018 09:28:50 -0700
zcash (1.1.1~rc1) stable; urgency=medium
* 1.1.1-rc1 release.
-- Zcash Company <team@z.cash> Sat, 19 May 2018 10:16:14 +1200
zcash (1.1.0) stable; urgency=medium
* 1.1.0 release.
-- Zcash Company <team@z.cash> Wed, 11 Apr 2018 20:15:29 -0600
zcash (1.1.0~rc1) stable; urgency=medium
* 1.1.0-rc1 release.
-- Zcash Company <team@z.cash> Thu, 05 Apr 2018 03:26:17 +0100
zcash (1.0.15) stable; urgency=medium
* 1.0.15 release.
-- Zcash Company <team@z.cash> Wed, 28 Feb 2018 16:58:19 +0000
zcash (1.0.15~rc1) stable; urgency=medium
* 1.0.15-rc1 release.
-- Zcash Company <team@z.cash> Sat, 24 Feb 2018 04:20:05 +0000
zcash (1.0.14) stable; urgency=medium
* 1.0.14 release.
-- Zcash Company <team@z.cash> Wed, 03 Jan 2018 23:54:16 +0100
zcash (1.0.14~rc1) stable; urgency=medium
* 1.0.14-rc1 release.
-- Zcash Company <team@z.cash> Fri, 22 Dec 2017 10:12:41 +0000
zcash (1.0.13) stable; urgency=medium
* 1.0.13 release.
-- Zcash Company <team@z.cash> Mon, 20 Nov 2017 12:31:53 +0000
zcash (1.0.13~rc2) stable; urgency=medium
* 1.0.13-rc2 release.
-- Zcash Company <team@z.cash> Fri, 17 Nov 2017 18:01:08 +0000
zcash (1.0.13~rc1) stable; urgency=medium
* 1.0.13-rc1 release.
-- Zcash Company <team@z.cash> Wed, 15 Nov 2017 00:02:21 +0000
zcash (1.0.12) stable; urgency=medium
* 1.0.12 release.
-- Zcash Company <team@z.cash> Thu, 28 Sep 2017 01:26:44 +0100
zcash (1.0.12~rc1) stable; urgency=medium
* 1.0.12-rc1 release.
-- Zcash Company <team@z.cash> Sat, 23 Sep 2017 10:51:36 +0100
zcash (1.0.11) stable; urgency=medium
* 1.0.11 release.
-- Zcash Company <team@z.cash> Tue, 15 Aug 2017 10:06:25 +0100
zcash (1.0.11~rc1) stable; urgency=medium
* 1.0.11-rc1 release.
-- Zcash Company <team@z.cash> Tue, 01 Aug 2017 17:12:52 +0200
zcash (1.0.10+1) stable; urgency=medium
* 1.0.10-1 release.
-- Zcash Company <team@z.cash> Fri, 23 Jun 2017 19:50:41 -0700
zcash (1.0.10) stable; urgency=medium
* 1.0.10 release.
-- Zcash Company <team@z.cash> Thu, 22 Jun 2017 15:13:04 +1200
zcash (1.0.9) stable; urgency=medium
* 1.0.9 release.
-- Zcash Company <team@z.cash> Wed, 24 May 2017 12:51:06 -0700
zcash (1.0.8+1) jessie; urgency=high
* 1.0.8-1 release.
-- Zcash Company <team@z.cash> Thu, 13 Apr 2017 20:20:37 -0700
zcash (1.0.8) jessie; urgency=medium
* 1.0.8 release.
-- Zcash Company <team@z.cash> Mon, 27 Mar 2017 21:30:07 +0100
zcash (1.0.7+1) jessie; urgency=medium
* 1.0.7-1 release.
-- Zcash Company <team@z.cash> Wed, 08 Mar 2017 13:51:11 -0800
zcash (1.0.7) jessie; urgency=medium
* 1.0.7 release.
-- Zcash Company <team@z.cash> Fri, 03 Mar 2017 20:55:04 -0800
zcash (1.0.6) jessie; urgency=medium
* 1.0.6 release.
-- Zcash Company <team@z.cash> Fri, 10 Feb 2017 10:23:00 -0800
zcash (1.0.5) jessie; urgency=medium
* 1.0.5 release.
-- Zcash Company <team@z.cash> Thu, 19 Jan 2017 19:23:40 -0700
zcash (1.0.4) jessie; urgency=medium
* 1.0.4 release.
-- Zcash Company <team@z.cash> Thu, 15 Dec 2016 16:46:14 +1300
zcash (1.0.3) jessie; urgency=medium
* 1.0.3 release.
-- Zcash Company <team@z.cash> Wed, 17 Nov 2016 15:56:00 -0700
zcash (1.0.2) jessie; urgency=medium
* 1.0.2 release.
-- Zcash Company <team@z.cash> Mon, 07 Nov 2016 19:01:35 -0600
zcash (1.0.1) jessie; urgency=medium
* 1.0.1 release.
-- Zcash Company <team@z.cash> Thu, 03 Nov 2016 23:21:09 -0500
zcash (1.0.0-sprout) jessie; urgency=medium
* 1.0.0 release.
-- Zcash Company <team@z.cash> Fri, 28 Oct 2016 03:00:50 -0700
zcash (1.0.0-rc4) jessie; urgency=medium
* 1.0.0-rc4 release.
-- Zcash Company <team@z.cash> Thu, 27 Oct 2016 13:36:00 +0100
zcash (1.0.0-rc3) jessie; urgency=medium
* 1.0.0-rc3 release.
-- Zcash Company <team@z.cash> Wed, 26 Oct 2016 23:17:03 +0100
zcash (1.0.0-rc2) jessie; urgency=medium
* 1.0.0-rc2 release.
-- Zcash Company <team@z.cash> Sun, 23 Oct 2016 01:51:27 +0100
zcash (1.0.0-rc1) jessie; urgency=medium
* Initial packaging for Debian.
-- Zcash Company <team@z.cash> Mon, 17 Oct 2016 11:47:02 -0700
-- Hush Core <myhushteam@gmail.com> Sat, 21 Sep 2019 10:18:38 -0500

5
contrib/debian/control

@ -1,4 +1,4 @@
Source: Hush
Source: hush
Section: utils
Priority: optional
Maintainer: Hush <myhushteam@gmail.com>
@ -13,5 +13,4 @@ Vcs-Browser: https://github.com/MyHush/hush3
Package: hush
Architecture: amd64
Depends: ${shlibs:Depends}
Description: Hush cryptocoin full node. Speak And Transact Freely.
Hush inherits from Bitcoin Protocol and Zcash Protocol and is focused on private communications.
Description: Full node for Hush cryptocoin. Speak And Transact Freely. Hush inherits from Bitcoin Protocol and Zcash Protocol and is focused on private communications.

4
contrib/debian/copyright

@ -68,6 +68,10 @@ Files: src/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4
Copyright: 2008 Paolo Bonzini <bonzini@gnu.org>
License: GNU-All-permissive-License
Files: depends/sources/utfcpp-*.tar.gz
Copyright: 2006 Nemanja Trifunovic
License: Boost-Software-License-1.0
License: Boost-Software-License-1.0
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by

36
contrib/debian/examples/komodo.conf → contrib/debian/examples/hush.conf

@ -1,6 +1,4 @@
##
## komodo.conf configuration file. Lines beginning with # are comments.
##
## hush.conf configuration file. Lines beginning with # are comments.
# Network-related settings:
@ -54,10 +52,10 @@
#maxconnections=
#
# JSON-RPC options (for controlling a running Komodo/komodod process)
# JSON-RPC options (for controlling a running Komodo/hushd process)
#
# server=1 tells komodod to accept JSON-RPC commands (set as default if not specified)
# server=1 tells hushd to accept JSON-RPC commands (set as default if not specified)
#server=1
# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6.
@ -68,7 +66,7 @@
#rpcuser=Ulysses
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
# How many seconds komodo will wait for a complete RPC HTTP request.
# How many seconds hush will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
#rpcclienttimeout=30
@ -78,7 +76,7 @@
# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED,
# because the rpcpassword is transmitted over the network unencrypted and also because anyone
# that can authenticate on the RPC port can steal your keys + take over the account running komodod
# that can authenticate on the RPC port can steal your keys + take over the account running hushd
# For more information see https://github.com/zcash/zcash/issues/1497
#rpcallowip=10.1.1.34/255.255.255.0
@ -88,7 +86,7 @@
# Listen for RPC connections on this TCP port:
#rpcport=8232
# You can use Komodo or komodod to send commands to Komodo/komodod
# You can use Komodo or hushd to send commands to Komodo/hushd
# running on another host using this option:
#rpcconnect=127.0.0.1
@ -103,13 +101,13 @@
# Miscellaneous options
# Enable attempt to mine komodo.
# Enable attempt to mine hush.
#gen=0
# Set the number of threads to be used for mining komodo (-1 = all cores).
# Set the number of threads to be used for mining hush (-1 = all cores).
#genproclimit=1
# Specify a different Equihash solver (e.g. "tromp") to try to mine komodo
# Specify a different Equihash solver (e.g. "tromp") to try to mine hush
# faster when gen=1.
#equihashsolver=default
@ -117,7 +115,7 @@
# both prior transactions and several dozen future transactions.
#keypool=100
# Pay an optional transaction fee every time you send komodo. Transactions with fees
# Pay an optional transaction fee every time you send hush. Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner. This setting does not affect private transactions created with
# 'z_sendmany'.
@ -126,7 +124,7 @@
#Rewind the chain to specific block height. This is useful for creating snapshots at a given block height.
#rewind=777777
#Stop the chain a specific block height. This is useful for creating snapshots at a given block height.
#Stop the chain a specific block height and still process RPC requests. This is useful for creating snapshots at a given block height.
#stopat=1000000
#Set an address to use as change address for all transactions. This value must be set to a 33 byte pubkey. All mined coins will also be sent to this address.
@ -138,3 +136,15 @@
#Donate all user rewards to a a specific address. This value must be set to a 33 byte pubkey.
#donation=027dc7b5cfb5efca96674b45e9fda18df069d040b9fd9ff32c35df56005e330392
# transaction index, required
#txindex=1
# address index
#addressindex=0
# spent index
#spentindex=0
# timestamp index
#timestampindex=0

129
contrib/debian/examples/zcash.conf

@ -1,129 +0,0 @@
##
## zcash.conf configuration file. Lines beginning with # are comments.
##
# Network-related settings:
# Run on the test network instead of the real zcash network.
#testnet=0
# Run a regression test network
#regtest=0
# Connect via a SOCKS5 proxy
#proxy=127.0.0.1:9050
# Bind to given address and always listen on it. Use [host]:port notation for IPv6
#bind=<addr>
# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6
#whitebind=<addr>
##############################################################
## Quick Primer on addnode vs connect ##
## Let's say for instance you use addnode=4.2.2.4 ##
## addnode will connect you to and tell you about the ##
## nodes connected to 4.2.2.4. In addition it will tell ##
## the other nodes connected to it that you exist so ##
## they can connect to you. ##
## connect will not do the above when you 'connect' to it. ##
## It will *only* connect you to 4.2.2.4 and no one else.##
## ##
## So if you're behind a firewall, or have other problems ##
## finding nodes, add some using 'addnode'. ##
## ##
## If you want to stay private, use 'connect' to only ##
## connect to "trusted" nodes. ##
## ##
## If you run multiple nodes on a LAN, there's no need for ##
## all of them to open lots of connections. Instead ##
## 'connect' them all to one node that is port forwarded ##
## and has lots of connections. ##
## Thanks goes to [Noodle] on Freenode. ##
##############################################################
# Use as many addnode= settings as you like to connect to specific peers
#addnode=69.164.218.197
#addnode=10.0.0.2:8233
# Alternatively use as many connect= settings as you like to connect ONLY to specific peers
#connect=69.164.218.197
#connect=10.0.0.1:8233
# Listening mode, enabled by default except when 'connect' is being used
#listen=1
# Maximum number of inbound+outbound connections.
#maxconnections=
#
# JSON-RPC options (for controlling a running Zcash/zcashd process)
#
# server=1 tells zcashd to accept JSON-RPC commands (set as default if not specified)
#server=1
# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6.
# This option can be specified multiple times (default: bind to all interfaces)
#rpcbind=<addr>
# You must set rpcuser and rpcpassword to secure the JSON-RPC api
#rpcuser=Ulysses
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
# How many seconds zcash will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
#rpcclienttimeout=30
# By default, only RPC connections from localhost are allowed.
# Specify as many rpcallowip= settings as you like to allow connections from other hosts,
# either as a single IPv4/IPv6 or with a subnet specification.
# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED,
# because the rpcpassword is transmitted over the network unencrypted and also because anyone
# that can authenticate on the RPC port can steal your keys + take over the account running zcashd
# For more information see https://github.com/zcash/zcash/issues/1497
#rpcallowip=10.1.1.34/255.255.255.0
#rpcallowip=1.2.3.4/24
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
# Listen for RPC connections on this TCP port:
#rpcport=8232
# You can use Zcash or zcashd to send commands to Zcash/zcashd
# running on another host using this option:
#rpcconnect=127.0.0.1
# Transaction Fee
# Send transactions as zero-fee transactions if possible (default: 0)
#sendfreetransactions=0
# Create transactions that have enough fees (or priority) so they are likely to # begin confirmation within n blocks (default: 1).
# This setting is overridden by the -paytxfee option.
#txconfirmtarget=n
# Miscellaneous options
# Enable attempt to mine zcash.
#gen=0
# Set the number of threads to be used for mining zcash (-1 = all cores).
#genproclimit=1
# Specify a different Equihash solver (e.g. "tromp") to try to mine zcash
# faster when gen=1.
#equihashsolver=default
# Pre-generate this many public/private key pairs, so wallet backups will be valid for
# both prior transactions and several dozen future transactions.
#keypool=100
# Pay an optional transaction fee every time you send zcash. Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner. This setting does not affect private transactions created with
# 'z_sendmany'.
#paytxfee=0.00

1
contrib/debian/hush.examples

@ -0,0 +1 @@
DEBIAN/examples/hush.conf

9
contrib/debian/hush.install

@ -0,0 +1,9 @@
usr/bin/hush-komodod
usr/bin/hush-komodo-cli
usr/bin/hush-komodo-tx
usr/bin/hush-cli
usr/bin/hush-tx
usr/bin/hushd
usr/share/hush/sapling-output.params
usr/share/hush/sapling-spend.params

2
contrib/debian/hush.manpages

@ -0,0 +1,2 @@
DEBIAN/manpages/hush-cli.1
DEBIAN/manpages/hushd.1

2
contrib/debian/postinst

@ -1,5 +1,5 @@
#!/bin/sh
# postinst script for zcash
# postinst script for hush
#
# see: dh_installdeb(1)

2
contrib/debian/postrm

@ -1,5 +1,5 @@
#!/bin/sh
# postrm script for zcash
# postrm script for hush
#
# see: dh_installdeb(1)

2
contrib/debian/preinst

@ -1,5 +1,5 @@
#!/bin/sh
# preinst script for zcash
# preinst script for hush
#
# see: dh_installdeb(1)

2
contrib/debian/prerm

@ -1,5 +1,5 @@
#!/bin/sh
# prerm script for zcash
# prerm script for hush
#
# see: dh_installdeb(1)

1
contrib/debian/zcash.examples

@ -1 +0,0 @@
DEBIAN/examples/zcash.conf

3
contrib/debian/zcash.install

@ -1,3 +0,0 @@
usr/bin/komodod
usr/bin/komodo-cli
usr/bin/zcash-fetch-params

2
contrib/debian/zcash.manpages

@ -1,2 +0,0 @@
DEBIAN/manpages/zcash-cli.1
DEBIAN/manpages/zcashd.1

27
contrib/devtools/gen-manpages.sh

@ -1,28 +1,33 @@
#!/bin/sh
# Copyright 2019 The Hush Developers
set -e
set -x
[ ! -x $HUSHD ] && echo "$HUSHD not found or not executable." && exit 1
TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)}
SRCDIR=${SRCDIR:-$TOPDIR/src}
MANDIR=${MANDIR:-$TOPDIR/doc/man}
KOMODOD=${KOMODOD:-$SRCDIR/komodod}
KOMODOCLI=${KOMODOCLI:-$SRCDIR/komodo-cli}
KOMODOTX=${KOMODOTX:-$SRCDIR/komodo-tx}
[ ! -x $KOMODOD ] && echo "$KOMODOD not found or not executable." && exit 1
HUSHD=${HUSHD:-$SRCDIR/hushd}
HUSHCLI=${HUSHCLI:-$SRCDIR/hush-cli}
HUSHTX=${HUSHTX:-$SRCDIR/hush-tx}
# The autodetected version git tag can screw up manpage output a little bit
KMDVER=($($KOMODOCLI --version | head -n1 | awk -F'[ -]' '{ print $5, $6 }'))
#KMDVER=$($HUSHCLI --version | head -n1 | awk -F'[ -]' '{ print $5, $6 }')
KMDVER="0.4.0a"
HUSHVER="3.1.0"
# Create a footer file with copyright content.
# This gets autodetected fine for komodod if --version-string is not set,
# but has different outcomes for komodo-cli.
echo "[COPYRIGHT]" > footer.h2m
$KOMODOD --version | sed -n '1!p' >> footer.h2m
$HUSHD --version | sed -n '1!p' >> footer.h2m
for cmd in $KOMODOD $KOMODOCLI $KOMODOTX; do
for cmd in $HUSHD $HUSHCLI $HUSHTX; do
cmdname="${cmd##*/}"
help2man -N --version-string=${KMDVER[0]} --include=footer.h2m -o ${MANDIR}/${cmdname}.1 ${cmd}
sed -i "s/\\\-${KMDVER[1]}//g" ${MANDIR}/${cmdname}.1
help2man -N --version-string=${HUSHVER} --include=footer.h2m -o ${MANDIR}/${cmdname}.1 ${cmd}
#sed -i "s/\\\-${KMDVER[1]}//g" ${MANDIR}/${cmdname}.1
done
rm -f footer.h2m

4
depends/packages/packages.mk

@ -1,10 +1,10 @@
rust_packages := rust librustzcash
ifeq ($(build_os),darwin)
zcash_packages := libsnark libgmp libsodium
zcash_packages := libsnark libgmp libsodium utfcpp
else
proton_packages := proton
zcash_packages := libgmp libsodium
zcash_packages := libgmp libsodium utfcpp
endif
rust_crates := \

91
doc/man/hush-cli.1

@ -0,0 +1,91 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10.
.TH HUSH-CLI "1" "September 2019" "hush-cli 3.1.0" "User Commands"
.SH NAME
hush-cli \- manual page for hush-cli 3.1.0
.SH DESCRIPTION
Hush RPC client version v3.1.0
.PP
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://myhush.org/security/>.
.SS "Usage:"
.TP
hush\-cli [options] <command> [params]
Send command to Komodo
.TP
hush\-cli [options] help
List commands
.TP
hush\-cli [options] help <command>
Get help for a command
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-conf=\fR<file>
.IP
Specify configuration file (default: HUSH3.conf)
.HP
\fB\-datadir=\fR<dir>
.IP
Specify data directory
.HP
\fB\-testnet\fR
.IP
Use the test network
.HP
\fB\-regtest\fR
.IP
Enter regression test mode, which uses a special chain in which blocks
can be solved instantly. This is intended for regression testing tools
and app development.
.HP
\fB\-rpcconnect=\fR<ip>
.IP
Send commands to node running on <ip> (default: 127.0.0.1)
.HP
\fB\-rpcport=\fR<port>
.IP
Connect to JSON\-RPC on <port> (default: 8232 or testnet: 18232)
.HP
\fB\-rpcwait\fR
.IP
Wait for RPC server to start
.HP
\fB\-rpcuser=\fR<user>
.IP
Username for JSON\-RPC connections
.HP
\fB\-rpcpassword=\fR<pw>
.IP
Password for JSON\-RPC connections
.HP
\fB\-rpcclienttimeout=\fR<n>
.IP
Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
900)
.HP
\fB\-stdin\fR
.IP
Read extra arguments from standard input, one per line until EOF/Ctrl\-D
(recommended for sensitive information such as passphrases)
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://myhush.org/security/>.
Copyright (C) 2009-2019 The Bitcoin Core Developers
Copyright (C) 2015-2019 The Zcash Developers
Copyright (C) 2015-2019 jl777 and SuperNET developers
Copyright (C) 2018-2019 The Hush developers
Copyright (C) 2018-2019 The Verus developers
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written
by Eric Young.

104
doc/man/hush-tx.1

@ -0,0 +1,104 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10.
.TH HUSH-TX "1" "September 2019" "hush-tx 3.1.0" "User Commands"
.SH NAME
hush-tx \- manual page for hush-tx 3.1.0
.SH DESCRIPTION
hush\-tx utility version v3.1.0
.SS "Usage:"
.TP
hush\-tx [options] <hex\-tx> [commands]
Update hex\-encoded hush transaction
.TP
hush\-tx [options] \fB\-create\fR [commands]
Create hex\-encoded hush transaction
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-create\fR
.IP
Create new, empty TX.
.HP
\fB\-json\fR
.IP
Select JSON output
.HP
\fB\-txid\fR
.IP
Output only the hex\-encoded transaction id of the resultant transaction.
.HP
\fB\-regtest\fR
.IP
Enter regression test mode, which uses a special chain in which blocks
can be solved instantly.
.HP
\fB\-testnet\fR
.IP
Use the test network
.PP
Commands:
.IP
delin=N
.IP
Delete input N from TX
.IP
delout=N
.IP
Delete output N from TX
.IP
in=TXID:VOUT(:SEQUENCE_NUMBER)
.IP
Add input to TX
.IP
locktime=N
.IP
Set TX lock time to N
.IP
nversion=N
.IP
Set TX version to N
.IP
outaddr=VALUE:ADDRESS
.IP
Add address\-based output to TX
.IP
outscript=VALUE:SCRIPT
.IP
Add raw script output to TX
.IP
sign=HEIGHT:SIGHASH\-FLAGS
.IP
Add zero or more signatures to transaction. This command requires JSON
registers:prevtxs=JSON object, privatekeys=JSON object. See
signrawtransaction docs for format of sighash flags, JSON objects.
.PP
Register Commands:
.IP
load=NAME:FILENAME
.IP
Load JSON file FILENAME into register NAME
.IP
set=NAME:JSON\-STRING
.IP
Set register NAME to given JSON\-STRING
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://myhush.org/security/>.
Copyright (C) 2009-2019 The Bitcoin Core Developers
Copyright (C) 2015-2019 The Zcash Developers
Copyright (C) 2015-2019 jl777 and SuperNET developers
Copyright (C) 2018-2019 The Hush developers
Copyright (C) 2018-2019 The Verus developers
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written
by Eric Young.

637
doc/man/hushd.1

@ -0,0 +1,637 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10.
.TH HUSHD "1" "September 2019" "hushd 3.1.0" "User Commands"
.SH NAME
hushd \- manual page for hushd 3.1.0
.SH DESCRIPTION
Hush Daemon version v3.1.0
.PP
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://myhush.org/security/>.
.SS "Usage:"
.TP
hushd [options]
Start Hush Daemon
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-alerts\fR
.IP
Receive and display P2P network alerts (default: 1)
.HP
\fB\-alertnotify=\fR<cmd>
.IP
Execute command when a relevant alert is received or we see a really
long fork (%s in cmd is replaced by message)
.HP
\fB\-blocknotify=\fR<cmd>
.IP
Execute command when the best block changes (%s in cmd is replaced by
block hash)
.HP
\fB\-checkblocks=\fR<n>
.IP
How many blocks to check at startup (default: 288, 0 = all)
.HP
\fB\-checklevel=\fR<n>
.IP
How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3)
.HP
\fB\-clientname=\fR<SomeName>
.IP
Full node client name, default 'MagicBean'
.HP
\fB\-conf=\fR<file>
.IP
Specify configuration file (default: komodo.conf)
.HP
\fB\-daemon\fR
.IP
Run in the background as a daemon and accept commands
.HP
\fB\-datadir=\fR<dir>
.IP
Specify data directory
.HP
\fB\-exportdir=\fR<dir>
.IP
Specify directory to be used when exporting data
.HP
\fB\-dbcache=\fR<n>
.IP
Set database cache size in megabytes (4 to 16384, default: 450)
.HP
\fB\-loadblock=\fR<file>
.IP
Imports blocks from external blk000??.dat file on startup
.HP
\fB\-maxorphantx=\fR<n>
.IP
Keep at most <n> unconnectable transactions in memory (default: 100)
.HP
\fB\-mempooltxinputlimit=\fR<n>
.IP
[DEPRECATED FROM OVERWINTER] Set the maximum number of transparent
inputs in a transaction that the mempool will accept (default: 0 = no
limit applied)
.HP
\fB\-par=\fR<n>
.IP
Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
leave that many cores free, default: 0)
.HP
\fB\-pid=\fR<file>
.IP
Specify pid file (default: komodod.pid)
.HP
\fB\-prune=\fR<n>
.IP
Reduce storage requirements by pruning (deleting) old blocks. This mode
disables wallet support and is incompatible with \fB\-txindex\fR. Warning:
Reverting this setting requires re\-downloading the entire blockchain.
(default: 0 = disable pruning blocks, >550 = target size in MiB to use
for block files)
.HP
\fB\-reindex\fR
.IP
Rebuild block chain index from current blk000??.dat files on startup
.HP
\fB\-sysperms\fR
.IP
Create new files with system default permissions, instead of umask 077
(only effective with disabled wallet functionality)
.HP
\fB\-txindex\fR
.IP
Maintain a full transaction index, used by the getrawtransaction rpc
call (default: 0)
.HP
\fB\-addressindex\fR
.IP
Maintain a full address index, used to query for the balance, txids and
unspent outputs for addresses (default: 1)
.HP
\fB\-timestampindex\fR
.IP
Maintain a timestamp index for block hashes, used to query blocks hashes
by a range of timestamps (default: 0)
.HP
\fB\-spentindex\fR
.IP
Maintain a full spent index, used to query the spending txid and input
index for an outpoint (default: 1)
.PP
Connection options:
.HP
\fB\-addnode=\fR<ip>
.IP
Add a node to connect to and attempt to keep the connection open
.HP
\fB\-banscore=\fR<n>
.IP
Threshold for disconnecting misbehaving peers (default: 100)
.HP
\fB\-bantime=\fR<n>
.IP
Number of seconds to keep misbehaving peers from reconnecting (default:
86400)
.HP
\fB\-bind=\fR<addr>
.IP
Bind to given address and always listen on it. Use [host]:port notation
for IPv6
.HP
\fB\-connect=\fR<ip>
.IP
Connect only to the specified node(s)
.HP
\fB\-discover\fR
.IP
Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
or \fB\-proxy\fR)
.HP
\fB\-dns\fR
.IP
Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
.HP
\fB\-dnsseed\fR
.IP
Query for peer addresses via DNS lookup, if low on addresses (default: 1
unless \fB\-connect\fR)
.HP
\fB\-externalip=\fR<ip>
.IP
Specify your own public address
.HP
\fB\-forcednsseed\fR
.IP
Always query for peer addresses via DNS lookup (default: 0)
.HP
\fB\-listen\fR
.IP
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
.HP
\fB\-listenonion\fR
.IP
Automatically create Tor hidden service (default: 1)
.HP
\fB\-maxconnections=\fR<n>
.IP
Maintain at most <n> connections to peers (default: 384)
.HP
\fB\-maxreceivebuffer=\fR<n>
.IP
Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
.HP
\fB\-maxsendbuffer=\fR<n>
.IP
Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
.HP
\fB\-onion=\fR<ip:port>
.IP
Use separate SOCKS5 proxy to reach peers via Tor hidden services
(default: \fB\-proxy\fR)
.HP
\fB\-onlynet=\fR<net>
.IP
Only connect to nodes in network <net> (ipv4, ipv6 or onion)
.HP
\fB\-permitbaremultisig\fR
.IP
Relay non\-P2SH multisig (default: 1)
.HP
\fB\-peerbloomfilters\fR
.IP
Support filtering of blocks and transaction with Bloom filters (default:
1)
.HP
\fB\-port=\fR<port>
.IP
Listen for connections on <port> (default: 7770 or testnet: 17770)
.HP
\fB\-proxy=\fR<ip:port>
.IP
Connect through SOCKS5 proxy
.HP
\fB\-proxyrandomize\fR
.IP
Randomize credentials for every proxy connection. This enables Tor
stream isolation (default: 1)
.HP
\fB\-seednode=\fR<ip>
.IP
Connect to a node to retrieve peer addresses, and disconnect
.HP
\fB\-timeout=\fR<n>
.IP
Specify connection timeout in milliseconds (minimum: 1, default: 5000)
.HP
\fB\-torcontrol=\fR<ip>:<port>
.IP
Tor control port to use if onion listening enabled (default:
127.0.0.1:9051)
.HP
\fB\-torpassword=\fR<pass>
.IP
Tor control port password (default: empty)
.HP
\fB\-whitebind=\fR<addr>
.IP
Bind to given address and whitelist peers connecting to it. Use
[host]:port notation for IPv6
.HP
\fB\-whitelist=\fR<netmask>
.IP
Whitelist peers connecting from the given netmask or IP address. Can be
specified multiple times. Whitelisted peers cannot be DoS banned and
their transactions are always relayed, even if they are already in the
mempool, useful e.g. for a gateway
.PP
Wallet options:
.HP
\fB\-disablewallet\fR
.IP
Do not load the wallet and disable wallet RPC calls
.HP
\fB\-keypool=\fR<n>
.IP
Set key pool size to <n> (default: 100)
.HP
\fB\-paytxfee=\fR<amt>
.IP
Fee (in KMD/kB) to add to transactions you send (default: 0.00)
.HP
\fB\-rescan\fR
.IP
Rescan the block chain for missing wallet transactions on startup
.HP
\fB\-salvagewallet\fR
.IP
Attempt to recover private keys from a corrupt wallet.dat on startup
.HP
\fB\-sendfreetransactions\fR
.IP
Send transactions as zero\-fee transactions if possible (default: 0)
.HP
\fB\-spendzeroconfchange\fR
.IP
Spend unconfirmed change when sending transactions (default: 1)
.HP
\fB\-txconfirmtarget=\fR<n>
.IP
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
.HP
\fB\-txexpirydelta\fR
.IP
Set the number of blocks after which a transaction that has not been
mined will become invalid (default: 200)
.HP
\fB\-maxtxfee=\fR<amt>
.IP
Maximum total fees (in KMD) to use in a single wallet transaction;
setting this too low may abort large transactions (default: 0.10)
.HP
\fB\-upgradewallet\fR
.IP
Upgrade wallet to latest format on startup
.HP
\fB\-wallet=\fR<file>
.IP
Specify wallet file (within data directory) (default: wallet.dat)
.HP
\fB\-walletbroadcast\fR
.IP
Make the wallet broadcast transactions (default: 1)
.HP
\fB\-walletnotify=\fR<cmd>
.IP
Execute command when a wallet transaction changes (%s in cmd is replaced
by TxID)
.HP
\fB\-whitelistaddress=\fR<Raddress>
.IP
Enable the wallet filter for notary nodes and add one Raddress to the
whitelist of the wallet filter. If \fB\-whitelistaddress=\fR is used, then the
wallet filter is automatically activated. Several Raddresses can be
defined using several \fB\-whitelistaddress=\fR (similar to \fB\-addnode\fR). The
wallet filter will filter the utxo to only ones coming from my own
Raddress (derived from pubkey) and each Raddress defined using
\fB\-whitelistaddress=\fR this option is mostly for Notary Nodes).
.HP
\fB\-zapwallettxes=\fR<mode>
.IP
Delete all wallet transactions and only recover those parts of the
blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
account owner and payment request information, 2 = drop tx meta data)
.PP
ZeroMQ notification options:
.HP
\fB\-zmqpubhashblock=\fR<address>
.IP
Enable publish hash block in <address>
.HP
\fB\-zmqpubhashtx=\fR<address>
.IP
Enable publish hash transaction in <address>
.HP
\fB\-zmqpubrawblock=\fR<address>
.IP
Enable publish raw block in <address>
.HP
\fB\-zmqpubrawtx=\fR<address>
.IP
Enable publish raw transaction in <address>
.PP
Debugging/Testing options:
.HP
\fB\-debug=\fR<category>
.IP
Output debugging information (default: 0, supplying <category> is
optional). If <category> is not supplied or if <category> = 1, output
all debugging information. <category> can be: addrman, alert, bench,
coindb, db, estimatefee, http, libevent, lock, mempool, net,
partitioncheck, pow, proxy, prune, rand, reindex, rpc, selectcoins, tor,
zmq, zrpc, zrpcunsafe (implies zrpc).
.HP
\fB\-experimentalfeatures\fR
.IP
Enable use of experimental features
.HP
\fB\-help\-debug\fR
.IP
Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
.HP
\fB\-logips\fR
.IP
Include IP addresses in debug output (default: 0)
.HP
\fB\-logtimestamps\fR
.IP
Prepend debug output with timestamp (default: 1)
.HP
\fB\-minrelaytxfee=\fR<amt>
.IP
Fees (in KMD/kB) smaller than this are considered zero fee for relaying
(default: 0.000001)
.HP
\fB\-printtoconsole\fR
.IP
Send trace/debug info to console instead of debug.log file
.HP
\fB\-shrinkdebugfile\fR
.IP
Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
.HP
\fB\-testnet\fR
.IP
Use the test network
.PP
Node relay options:
.HP
\fB\-datacarrier\fR
.IP
Relay and mine data carrier transactions (default: 1)
.HP
\fB\-datacarriersize\fR
.IP
Maximum size of data in data carrier transactions we relay and mine
(default: 8192)
.PP
Block creation options:
.HP
\fB\-blockminsize=\fR<n>
.IP
Set minimum block size in bytes (default: 0)
.HP
\fB\-blockmaxsize=\fR<n>
.IP
Set maximum block size in bytes (default: 2000000)
.HP
\fB\-blockprioritysize=\fR<n>
.IP
Set maximum size of high\-priority/low\-fee transactions in bytes
(default: 1000000)
.PP
Mining options:
.HP
\fB\-mint\fR
.IP
Mint/stake coins automatically (default: 0)
.HP
\fB\-gen\fR
.IP
Mine/generate coins (default: 0)
.HP
\fB\-genproclimit=\fR<n>
.IP
Set the number of threads for coin mining if enabled (\fB\-1\fR = all cores,
default: 0)
.HP
\fB\-equihashsolver=\fR<name>
.IP
Specify the Equihash solver to be used if enabled (default: "default")
.HP
\fB\-mineraddress=\fR<addr>
.IP
Send mined coins to a specific single address
.HP
\fB\-minetolocalwallet\fR
.IP
Require that mined blocks use a coinbase address in the local wallet
(default: 1)
.PP
RPC server options:
.HP
\fB\-server\fR
.IP
Accept command line and JSON\-RPC commands
.HP
\fB\-rest\fR
.IP
Accept public REST requests (default: 0)
.HP
\fB\-rpcbind=\fR<addr>
.IP
Bind to given address to listen for JSON\-RPC connections. Use
[host]:port notation for IPv6. This option can be specified multiple
times (default: bind to all interfaces)
.HP
\fB\-rpcuser=\fR<user>
.IP
Username for JSON\-RPC connections
.HP
\fB\-rpcpassword=\fR<pw>
.IP
Password for JSON\-RPC connections
.HP
\fB\-rpcport=\fR<port>
.IP
Listen for JSON\-RPC connections on <port> (default: 7771 or testnet:
17771)
.HP
\fB\-rpcallowip=\fR<ip>
.IP
Allow JSON\-RPC connections from specified source. Valid for <ip> are a
single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0)
or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified
multiple times
.HP
\fB\-rpcthreads=\fR<n>
.IP
Set the number of threads to service RPC calls (default: 4)
.PP
Metrics Options (only if \fB\-daemon\fR and \fB\-printtoconsole\fR are not set):
.HP
\fB\-showmetrics\fR
.IP
Show metrics on stdout (default: 1 if running in a console, 0 otherwise)
.HP
\fB\-metricsui\fR
.IP
Set to 1 for a persistent metrics screen, 0 for sequential metrics
output (default: 1 if running in a console, 0 otherwise)
.HP
\fB\-metricsrefreshtime\fR
.IP
Number of seconds between metrics refreshes (default: 1 if running in a
console, 600 otherwise)
.PP
Komodo Asset Chain options:
.HP
\fB\-ac_algo\fR
.IP
Choose PoW mining algorithm, default is Equihash
.HP
\fB\-ac_blocktime\fR
.IP
Block time in seconds, default is 60
.HP
\fB\-ac_cc\fR
.IP
Cryptoconditions, default 0
.HP
\fB\-ac_beam\fR
.IP
BEAM integration
.HP
\fB\-ac_coda\fR
.IP
CODA integration
.HP
\fB\-ac_cclib\fR
.IP
Cryptoconditions dynamicly loadable library
.HP
\fB\-ac_ccenable\fR
.IP
Cryptoconditions to enable
.HP
\fB\-ac_ccactivate\fR
.IP
Block height to enable Cryptoconditions
.HP
\fB\-ac_decay\fR
.IP
Percentage of block reward decrease at each halving
.HP
\fB\-ac_end\fR
.IP
Block height at which block rewards will end
.HP
\fB\-ac_eras\fR
.IP
Block reward eras
.HP
\fB\-ac_founders\fR
.IP
Number of blocks between founders reward payouts
.HP
\fB\-ac_halving\fR
.IP
Number of blocks between each block reward halving
.HP
\fB\-ac_name\fR
.IP
Name of asset chain
.HP
\fB\-ac_notarypay\fR
.IP
Pay notaries, default 0
.HP
\fB\-ac_perc\fR
.IP
Percentage of block rewards paid to the founder
.HP
\fB\-ac_private\fR
.IP
Shielded transactions only (except coinbase + notaries), default is 0
.HP
\fB\-ac_pubkey\fR
.IP
Public key for receiving payments on the network
.HP
\fB\-ac_public\fR
.IP
Transparent transactions only, default 0
.HP
\fB\-ac_reward\fR
.IP
Block reward in satoshis, default is 0
.HP
\fB\-ac_sapling\fR
.IP
Sapling activation block height
.HP
\fB\-ac_script\fR
.IP
P2SH/multisig address to receive founders rewards
.HP
\fB\-ac_staked\fR
.IP
Percentage of blocks that are Proof\-Of\-Stake, default 0
.HP
\fB\-ac_supply\fR
.IP
Starting supply, default is 0
.HP
\fB\-ac_timelockfrom\fR
.IP
Timelocked coinbase start height
.HP
\fB\-ac_timelockgte\fR
.IP
Timelocked coinbase minimum amount to be locked
.HP
\fB\-ac_timelockto\fR
.IP
Timelocked coinbase stop height
.HP
\fB\-ac_txpow\fR
.IP
Enforce transaction\-rate limit, default 0
.HP
\fB\-ac_veruspos\fR
.IP
Use Verus Proof\-Of\-Stake (\fB\-ac_veruspos\fR=\fI\,50\/\fR) default 0
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://myhush.org/security/>.
Copyright (C) 2009-2019 The Bitcoin Core Developers
Copyright (C) 2015-2019 The Zcash Developers
Copyright (C) 2015-2019 jl777 and SuperNET developers
Copyright (C) 2018-2019 The Hush developers
Copyright (C) 2018-2019 The Verus developers
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written
by Eric Young.

13
doc/man/verus-cli/linux/README.txt

@ -1,13 +0,0 @@
VerusCoin Command Line Tools v0.4.0c
Contents:
komodod - VerusCoin's enhanced Komodo daemon
komodo-cli - VerusCoin's Komodo command line utility
verus - wrapper for komodo-cli that applies the command to the VRSC coin
verusd - wrapper for komodod that sets the VerusCoin parameters to defaults properly
The first time on a new system you will need to run ./fetch-params before using komodod or verusd.
Run ./verusd to launch komodod, and use verus to run commands such as:
./verus stop
Which signals komodod (if it is running) to stop running.

17
doc/man/verus-cli/mac/README.txt

@ -1,17 +0,0 @@
VerusCoin Command Line Tools v0.4.0c
Contents:
komodod - VerusCoin's enhanced Komodo daemon.
komodo-cli - VerusCoin's enhanced Komodo command line utility.
verus - wrapper for komodo-cli that applies the command to the VRSC coin
verusd - wrapper for komodod that sets the VerusCoin parameters to defaults properly
fetch_params.sh - utility to download the zcash parameters needed to start the VerusCoin command line tools and scripts
lib*.dylib - assorted dynamic libraries, dependencies needed by fetch-params.sh, komodod and/or komodo-cli
Command line tools are run from the terminal. You can launch the terminal on a Mac by using the Finder, selecting Applications and from that select Utilities, finally selecting Terminal from the Utilities folder.
You will need to switch to the directory you extracted the verus-cl into. If you extracted it in the Download folder then the change directory command is
cd ~/Downloads/verus-cli
The first time on a new system you will need to run ./fetch-params before using komodod or verusd.
Run ./verusd to launch komodod, and use verus to run commands such as:
./verus stop
Which signals komodod (if it is running) to stop running.

21
doc/man/verus-cli/windows/README.txt

@ -1,21 +0,0 @@
VerusCoin Command Line Tools v0.4.0c
Contents:
komodod.exe - VerusCoin's enhanced Komodo daemon
komodo-cli.exe - VerusCoin's Komodo command line utility
verus.bat - wrapper for komodo-cli that applies the command to the VRSC coin
verusd.bat - wrapper for komodod that sets the VerusCoin parameters to defaults properly
You need to run a command prompt, for example hit <Ctrl><Esc> and type cmd<Enter>
From the command prompt change to the directory where you installed verus-cli. If you downloaded the file to your Downloads directory and extracted it there then the change directory command is
cd \Users\MyName\Downloads\verus-cli
From this directory you can run the Verus command line utilities.
The first time on a new system you will need to run fetch-params before using komodod.exe or verusd.
Many anti-virus products interfere with the VerusCoin tool's ability to open ports and will need to be configured to allow what the scanner says is unsafe behavior.
Extreme cases can result in the virus scanner deleting Agama.exe or moving it to "protect" the system. You will to add the executables to a whitelist and re-extract the verus-cli-windows.zip file if that happens.
Run verusd.bat to launch komodod, and use verus.bat to run commands such as:
verus.bat stop
Which signals komodod.exe (if it is running) to stop running.
Note that if you pass in command line options to verus.bat or verusd.bat that include an = like -ac_veruspos=50 you must surround it with double quotes like this:
verusd.bat "-ac_veruspos=50"
Otherwise Windows will drop the = and pass the two values in as separate command line options.

525
src/KMD.batch0.txids

@ -1,525 +0,0 @@
{"isvalid":true,"address":"RG1QE6hTqu4dadL2XSNWS9VCHjd8xNVo58","scriptPubKey":"76a91449cc5da005a2aa06e6690353e722f88ee89363a588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RG1QE6hTqu4dadL2XSNWS9VCHjd8xNVo58","randipbits":3539516869,"coin":"KMD","tag":"16288560152454326470"}
6c41106538a27ef2bb120c00dd1d3e20090f1b840566bdd7512e4a0bca186215
{"isvalid":true,"address":"RFVvyUAnQe5yon6wq7B73Z1BzfFeZKyAZA","scriptPubKey":"76a91444398dc662aac85fc0609aec81e9d79322ce900c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFVvyUAnQe5yon6wq7B73Z1BzfFeZKyAZA","randipbits":1411135637,"coin":"KMD","tag":"3179312406704497929"}
05bd059c29f88d5d9035c4f1c1cebed5472d90fe76ed9e690799e9184809c710
{"isvalid":true,"address":"RL9YVW2GxbYh6hM3D1J7Z2y4feK4MrwZqe","scriptPubKey":"76a914773718a66f6b0c7659317ca4fc18190605e17d7388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RL9YVW2GxbYh6hM3D1J7Z2y4feK4MrwZqe","randipbits":91648679,"coin":"KMD","tag":"11766425327561479716"}
b523610a955ca1eac0c1dd045638187faf1e3fc5e2f1bfaf1afe83d237072c82
{"isvalid":true,"address":"RRCwketDe8CXt4dMWpL4NpQntxJvmwousn","scriptPubKey":"76a914aeb463ff1d4c9c27b5f09a35b990e0fba0615efb88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRCwketDe8CXt4dMWpL4NpQntxJvmwousn","randipbits":3795805790,"coin":"KMD","tag":"2213064305641142722"}
4bf772a69fd710e33120d3505af324c8f8385c998667e4edfb61bf6b8bc581ab
{"isvalid":true,"address":"RWfaj9ZNmHq5A4jV411xpt1FJoyvKfVJ6c","scriptPubKey":"76a914ea96b2ebeaaaddbdcebee688115f0cd17ef21de088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWfaj9ZNmHq5A4jV411xpt1FJoyvKfVJ6c","randipbits":54591336,"coin":"KMD","tag":"1991526992156118043"}
6d6149051a2ada76f42602086904aebb7ad4204d0b839718357aa4fd7e099d57
{"isvalid":true,"address":"R9dTcQWVDuaRdFqDzq4xPaFDjGbaLK6t8n","scriptPubKey":"76a91403d5490200db77ec959c5cf6969cf05f14df3ed188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9dTcQWVDuaRdFqDzq4xPaFDjGbaLK6t8n","randipbits":1411135637,"coin":"KMD","tag":"12495037900283412508"}
9056c3261b7e83aca6b7452e67624ec41fcb1f34828909567d2bc9de281b3fb2
{"isvalid":true,"address":"RDfCcqrNn8wgkr8CL29Z7PynpGP4w2ZySQ","scriptPubKey":"76a914300a1aec1446041f14da6d398db07401f8c99c8c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDfCcqrNn8wgkr8CL29Z7PynpGP4w2ZySQ","randipbits":3909093808,"coin":"KMD","tag":"11062888787074595098"}
c481af1d88dd5a4a7bd70215ee844fbf93d0b8cbbbd14b7e2d3ee4159e942e8d
{"isvalid":true,"address":"REvJWEuwqmwTnanZ8bWt85wnjfrsAjnvgE","scriptPubKey":"76a9143ddd624736664ccccf41b086ca4365f699b05cfd88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REvJWEuwqmwTnanZ8bWt85wnjfrsAjnvgE","randipbits":3510593118,"coin":"KMD","tag":"7033063778497304509"}
487390833e214ef3844db459a6e89c8793afb82f14d0c15032679c29bc4f969b
{"isvalid":true,"address":"RXb4SUn9mQ4Q1Fa8eehn5vitcfMMCjW2Ub","scriptPubKey":"76a914f4b3e0d24ea8a51e5e881c9bb895f4c9ee9e13c288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RXb4SUn9mQ4Q1Fa8eehn5vitcfMMCjW2Ub","randipbits":91648679,"coin":"KMD","tag":"10824723049153421531"}
0342364215116a32fa2867493057700bd5e475f14385b68d868bb20a5fc60fee
{"isvalid":true,"address":"RBpEnyzuQNj1hNdAG1pKLALpAWEUS67PBj","scriptPubKey":"76a9141bcf69a7ab607498d0f1c63b2fa688e5154975bc88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBpEnyzuQNj1hNdAG1pKLALpAWEUS67PBj","randipbits":3558029461,"coin":"KMD","tag":"7785495498399627728"}
5096f8365fae17da86137a1cbea31bf06cc3b0c9d511260a29aa134c284fde7c
{"isvalid":true,"address":"RGCCkHkLTkSiQFMeFvWSPzM2rNM3rrDkfw","scriptPubKey":"76a9144bd75bd5192483706cdcd0049822713f6c3afd3c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGCCkHkLTkSiQFMeFvWSPzM2rNM3rrDkfw","randipbits":3401109677,"coin":"KMD","tag":"16537564279194878673"}
6919ad3587cbe425da0dbe4310f26f9395632fca5f9a05ac43ddd98d30a3d9cc
{"isvalid":true,"address":"RR6soE71ZggsYm6FeSVqebtn6oruYm3Xr8","scriptPubKey":"76a914ad8e97c42d07bad4bde9a0beece8316c64b0b9cf88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RR6soE71ZggsYm6FeSVqebtn6oruYm3Xr8","randipbits":1212417070,"coin":"KMD","tag":"7525933131130473137"}
0a80c365dff82831085c7d53e1de4d5105a9bd89306e80883e9cfc6bcc50ffea
{"isvalid":true,"address":"RDobQ77wnMY8Me7RAL9oiFqVNvwkqqgPRF","scriptPubKey":"76a91431a072f05bafb0227368d56bfff15903fbc4552588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDobQ77wnMY8Me7RAL9oiFqVNvwkqqgPRF","randipbits":649762625,"coin":"KMD","tag":"2425986373848064585"}
fc2dde20fd79bb832b7030d64366d29826fbff3619ac49a536a2987be2c4368c
{"isvalid":true,"address":"RHSZ1CWDNhkNbbQRDrqLHRAdCshueMrt2r","scriptPubKey":"76a914598637bc09954bd7da6a778ea9c7f3cfd4d3904b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHSZ1CWDNhkNbbQRDrqLHRAdCshueMrt2r","randipbits":1088793017,"coin":"KMD","tag":"14096394822976266606"}
f210ca40ab1086d81490a530df38113e353169f01984aa228961ff10cefb59b9
{"isvalid":true,"address":"RSY3GTogE7WfwukhaemrAZtPh6Gsy2q1XV","scriptPubKey":"76a914bd4905c1577b64e76a80f418dd9dab9e9373bba688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSY3GTogE7WfwukhaemrAZtPh6Gsy2q1XV","randipbits":2966062244,"coin":"KMD","tag":"18071086034519656023"}
cbf73f04e90be80486427f209a4538b415b3d15798b6008c45c8fe086f2ac0fb
{"isvalid":true,"address":"RM4RavnpbqkyB3cVq9tyzkoPuFZ2q87qqk","scriptPubKey":"76a9148137608770773545f9c440ea89ffa0bfb53abef288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RM4RavnpbqkyB3cVq9tyzkoPuFZ2q87qqk","randipbits":3510593118,"coin":"KMD","tag":"3561554924088986465"}
02e0e3d66d975c8894f259cc3d46d3731e0c0482c0b819bb585c0998eff990c6
{"isvalid":true,"address":"RRMu7ikH1CVQmpY1vHWSZh7NTjVFbaAcUV","scriptPubKey":"76a914b065eee5b00d302ea21bc7a3a2f70ca9443d38e888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRMu7ikH1CVQmpY1vHWSZh7NTjVFbaAcUV","randipbits":2474273465,"coin":"KMD","tag":"11509287663278756924"}
634e2fe90916382616d59598f96bd4a9f9b7b2f7da7cbc186f4dc33da2a1a657
{"isvalid":true,"address":"REyKZQ8q8xbRNCtpA5ABY1BsfscduWGgKv","scriptPubKey":"76a9143e6f8312f4eaa31bf524c6a32f7685555b63faa188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REyKZQ8q8xbRNCtpA5ABY1BsfscduWGgKv","randipbits":716060302,"coin":"KMD","tag":"4325124703204695399"}
b81349eace18c6217e0316a26bc60050508f382db8d78e2acad208cbbc8ccc6d
{"isvalid":true,"address":"RTqh7gEJMJDpnBp62FZZAfXctj8X7sRRia","scriptPubKey":"76a914cb97d060539ff58c1bd400574ea65e9f91fd968a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTqh7gEJMJDpnBp62FZZAfXctj8X7sRRia","randipbits":3539516869,"coin":"KMD","tag":"13543971405175291137"}
3952e239e439f67dd7cadf6b976ad75926c2e8b998ce03c4e7236dfe21d5e283
{"isvalid":true,"address":"RJZ2DjthdsfCuaGxiE1PNCUGuvARAsMpHn","scriptPubKey":"76a91465b78ee8240e7782fa27e881d670712c31f0569e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJZ2DjthdsfCuaGxiE1PNCUGuvARAsMpHn","randipbits":3403802753,"coin":"KMD","tag":"4335745825084189316"}
error: {"code":-4,"message":"Transaction too large"}
{"isvalid":true,"address":"RTr3ghnoUgKMz7NVhcc2PEMmQ637J1P3CS","scriptPubKey":"76a914cba8fc05e1f3aaf40d860be4d4be0f07460c248a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTr3ghnoUgKMz7NVhcc2PEMmQ637J1P3CS","randipbits":2422516899,"coin":"KMD","tag":"2947923480050518251"}
da4f18857462797230b5364dbe72ec1b894caff855330caf6380dda06fab6f6a
{"isvalid":true,"address":"REPaLcbXYKr7D6kx6M56bwwgC7QShb8gL7","scriptPubKey":"76a914380db4e82b6f46ec530c83adda33d86e56f1301088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REPaLcbXYKr7D6kx6M56bwwgC7QShb8gL7","randipbits":726058584,"coin":"KMD","tag":"4980424036659628209"}
22cd1971f3b04800000c7e38bb20e1545de02df1f0eec4da4881fb7b7a966fcc
{"isvalid":true,"address":"RY1n8qYX7hUVPiupbiX5zAbN4CtGpyKN5F","scriptPubKey":"76a914f960aaceaf81ac5964449e0dbc0de837c980ce4b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RY1n8qYX7hUVPiupbiX5zAbN4CtGpyKN5F","randipbits":3403802753,"coin":"KMD","tag":"3251164214415661624"}
812b649ba9934722da8a9aebf9def7afbe3443d31d203f231713fed70f266a20
{"isvalid":true,"address":"RNhyF9U3o4hTgWqnwQjHwrD1o4GqWiP1T6","scriptPubKey":"76a9149349522c5c55a9ec0123af9f168cabed8109fe2188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNhyF9U3o4hTgWqnwQjHwrD1o4GqWiP1T6","randipbits":716060302,"coin":"KMD","tag":"5234495825041085252"}
a9a0e66817c6486ae275b6a45caa8fa283b19210572a058fa66780b3cdc46748
{"isvalid":true,"address":"RV3JsiGCq92BXiyo4JvRVJzTAm9RTdnNKn","scriptPubKey":"76a914d8c25d99ff2688fd583d758b3c6d24d3e26ef8cc88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RV3JsiGCq92BXiyo4JvRVJzTAm9RTdnNKn","randipbits":2474273465,"coin":"KMD","tag":"9180311689755188937"}
e4658a039c5710109cd247b6277543d0222130dccac2173bea9a2ffb4694845b
{"isvalid":true,"address":"RRMGMXyfD4ye9ebKwGWrAme3KU2CbaWy78","scriptPubKey":"76a914b0473ef7cceb7ab1235bc20092dc04c604d2745788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRMGMXyfD4ye9ebKwGWrAme3KU2CbaWy78","randipbits":2064902657,"coin":"KMD","tag":"15674851778818678874"}
529def46303ab4b76d303747165109d0cb4b1c86c8e618a34bdb52f51bad3790
{"isvalid":true,"address":"RE3yR2mCeG15ARgvENMbb573VqoQJcM3po","scriptPubKey":"76a9143458a682ab0925d5d56e0610e626b3172dcd51ec88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RE3yR2mCeG15ARgvENMbb573VqoQJcM3po","randipbits":306342285,"coin":"KMD","tag":"9687020715829259000"}
a008035209a4b2f4a6aa2d576290a6d6a80ab7eb58212908a0aad1cc558d60d7
{"isvalid":true,"address":"RF8Ua3mt2tMbwADn1XvYWxfJGz6fAnYBeq","scriptPubKey":"76a914402ac71f9482aa74c7814f596272fe4509bb68a088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RF8Ua3mt2tMbwADn1XvYWxfJGz6fAnYBeq","randipbits":4250743323,"coin":"KMD","tag":"17377210194918425517"}
90dc4ffb856cc8c1a99477bb53effb45c7b2ef70aaa2e28357a7d7e039eee979
{"isvalid":true,"address":"RApWnKTepnDfPSDGX1wJnLXoNFCP5QzGWe","scriptPubKey":"76a91410e4a22cbc2658898cb06cba104e58d4f3d339a688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RApWnKTepnDfPSDGX1wJnLXoNFCP5QzGWe","randipbits":1923364494,"coin":"KMD","tag":"17542877703605544136"}
7952dce16d049bdacdbb094d3d464f220a9885bfff368ecdc402ffea96b0da31
{"isvalid":true,"address":"RQjw6VEsAECmnKxXwwWCixCsz7gfFSaKsZ","scriptPubKey":"76a914a9989c3f389ebdb64d8e69b7fd36633c2c27745e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQjw6VEsAECmnKxXwwWCixCsz7gfFSaKsZ","randipbits":3795805790,"coin":"KMD","tag":"3735447127207900209"}
441a799eb41a295ac8d0012b4f849d317322cf39985fe4515288f2271f141020
{"isvalid":true,"address":"RWXYahA1NR6p5sBzXBknCaTDGmhSfhMV3a","scriptPubKey":"76a914e911947b9ed9f98913e50d0064f862077f3d66ff88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWXYahA1NR6p5sBzXBknCaTDGmhSfhMV3a","randipbits":2358278621,"coin":"KMD","tag":"6739245804480077645"}
5f8db9862cbea86bed29bc0bcf60b669256c90e16751f7888d39d519cde7f761
{"isvalid":true,"address":"RPkMn5ZH5E7xPbQdCYkZYx3WueAqYKVTyn","scriptPubKey":"76a9149eb516ac39827e32c13866aa711226bcffaf6a5d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPkMn5ZH5E7xPbQdCYkZYx3WueAqYKVTyn","randipbits":2462330702,"coin":"KMD","tag":"11324913039846102509"}
6cf2ba41bf1e2c02292aa00101ae5c76cd4400e11e53e016d6203ac630559147
{"isvalid":true,"address":"RA8GBwKDSyQas9uTAi6ThYi2jNXfrcbyZw","scriptPubKey":"76a9140947d04682d3ed7296161e47d83e364d412d8b7988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RA8GBwKDSyQas9uTAi6ThYi2jNXfrcbyZw","randipbits":2320559039,"coin":"KMD","tag":"691697661607362697"}
e44a891c59676ae770867d90b9b24c403a4255741aca3fa66b973e896ee84095
{"isvalid":true,"address":"RJ8QYKwegf7ApdYsWo3PXrGfX3nBvpN9Zn","scriptPubKey":"76a914610fca9762bdd0a73343fbb7fd0632daf9eed78988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJ8QYKwegf7ApdYsWo3PXrGfX3nBvpN9Zn","randipbits":3364309044,"coin":"KMD","tag":"6358148030402549471"}
a9f6929d64b2f3513660667a068c693dce25a428406e2e43e89f21d327e8fb80
{"isvalid":true,"address":"RW3kA5hhT2Zi19ifVLWh3eHEbF7vGHp5xr","scriptPubKey":"76a914e3cf9890f7dda2aeb1636e102e33a0a78fc5dd1f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RW3kA5hhT2Zi19ifVLWh3eHEbF7vGHp5xr","randipbits":1254871213,"coin":"KMD","tag":"16358443473279198304"}
cb2f5d2ca806f1c6d929aba2200816dd73c1e76d84b7fb3eeaf2298b93b3fb6d
{"isvalid":true,"address":"RHgNtXM72MHF8BtiD9mixaotZvb1W3LsN3","scriptPubKey":"76a9145c2398f7905a487ef2c2dde166629c501817395188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHgNtXM72MHF8BtiD9mixaotZvb1W3LsN3","randipbits":2064902657,"coin":"KMD","tag":"2346456096472089935"}
df4c96cf763367fb5c7bbe119592c7b58664f496646a0536f6789f7ebd072c40
{"isvalid":true,"address":"RWX3kh4b4vR2fsrgEm9SA4KQbWMaJEH5fa","scriptPubKey":"76a914e8f984140df1804f049f854978c029699d96508788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWX3kh4b4vR2fsrgEm9SA4KQbWMaJEH5fa","randipbits":2064902657,"coin":"KMD","tag":"12537419930934684840"}
fce876ee6f84d7b4273fd1b1a0985b95cc9f27c5b9a9491c04552981bc84c976
{"isvalid":true,"address":"RP38FcReMG1hqt4jjLVuGUzbQQPgNwEQ71","scriptPubKey":"76a91496e8be6804163c7b83a0baf3c63036ca3dd407dd88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RP38FcReMG1hqt4jjLVuGUzbQQPgNwEQ71","randipbits":2474273465,"coin":"KMD","tag":"5384244912975550172"}
15d1a53e7e710d19080703bede7aba84401c1e19c765397199d1acf62e162e54
{"isvalid":true,"address":"RUUskhF2uWvRGsnTvhgjMkq48XgZ12EXuK","scriptPubKey":"76a914d2a015bc549478ff8e33b68e50c7ac084e912cf688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUUskhF2uWvRGsnTvhgjMkq48XgZ12EXuK","randipbits":3909093808,"coin":"KMD","tag":"12528796893037423999"}
66aab31fd9b7cc9ba594fec0ab6cfe81be82c6ee2e4ab8bd32e010e3b818b35a
{"isvalid":true,"address":"RT7ENMvL46nwrFfNj1TLa5FEqJzTztHefH","scriptPubKey":"76a914c39004363120a3aa755761ef960155dd1aafad7188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RT7ENMvL46nwrFfNj1TLa5FEqJzTztHefH","randipbits":1542469781,"coin":"KMD","tag":"11491814467570927200"}
8294fd3faa45599a1f40c7fb4f5a8b6d5672b1f4a5a31aaa5f1bc85b6c50322c
{"isvalid":true,"address":"RKyqUmtUmogi4qT5uWxvSh15TwFebrJS4B","scriptPubKey":"76a91475611dfa5f73e2b84c6389e1d05ae24bd626d50c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKyqUmtUmogi4qT5uWxvSh15TwFebrJS4B","randipbits":3558029461,"coin":"KMD","tag":"15194126656935962116"}
635e95f78bb7fc6ad94094730aa9e25c830d604a92634c9d28732512b57a5df2
{"isvalid":true,"address":"RCQGZn4x3AFjQJJwW6hFHfsiQQQ1pL2Kne","scriptPubKey":"76a914223f08ed3f1631212f45737855f63c6e55a1caea88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCQGZn4x3AFjQJJwW6hFHfsiQQQ1pL2Kne","randipbits":726058584,"coin":"KMD","tag":"3967062199769834648"}
b023e334164367987fa52c4149fb81efa6d84d5a01d0836c432ebed4c15f4efa
{"isvalid":true,"address":"RSHNubMtw3ZLmHy9QEkYmwPLy7vob6NvfP","scriptPubKey":"76a914ba832d877e47318901fb3931ca6787fbbc0e73bb88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSHNubMtw3ZLmHy9QEkYmwPLy7vob6NvfP","randipbits":306342285,"coin":"KMD","tag":"4483658653165447734"}
c35fbde14f46e6f848b6edec6d3df9ecaa9928ec31a2fbf4bf2cf4214d1dcd01
{"isvalid":true,"address":"RDTcqgh4MMHLtu9FBCcULqZmP761DFmk9b","scriptPubKey":"76a9142dd955280946cc639cab214bbf446b3ff0f8518588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDTcqgh4MMHLtu9FBCcULqZmP761DFmk9b","randipbits":3634905133,"coin":"KMD","tag":"11344523147445575411"}
62200600b4acb2f6e2e3d8b3935c0909f8271ab219d41972d0d24bf496885fe7
{"isvalid":true,"address":"RWhJ879HiwHEb9sKbdhWQuoSQAFtC4G6t4","scriptPubKey":"76a914eae9ab9dc139c650d4250f8e236d5734a3e555b088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWhJ879HiwHEb9sKbdhWQuoSQAFtC4G6t4","randipbits":3401109677,"coin":"KMD","tag":"16787258714200697070"}
0cfed45ada960afb1bd423c690d0e8927d2e5c138646635b1af889f24512c10b
{"isvalid":true,"address":"RLS7frPLUVeNTMGQx6rBHYmcDgvNrT4cKN","scriptPubKey":"76a9147a59729a5a8dd074584f4e67cd21e0d307897f3a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLS7frPLUVeNTMGQx6rBHYmcDgvNrT4cKN","randipbits":649762625,"coin":"KMD","tag":"11053535089936096826"}
92f3f4309e6bbf972cfe68446751ca764d2f1039afba6869ae9d19391010f4a9
{"isvalid":true,"address":"RTQknkEBMuz5i7m8ZM9BjbuFn8iXNxgeed","scriptPubKey":"76a914c6e07b432daf16066df6547c909084963d1b71a088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTQknkEBMuz5i7m8ZM9BjbuFn8iXNxgeed","randipbits":726058584,"coin":"KMD","tag":"5325563408707364750"}
c65010c8e7cf56b2c430088e8469b24915f329f5a72e5d62794e871a3de702af
{"isvalid":true,"address":"RXfY8PwT85HVhK2cgV9uRpdaLQzTsR5g1y","scriptPubKey":"76a914f58ca7af165e6f00f878b5935fcf2e3c1e05cf0088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RXfY8PwT85HVhK2cgV9uRpdaLQzTsR5g1y","randipbits":3293921202,"coin":"KMD","tag":"9195255102705678520"}
32fdb823cc855083fc99e2fcbb8dabc6070eca610fd7f0ccaaae9add2769f8b8
{"isvalid":true,"address":"RHSUmLRyJwpbdsRtytkGs9GmpZghQWHje3","scriptPubKey":"76a9145982addd174641008df30c1524ad27dfccb8ad7488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHSUmLRyJwpbdsRtytkGs9GmpZghQWHje3","randipbits":3364309044,"coin":"KMD","tag":"8518964928972688730"}
fcec44ec1e7576f6870cdcde063b6882f7b2e988b946b5c353a3f5550b6c8381
{"isvalid":true,"address":"RJEQbNrMQUHELrYPVLPepR2Y3ruAag3hEP","scriptPubKey":"76a914623254bf2cd6434f6fb5c842239774ef249f6dcc88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJEQbNrMQUHELrYPVLPepR2Y3ruAag3hEP","randipbits":4267520539,"coin":"KMD","tag":"16626053169895800025"}
edf9594142d015aa6235ff033c417bd8a7c32b1b5a88efce9d5da84426a45744
{"isvalid":true,"address":"RRBnn6p3pJfyrjFBrDrTD2RJg2AAQVSXa1","scriptPubKey":"76a914ae7c7b8f3c14553692894d655d0006f604fe8aff88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRBnn6p3pJfyrjFBrDrTD2RJg2AAQVSXa1","randipbits":3401109677,"coin":"KMD","tag":"14413840130845658678"}
99349c193d04ebe3a446588b018edb00bd05a99744df88a71a9f70d93b25cfc9
{"isvalid":true,"address":"RJ1DUUySYib5LcwJKFJ78PD3so2GQ89jKJ","scriptPubKey":"76a9145fb3a458652cd3fb73b76d2e80c9bcfdc679729688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJ1DUUySYib5LcwJKFJ78PD3so2GQ89jKJ","randipbits":3310160965,"coin":"KMD","tag":"14126720894847525618"}
752d12092ed2b760f6220ade29cb5bc2a6901e30ed546b671d3e1ac6d5e6e4cb
{"isvalid":true,"address":"RKtGS9q1vcReNcEtP3MzQjfjXyomLK2716","scriptPubKey":"76a914745373da21b3bb80036a769e80f8c6a3d3e4948688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKtGS9q1vcReNcEtP3MzQjfjXyomLK2716","randipbits":2358278621,"coin":"KMD","tag":"17104607943365151277"}
6eec059986ea9c5e82dacff7aa35d393874eb1ff3676638ea847b020779575c2
{"isvalid":true,"address":"R9YZPUTTVNcnKpuQ4JgMaxYzLXmeWA3msY","scriptPubKey":"76a91402e8071e2f5a14918907badf6b94b85c7948725a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9YZPUTTVNcnKpuQ4JgMaxYzLXmeWA3msY","randipbits":306342285,"coin":"KMD","tag":"5232612928191713501"}
070eba63d2bc102861db484c1b55859c4e2f2d5058e5c0e4bbd8e28db2f329a4
{"isvalid":true,"address":"RLyaf3XgjHruSeJd4oj83E8btck7kYPmVz","scriptPubKey":"76a914804cde8bd43649030d5145e9101bb7ac3b23b73b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLyaf3XgjHruSeJd4oj83E8btck7kYPmVz","randipbits":91648679,"coin":"KMD","tag":"10039760411238994711"}
8cd23c312e725e78bfc222a7c19be9f22dcc7ebb01048e1aeb7ed9d92d9edca2
{"isvalid":true,"address":"RF6eSvAE12JNFZ2eT9rwFti2CJT8m13gwA","scriptPubKey":"76a9143fd230db3f6c4886618c38ad4ab20f9288be8e9488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RF6eSvAE12JNFZ2eT9rwFti2CJT8m13gwA","randipbits":2520388199,"coin":"KMD","tag":"13292755015763538750"}
f91d7878b4e4d6f0e7a6c001ac36de4b5a33932671986ff25e8c677b0b44d6e0
{"isvalid":true,"address":"RC2nLGhFUc5Q9QFG1b38gAi9WgSgzQ9hJR","scriptPubKey":"76a9141e2ebb6842a61c203086408455e5eea44dc6598b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RC2nLGhFUc5Q9QFG1b38gAi9WgSgzQ9hJR","randipbits":847292520,"coin":"KMD","tag":"9397111505327710979"}
407eb64d1b0894e582ac0e60d6d81b0000d7c07d2fe46594da900dda8815b036
{"isvalid":true,"address":"RCJHEogA7SW6PxuctPLtaVnXwiu49PyZY8","scriptPubKey":"76a914211d19ce1683dd3659156a274a4edbe93a38f88588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCJHEogA7SW6PxuctPLtaVnXwiu49PyZY8","randipbits":1844341465,"coin":"KMD","tag":"17859576886586018081"}
2cc3b69f247b0d6a8ec638ff4edbdc8298eaf226b3826fba1004d13c703be833
{"isvalid":true,"address":"RJbudEMb7wEEN8QZ18fEkptxjE4QnMECUu","scriptPubKey":"76a91466434d0797d5a5aa97986dae9b8fb0741a0e1ba888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJbudEMb7wEEN8QZ18fEkptxjE4QnMECUu","randipbits":1212417070,"coin":"KMD","tag":"7540453955310013286"}
a0e2c98c384964fcf401a26e3d7babc92a5cb6eefb85bca20d41fa175e749018
{"isvalid":true,"address":"RSdVypRznJsboL6MaP1shkaLhrVFcNx2KL","scriptPubKey":"76a914be5166b5403b56f7efc38cbbcfce87a1450e357f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSdVypRznJsboL6MaP1shkaLhrVFcNx2KL","randipbits":716060302,"coin":"KMD","tag":"6972408695981873869"}
f5783555e153fb023781e4351baa5d04338325ee7c97e56ad36d0e27441bdfa3
{"isvalid":true,"address":"RY69roX9pRXdH3yeF8WMFUDWFEoEdWDn5S","scriptPubKey":"76a914fa347707836553e07a5f7b238176f93b8c960c8e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RY69roX9pRXdH3yeF8WMFUDWFEoEdWDn5S","randipbits":3496806661,"coin":"KMD","tag":"15234119449986174095"}
377b110b0207b3a68fe79c4fc4c7b70f52e2f6b61407a11af0bf86780d8e8e3c
{"isvalid":true,"address":"RWXwZyGf4q7cBakkY4tgupptBbCSvcBsBH","scriptPubKey":"76a914e924c4e0837d80befa971d1b47143aa270c46d2f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWXwZyGf4q7cBakkY4tgupptBbCSvcBsBH","randipbits":114528085,"coin":"KMD","tag":"943732072175534499"}
ce54ec0b12791cb1025baafeba17a11482f42cf191101271539c61a40b5db46a
{"isvalid":true,"address":"RA7UJPwPxqgPHn4YscYWRH5EPQVaFaaaPa","scriptPubKey":"76a914092181f6b17ac6731ae4ca8b86d63f19b602f7d688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RA7UJPwPxqgPHn4YscYWRH5EPQVaFaaaPa","randipbits":3401109677,"coin":"KMD","tag":"2878844206316999883"}
c02114f4ab56ad0af0bf62ca8311b4c654840b1b86ead10c075a88a180a76063
{"isvalid":true,"address":"RUWFJ2c9CvJM8sp3YmaaN6EG58qkZ9M6ac","scriptPubKey":"76a914d2e27b5425896664c33d046856789e297976b50b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUWFJ2c9CvJM8sp3YmaaN6EG58qkZ9M6ac","randipbits":4250743323,"coin":"KMD","tag":"357309525036217724"}
76a5d648f0ffe8f925b501b1be4378b25a2092983933d8fedaa7fd6eb2cc0741
{"isvalid":true,"address":"RRFFxsc6kkfahR7v4paTaUZrPFisuz9Nkq","scriptPubKey":"76a914af246c8e231a108fea8878d5f142d4946428cd0788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRFFxsc6kkfahR7v4paTaUZrPFisuz9Nkq","randipbits":2064902657,"coin":"KMD","tag":"210881918943137081"}
d7bdb5b203224a421197c8cd5e37179cd6e58495d9fe93b10d51cf994d49b340
{"isvalid":true,"address":"RKAkaVY1fgNKDbwSNiFKfWE9o5Rten6yQb","scriptPubKey":"76a9146c7979b415b433a5c8bc8ba508d2429430f5510188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKAkaVY1fgNKDbwSNiFKfWE9o5Rten6yQb","randipbits":206567803,"coin":"KMD","tag":"5746501564338759564"}
34fa33d1032630b84579950bb82a20e4e2543f85217e1acc60ea8b5be29d7f39
{"isvalid":true,"address":"RWFSbi9ECuZWVE37jpkbiKGw7DaFYdNtts","scriptPubKey":"76a914e605ee4325ca45fa3a742617d85bdcf162343ae588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWFSbi9ECuZWVE37jpkbiKGw7DaFYdNtts","randipbits":1212417070,"coin":"KMD","tag":"8736280242584498818"}
73e5694f9114bc263a5806a3cc36cc23585c83712bf76834ab5a54b3f8e59a15
{"isvalid":true,"address":"RYQZmzckzB1gMYZQAYorYUcRuND8J6Lm4Z","scriptPubKey":"76a914fdafead11ddddad539874cc4c20016f5c1c9754088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYQZmzckzB1gMYZQAYorYUcRuND8J6Lm4Z","randipbits":2064902657,"coin":"KMD","tag":"17575441322980275301"}
a92f52a9110bb60b6a25705f0f35f8a951bcf71f3d4af5d1b0df88972033f9d9
{"isvalid":true,"address":"RUVkn1F9g7TxoPbYtegiQoFnPTusP2gzDr","scriptPubKey":"76a914d2caad29e4776ab5a721ca6cd9b8e4c0b8b12b3188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUVkn1F9g7TxoPbYtegiQoFnPTusP2gzDr","randipbits":3644810846,"coin":"KMD","tag":"2583959057534564900"}
e2909b8e5a767c7caaa8906edd752350b00cad780282067c23af2b7f3cf7c001
{"isvalid":true,"address":"RWDt2Xw6gHLdKdFEQFsNqAYYGUq37MvWYX","scriptPubKey":"76a914e5ba533418d08703cceb09411171744dd857c59088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWDt2Xw6gHLdKdFEQFsNqAYYGUq37MvWYX","randipbits":2422516899,"coin":"KMD","tag":"2048027938272322199"}
b304bd4af03705c22481d87a96435c97b88dc2553db6758a7e8b8b507205aed9
{"isvalid":true,"address":"R9vBYQw9tSBhu2c1g4SQhZdhuZeeQrEBoN","scriptPubKey":"76a91406fef164e66fe13fc0d004ee799e5ec45cbc465088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9vBYQw9tSBhu2c1g4SQhZdhuZeeQrEBoN","randipbits":457907142,"coin":"KMD","tag":"9283672618776353727"}
621545f8933fc63cd4dfb84c84ee572e4a34f686465decb037b2ef3953d9614d
{"isvalid":true,"address":"RH2udBo3386n4hatBet85WUxiGao8VVSM6","scriptPubKey":"76a914550d729f014e2a096e36d34b1fc75262020c89c588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RH2udBo3386n4hatBet85WUxiGao8VVSM6","randipbits":54591336,"coin":"KMD","tag":"251527748478896161"}
2a6fe584d8de09f9d98ddf07774f7ac6aa1723c3838344dcc3ffb31cf17f2863
{"isvalid":true,"address":"RUFov2hPGqwtVTVVJGxUL5AGcyFSWmjRXe","scriptPubKey":"76a914d0277904bffa113141ccbbc71873821bf7eea8b388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUFov2hPGqwtVTVVJGxUL5AGcyFSWmjRXe","randipbits":1254871213,"coin":"KMD","tag":"17551086453483742837"}
b26f3ec0c0ab12780c8cc15a616bc69a57ea375f84427645d03af4b575b29ad2
{"isvalid":true,"address":"RG8g7LjK7hdyKp3aoKBRdwzpLy31XMXMLk","scriptPubKey":"76a9144b2c894c2626b5293e55c214cf628f2de606499688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RG8g7LjK7hdyKp3aoKBRdwzpLy31XMXMLk","randipbits":2520388199,"coin":"KMD","tag":"4954973328524652350"}
cdf4d221895b073158cf5a5f18e9223cbee1bf2a9aa6e496fdb9b4ba54ce33aa
{"isvalid":true,"address":"RTDNWLv3EJeKhhwrvBdKuxBLfWz7prmv9B","scriptPubKey":"76a914c4b94e200349e3a08a4d1f86296a9b76d6d3bc8688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTDNWLv3EJeKhhwrvBdKuxBLfWz7prmv9B","randipbits":2324724189,"coin":"KMD","tag":"7142362055829083106"}
bf8326cffa7d143091f1b37e3aa04eaf94e7f1c7122908815245f8ff76ea2b67
{"isvalid":true,"address":"RCdkLhDy7Ec2i7pwAsVmi1rnUufy2TEZmJ","scriptPubKey":"76a91424cba09649f2096b3b58d8230308ef8d3eadd9ec88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCdkLhDy7Ec2i7pwAsVmi1rnUufy2TEZmJ","randipbits":3634905133,"coin":"KMD","tag":"2336355694077200792"}
cbe889025be1cc7a7c96304fcfd880bf4fb19acf9e885e0ef69ed1f04586407d
{"isvalid":true,"address":"RJ7RfZfip4qL9uEJs7Wr9FYtGusQiryMqE","scriptPubKey":"76a91460e0507759fa96a2a05791ad76fdf97bb85baf9388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJ7RfZfip4qL9uEJs7Wr9FYtGusQiryMqE","randipbits":1088793017,"coin":"KMD","tag":"14390406640983825135"}
c85c72314bb4c3164267fb5d7f25a4eee99a682fd92f1f7120b7f9a1b2c95997
{"isvalid":true,"address":"RNW6Kkcdktbeemd2n8NVPCfgnRirzWoiZY","scriptPubKey":"76a914910a3d320cd80073a08cbe7eb7f25eddc6c1ef8c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNW6Kkcdktbeemd2n8NVPCfgnRirzWoiZY","randipbits":847292520,"coin":"KMD","tag":"14017430827874418616"}
fb1ba9f28573ff72aecb57c6a0f2ced35b012a7b937b3187fcd0070b85f3ba69
{"isvalid":true,"address":"RRNkPd3BmppvxVxQCLzKfg2vVT2ypNcVxv","scriptPubKey":"76a914b08f10b08c959821af9501602dced4869746100588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRNkPd3BmppvxVxQCLzKfg2vVT2ypNcVxv","randipbits":2324724189,"coin":"KMD","tag":"13526153211163956794"}
02d621f92d7c18d6ea73beba325036d4ef1fbf54227c7978dd270e3e07a12f14
{"isvalid":true,"address":"RA2uJhw4TktHGHShKBTKoTaGjZSXU9Z2nX","scriptPubKey":"76a91408444d2068632d58ab97a4df1dc529352f54d2db88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RA2uJhw4TktHGHShKBTKoTaGjZSXU9Z2nX","randipbits":114528085,"coin":"KMD","tag":"11739329602920481340"}
dd42502b243f23c52660e8ac3c4e812e563fb2472714773d3f59053ebd741299
{"isvalid":true,"address":"RE1NYFqFG2vmhhHVY7QFC7sTp7zBxvSSP3","scriptPubKey":"76a91433dab4ba613013fc625b8a8f13dfa24ac871a57788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RE1NYFqFG2vmhhHVY7QFC7sTp7zBxvSSP3","randipbits":206567803,"coin":"KMD","tag":"2188765595827953039"}
6adda35ccf807130e1e184ec3be431cbca497891cfdaf2413b8f0758cb77a882
{"isvalid":true,"address":"RSMNwfRUZxbE5YPud3PM46YYML8XsdELf6","scriptPubKey":"76a914bb44df19df2bbee23f70c347b6513769130f89ba88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSMNwfRUZxbE5YPud3PM46YYML8XsdELf6","randipbits":2324724189,"coin":"KMD","tag":"14203284957422953099"}
72e54ad3664eed5c7a7d0795f5269bb7ed23ac9cbdf8a48d924a1aaa0ef02e86
{"isvalid":true,"address":"RUfJhANk7NzFapqGV1zamTgHm47LXsi8Zz","scriptPubKey":"76a914d4991008dd3d3f49219ebad8d81d3be20b68d8e188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUfJhANk7NzFapqGV1zamTgHm47LXsi8Zz","randipbits":2358278621,"coin":"KMD","tag":"7194688126046488756"}
82e7f1134ba7492b89cc22589ee735ebcaa0cfb1581a77ccb576a3c26203c40c
{"isvalid":true,"address":"RCyBEMjM6UgHAEosMCdxJb5VophihZ84hq","scriptPubKey":"76a91428784eee5fcd571e0868215b5e35eca6d5a2f64e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCyBEMjM6UgHAEosMCdxJb5VophihZ84hq","randipbits":4250743323,"coin":"KMD","tag":"17248417093121510016"}
7db24382fd29cf34a67be01e1c07fcbefdeb6bd965210746eddb8a241503bd01
{"isvalid":true,"address":"RSCe76vADETuwWAdga98c2LVdvKcNXeHmJ","scriptPubKey":"76a914b99dc8f9aa36ee23981c6ab7c526b4a49ab0586488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSCe76vADETuwWAdga98c2LVdvKcNXeHmJ","randipbits":457907142,"coin":"KMD","tag":"778630204581031306"}
21f0500514dc34a01a87375873d82dccd88926d8ef42c5449f298a683563732d
{"isvalid":true,"address":"RTkvmxME9rVZBY6ABNqkkbqKvn8WUqgQqr","scriptPubKey":"76a914cab1230d7fb16813ab068980a34de836ca72130188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTkvmxME9rVZBY6ABNqkkbqKvn8WUqgQqr","randipbits":3558029461,"coin":"KMD","tag":"5320375479599427963"}
78058b35527a437bd96fce13c3e514125d0ff1e41ecd43b23e31b3926cff36d7
{"isvalid":true,"address":"R9Udy3hSfnsr6YuRkHXsuKWrZsd8oEm2jb","scriptPubKey":"76a914022a2fa9e4d8b3c9b22c7661652844a0f1cbaba588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9Udy3hSfnsr6YuRkHXsuKWrZsd8oEm2jb","randipbits":3364309044,"coin":"KMD","tag":"15333721779696912075"}
a5dad1b9de870faf83619122fa56b8ddd96b9ba514cdab058f4117efd471f3f4
{"isvalid":true,"address":"RAaQjULJVvG6LLF8NVKPidX1HYtrGSWbCN","scriptPubKey":"76a9140e39c2b09627151a71a5552e7bf60f6805b9512d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAaQjULJVvG6LLF8NVKPidX1HYtrGSWbCN","randipbits":1088793017,"coin":"KMD","tag":"17243448525041517600"}
9d304d9d3c55ca70485ac2d9e079508528d9e4fcc68038350bdc2af1e0a525e6
{"isvalid":true,"address":"RNBqCY6Mcp5ZLgL8R66FzvprYKhXaraeBb","scriptPubKey":"76a9148d962062eb70f15c447163baab98497bb6af33ca88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNBqCY6Mcp5ZLgL8R66FzvprYKhXaraeBb","randipbits":847292520,"coin":"KMD","tag":"6707385559134931632"}
0590159c5841969e39c4009c491c500078ee02392c985fe59baa7c7f6444d20a
{"isvalid":true,"address":"RCMjQirY1RqzJDEKLQjvN4Q35CHgy6LbEP","scriptPubKey":"76a91421c431f36ed6dec6568c7af58fe69f8e32bb534088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCMjQirY1RqzJDEKLQjvN4Q35CHgy6LbEP","randipbits":2520388199,"coin":"KMD","tag":"1770519203948001772"}
421dea2b550587801d8e5a7b77c0e7644455f4ca8feecb57193fabf7dea6a997
{"isvalid":true,"address":"RUtbAxmAqv1V47932T89tt79AN6TzazXSk","scriptPubKey":"76a914d71c39f36e8be76b75818576fa3dce6e000417a588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUtbAxmAqv1V47932T89tt79AN6TzazXSk","randipbits":3634905133,"coin":"KMD","tag":"16491680889809776621"}
4632b4efb5f8d1dfb7e4a52699b31a6fb6b813b34db0682795b8e6c8f744de2f
{"isvalid":true,"address":"RS9erX84xJG17efdZ66qHxhsUMG15fnCsH","scriptPubKey":"76a914b90d297c4cce14a4db9c697b7202ffb291a8e12988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RS9erX84xJG17efdZ66qHxhsUMG15fnCsH","randipbits":1542469781,"coin":"KMD","tag":"17766574050972005361"}
b9561160578cbcb33a2af1dfeb9451a844f27a2778e1866f32225d214ef0f443
{"isvalid":true,"address":"RMJp33AqgWV6oH4iLgN9XaXa2WThNdWdKL","scriptPubKey":"76a91483eff0e4d61e91512a67f03ae3be73e23066a2b588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMJp33AqgWV6oH4iLgN9XaXa2WThNdWdKL","randipbits":585288902,"coin":"KMD","tag":"16365871507310721637"}
af0f9734bcdda97719db25039f07d64c85228f7ecbeb391bfa48849d88f92ddf
{"isvalid":true,"address":"RLG1kAeCLx4heef3FfqcqWe9ysR1BdNMoZ","scriptPubKey":"76a9147870577336ce44b2ef218650b3a865b73e6b261988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLG1kAeCLx4heef3FfqcqWe9ysR1BdNMoZ","randipbits":2474273465,"coin":"KMD","tag":"10744261407829615743"}
d6c372038dda9a16bf33a112ddc403200170f40c8d562dc535d2769a48cb82f4
{"isvalid":true,"address":"RE1wsrDNwW2NnNWM5eE162yp6haLtm5uh7","scriptPubKey":"76a91433f688f3b18263f634aabb69efd3b93a33fde24088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RE1wsrDNwW2NnNWM5eE162yp6haLtm5uh7","randipbits":457907142,"coin":"KMD","tag":"11780765036246479007"}
1b2a1cdc356e3414f977d625465b60b889f19a05ee444c83ef3bfcfa6388e726
{"isvalid":true,"address":"RRbV5dN4N7wUj3iLrv95SWJCZbtkV9uwoC","scriptPubKey":"76a914b2f7b13d911ac7325b79fd9c72730d00cd82286a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRbV5dN4N7wUj3iLrv95SWJCZbtkV9uwoC","randipbits":1411135637,"coin":"KMD","tag":"1438068949713707267"}
b3502fbb49f8c4d629e7126f1ab6f4168e758c8b7cf5c42a16cf299db3b8ab8a
{"isvalid":true,"address":"RTwpYxfrofdzSYg55ci6Us48jHmtS4cjKk","scriptPubKey":"76a914ccc08455e15336a52f15a8e077dd1f86d0fec27a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTwpYxfrofdzSYg55ci6Us48jHmtS4cjKk","randipbits":1505688468,"coin":"KMD","tag":"13886562617860071686"}
56fcc61b28bcc8172ee61c21841cd20d56dce4b16eee653f2623bf5c64a3f74c
{"isvalid":true,"address":"RP6fkbQibLJnKqJTogBpJ1sv6zX9b6widN","scriptPubKey":"76a91497944949e3b91dd584926f4ad6c03571082cd86588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RP6fkbQibLJnKqJTogBpJ1sv6zX9b6widN","randipbits":2582272023,"coin":"KMD","tag":"13785824139789581179"}
952ddf2c76d9aeeaf0a1980e9e6ec4cb2c1d0edd5fb641a987780fd87a2efd94
{"isvalid":true,"address":"RB5AaE1vQKejds89eDxDzsWcDSfi8ixfbL","scriptPubKey":"76a91413aa00f2b3e0b42834712f1d118003f070d084cb88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RB5AaE1vQKejds89eDxDzsWcDSfi8ixfbL","randipbits":3678679579,"coin":"KMD","tag":"4999111739944287822"}
cb10ee752a4b0b82b9aad04995c46578562071e76b332a4b2721fdd4ea2d79d2
{"isvalid":true,"address":"RMPUMa3sjX98GG1RQunbc4mnTqUq4E6ZU3","scriptPubKey":"76a91484d197a55ca3df9d1bfd578d456856b533e963d188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMPUMa3sjX98GG1RQunbc4mnTqUq4E6ZU3","randipbits":649762625,"coin":"KMD","tag":"11958180350852771857"}
1014eff6a17d8e094519427b6e25c01563009ef5df4f0916e6ff0eb3c21bc9b8
{"isvalid":true,"address":"RK5BnRzCP52qsTE4xR3Qysn6m6KeTgpZA6","scriptPubKey":"76a9146b6c05399e340b2eccfa4236256edb12b3852bd488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RK5BnRzCP52qsTE4xR3Qysn6m6KeTgpZA6","randipbits":2007892413,"coin":"KMD","tag":"14446227905410790814"}
4d4535cb9dcf87bc72fdef7e02b23086ee78b7317ef149eb8dbf6dfda4b01ec9
{"isvalid":true,"address":"RUuWvTwNAMGLpuY3GLPBAmMp8ptShkMSyN","scriptPubKey":"76a914d749183b4beeae17edc5c89e7c9660ae592712ab88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUuWvTwNAMGLpuY3GLPBAmMp8ptShkMSyN","randipbits":54591336,"coin":"KMD","tag":"5018494193879306000"}
585da7006a6572f1c0b7b909060349ad46910deab6915c5f7df48171bf1766d9
{"isvalid":true,"address":"RN6TfTEYHdvFAeosYrvDaMBb2yBco47Q5a","scriptPubKey":"76a9148c9211c51a59f12b1dc13f012648a39a7056b09f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RN6TfTEYHdvFAeosYrvDaMBb2yBco47Q5a","randipbits":3337526720,"coin":"KMD","tag":"534424659596494422"}
75c1b09830c5acbeff23f2ea270ac8a69a2b89829533c348515006e58b6eaef9
{"isvalid":true,"address":"RV4Hf22arBv4P4s5eFsUAnXC6N11T8x9tv","scriptPubKey":"76a914d8f1c39ed42cb8be6568f726ffe63f4e81f6e0bc88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RV4Hf22arBv4P4s5eFsUAnXC6N11T8x9tv","randipbits":749314742,"coin":"KMD","tag":"7441787949666968718"}
33f07fd3098bf6d7ab4df6e5c6a2ee651a644c6f2e8895c0ff76d734b1687988
{"isvalid":true,"address":"RYBH6Ha8RJa3CcE91yxJP6z2E6mDFm3bBt","scriptPubKey":"76a914fb2c9506c8d00f379e212575dcac3870426acd7188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYBH6Ha8RJa3CcE91yxJP6z2E6mDFm3bBt","randipbits":749314742,"coin":"KMD","tag":"511634291572145073"}
783e0fd8fd7916ed107586ee44b073436a46284822e98f23340d17f975cb0d16
{"isvalid":true,"address":"RHBHVXLAnvB8y5itKBNxnM8w2zqDRGCg2q","scriptPubKey":"76a91456a307a21837e9c204a58bf20a06b105eb07528488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHBHVXLAnvB8y5itKBNxnM8w2zqDRGCg2q","randipbits":3529902341,"coin":"KMD","tag":"7494929723958765508"}
0b0f79b25d4f4d9adc9d3c7178483d206745713d767914682cc80bf6d15d8efa
{"isvalid":true,"address":"RUY7YW1WmTD3hCvkXmUKLeRnNg5UsJoLbU","scriptPubKey":"76a914d33cd80a35f1b186c90316918341d5427041e19588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUY7YW1WmTD3hCvkXmUKLeRnNg5UsJoLbU","randipbits":119096734,"coin":"KMD","tag":"3434976226585857084"}
5026d39dd6a23266bc22682fd09854ab3c482c8f18ce36ace7bc11f6729766e6
{"isvalid":true,"address":"RBxjj7kxFipThuHR9i3cyumFzM2c1puiua","scriptPubKey":"76a9141d6ae48afde378a6ab28b0c9aa2c5ec4074ca72e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBxjj7kxFipThuHR9i3cyumFzM2c1puiua","randipbits":54591336,"coin":"KMD","tag":"2622549340299730568"}
2cf0fcaa8ef97cf35ffc7079ce26b380fa6e5b6cb546bc6bd9d802b4dd7e9a0c
{"isvalid":true,"address":"REQqBMStNf7gWLxvG1a9KnbSgV78Hk19Js","scriptPubKey":"76a914384a82bdc7803e98e226447234e784e88e93a92d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REQqBMStNf7gWLxvG1a9KnbSgV78Hk19Js","randipbits":847292520,"coin":"KMD","tag":"15965009567113204449"}
751f17608d49b2a9167ef27c060f8b3e7bc091c924f296f0dc728be89a64bde6
{"isvalid":true,"address":"RNVwzuZynZ7d4DE5CfT8CWkxsp9TtCY3BF","scriptPubKey":"76a91491034a2cecea787192a3e3e89a01cd5c9345ff4988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNVwzuZynZ7d4DE5CfT8CWkxsp9TtCY3BF","randipbits":3510593118,"coin":"KMD","tag":"15837593094225797232"}
2d6eb44496a5592b3055c21fe4715d031fe9f6fa98ce600a07d444771c439553
{"isvalid":true,"address":"RHTDjCzn36ERtpE2DddYZq162EL9DZcsbK","scriptPubKey":"76a91459a68b09c1d233068d1a667145d6c43ee34c0ecc88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHTDjCzn36ERtpE2DddYZq162EL9DZcsbK","randipbits":457907142,"coin":"KMD","tag":"12565475373131426932"}
8980af120fc9c2c63dc69ac2269545080c4b6f2565128b0296e9f9f026e655e3
{"isvalid":true,"address":"RBBMrEHLVicGMQx1Do5FBUFP2tk5QiTD5a","scriptPubKey":"76a91414d5e98308cc6adda82731d2e38fdfeeaea436e488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBBMrEHLVicGMQx1Do5FBUFP2tk5QiTD5a","randipbits":3529902341,"coin":"KMD","tag":"300934710021873493"}
805383f9257764387480475987857f677ec8a55d0da478ba606728f32e92052a
{"isvalid":true,"address":"RWfVv2z5FrHmKPayFfSM4FZQpgBctbPHTk","scriptPubKey":"76a914ea92ae8aec967c174909ac5f798cb755e1e162d788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWfVv2z5FrHmKPayFfSM4FZQpgBctbPHTk","randipbits":3350674129,"coin":"KMD","tag":"7098830207905164869"}
fbdec954360187e674ee97fd26a230aaa20e4aca3e1ee0b43a5c26b598a4f2b0
{"isvalid":true,"address":"RBy9jDvvNgvRGeyWh96rhvwLJ8zR44YTBj","scriptPubKey":"76a9141d7eedb01b9c96f3d55f8628f88f76d58d65640288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBy9jDvvNgvRGeyWh96rhvwLJ8zR44YTBj","randipbits":1254871213,"coin":"KMD","tag":"1319568634314930573"}
a1fca322764d9a3f1322a1cc52a489d5c1054f0d5c0c2b2d2d62b4f7ecba8544
{"isvalid":true,"address":"RMeXSe9FBfb7UA4rWKbbyUykF5SWsQFu2a","scriptPubKey":"76a91487aa68b72eb2d26ef5f77d3894db960ef59bfb0788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMeXSe9FBfb7UA4rWKbbyUykF5SWsQFu2a","randipbits":3510593118,"coin":"KMD","tag":"394498272477560351"}
bd8e8d2f4f976569984d68d7963246bcac817dc03c396f846e37ae000a63ae4b
{"isvalid":true,"address":"RHGSJf8UV9zJTdszmggAPdmNzzewrc5fnQ","scriptPubKey":"76a914579c7750254b9393561cd536eaaada5707dbcdd788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHGSJf8UV9zJTdszmggAPdmNzzewrc5fnQ","randipbits":3337526720,"coin":"KMD","tag":"6694083873737818898"}
940095b2a0ede8cd6bcc1169e28ca8b05c92ad270e51273231ed91e5cf45d53e
{"isvalid":true,"address":"RK7jYxdWFmDNEyutSbt5mLYdAdqsJv2E7A","scriptPubKey":"76a9146be75ee62891cdaeb881d5fb5163521742bc73cd88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RK7jYxdWFmDNEyutSbt5mLYdAdqsJv2E7A","randipbits":4250743323,"coin":"KMD","tag":"16731422082360975529"}
4f4eca5a7373bec93bea81e1f60808812d287b89db50035c67a20307deb3a383
{"isvalid":true,"address":"RUQYagJpBH5Enm8jRJcY4yfGUtKdXe5jLJ","scriptPubKey":"76a914d1ce6a9fcb1eb633c27d4a406397c7cb32f0623388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUQYagJpBH5Enm8jRJcY4yfGUtKdXe5jLJ","randipbits":3795805790,"coin":"KMD","tag":"4521076885978381865"}
94db6f0136d3f779911653a56f84a28e7a3c35b9487d53a259b31c6f45438d79
{"isvalid":true,"address":"RKNQdaiP4PivQqtE9wE3nPHFZkkBXSmprU","scriptPubKey":"76a9146eadd0f5aab812a543e7e30ce6b8204204a1db5488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKNQdaiP4PivQqtE9wE3nPHFZkkBXSmprU","randipbits":4267520539,"coin":"KMD","tag":"11442699958332113711"}
4344a05556982b7bb204616ccfe75e06807bc325565ff873277aec898f555d64
{"isvalid":true,"address":"RKiCeCxYaJNGfgvkbH1RHsVctR3JWtDNw7","scriptPubKey":"76a914726c209c25bfe7b9ca4efd1d043f1b520661c69388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKiCeCxYaJNGfgvkbH1RHsVctR3JWtDNw7","randipbits":3756225191,"coin":"KMD","tag":"13589462905750214810"}
d1f1146089eadd90054cb74d8de79937017a8b0d5ee6f928ef2e24e88aa4e15b
{"isvalid":true,"address":"RU3zngUmo6Mg4kDSWdLazMS5ht1RxQ7DCM","scriptPubKey":"76a914cdeb8ec9727b93b2abb369a2936e3fe213d3b83388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RU3zngUmo6Mg4kDSWdLazMS5ht1RxQ7DCM","randipbits":3644810846,"coin":"KMD","tag":"8690642146235803592"}
8048ca4813cc758c747f3a190f11b9dcb48d4bd15271aa1372f85dd690490345
{"isvalid":true,"address":"RMuMHC1Gp3b8yCUD5XsQH85QpfrRm1kLyS","scriptPubKey":"76a9148a782a3541059ec42d67786223bf282fd863afd688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMuMHC1Gp3b8yCUD5XsQH85QpfrRm1kLyS","randipbits":2320559039,"coin":"KMD","tag":"10001715180968585266"}
dd5c616d14054f3c6386df8ddaefad3348655137644b5e28b4ff9e8c436aeddf
{"isvalid":true,"address":"RNScwyFBUV5yZz6svwsVD7fVDrAydrqFRG","scriptPubKey":"76a914906223a25fbadbd61240bfbd091bac775c1f8aea88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNScwyFBUV5yZz6svwsVD7fVDrAydrqFRG","randipbits":1923364494,"coin":"KMD","tag":"12150764634426200372"}
7ddb9993f4fbfebd2be2b6219ae7e28987d1853acb6f50a7c2f9d9e3b9bca654
{"isvalid":true,"address":"RYWjav2a7USMWe5qK2rtLkzRgE4Ciezb9Z","scriptPubKey":"76a914feda99e4e1cbdaf75988e3b9e4769fca9c8fef2a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYWjav2a7USMWe5qK2rtLkzRgE4Ciezb9Z","randipbits":3529902341,"coin":"KMD","tag":"13857744196806816320"}
b16b2e0c7b2b269a65a23e27961ba53774befcd298a44e6e790ee23b37de90b0
{"isvalid":true,"address":"RSbNJbs7PitRvqqVMdCpzD1yKBMM3gGAQb","scriptPubKey":"76a914bdea295b83d94bf60f6e3fbb0a2678c41c59dede88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSbNJbs7PitRvqqVMdCpzD1yKBMM3gGAQb","randipbits":1088793017,"coin":"KMD","tag":"16902010955508909"}
23472f0b052ea3613807d17fff268169d92ebd39102238968b6209e1c12cac5a
{"isvalid":true,"address":"RBbxPEyNRrJ5f3QtG6yz8hco3nFZPoLeUM","scriptPubKey":"76a914197cb92d18306351e887459061c1691bc8677f2a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBbxPEyNRrJ5f3QtG6yz8hco3nFZPoLeUM","randipbits":306342285,"coin":"KMD","tag":"3783173686883055537"}
63b3ca7f8adf7df6a1dd7b8e9a3836d094fd14b5c043fda62161223f6a89237e
{"isvalid":true,"address":"RPriQZfzzgin7y2Ns6vxdrMAa4XgZqdY6y","scriptPubKey":"76a9149fe8cdfa1ff37c6051aff789f52534e0f87b760e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPriQZfzzgin7y2Ns6vxdrMAa4XgZqdY6y","randipbits":3350674129,"coin":"KMD","tag":"7767367854665040092"}
8b57bff58cbae87e299647b9b027c5a0646b9e7f0d67c0fc1156067a91521fb6
{"isvalid":true,"address":"RFbaPjT7beKPWswQHcHSpicRJ35ZBMCPC4","scriptPubKey":"76a914454ade6e54f6c5bb738d3e93906451fb3d7be2db88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFbaPjT7beKPWswQHcHSpicRJ35ZBMCPC4","randipbits":3644810846,"coin":"KMD","tag":"1633406094519773603"}
4b90fdf777eb0b005179d129d4cd735a5c2c66e4392058765445fd4b473b1ef0
{"isvalid":true,"address":"RSCdeeWvzpBhg2tKnCWZWKw9iAMyYWiREG","scriptPubKey":"76a914b99d6780a34383e9afb2ce0ddb59d013bb22dc1888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSCdeeWvzpBhg2tKnCWZWKw9iAMyYWiREG","randipbits":649762625,"coin":"KMD","tag":"3248725960354162385"}
6cac71e1faf5d7d28396480f095b4f78f73685ef0327d4453c1f1a5b8d60ff0f
{"isvalid":true,"address":"RRjuStV5BMjwEueeEZT8DWBaUx9gQjRDLG","scriptPubKey":"76a914b48f5c3796a0f05f66cb8208653996f0f69279ea88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRjuStV5BMjwEueeEZT8DWBaUx9gQjRDLG","randipbits":2462330702,"coin":"KMD","tag":"12254026536075417754"}
13311ca88878ae6f4040a61704faabd8b8b4b633cc898cf96cb973684de26a17
{"isvalid":true,"address":"RUAvb7FFPvxjNTVhABeS2EbbdUi2LfGNMj","scriptPubKey":"76a914cf3af6c2197d16c8349f98b3aa5f48c98fc51e3888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUAvb7FFPvxjNTVhABeS2EbbdUi2LfGNMj","randipbits":1374184384,"coin":"KMD","tag":"15878239814491599651"}
617dbf8b37dc4f6f74545c54110ad9bda172cf9920ebe224ee5365790e0c51f1
{"isvalid":true,"address":"RDs6US7EYgfFrKiPzMFT84PcoQWUCniwky","scriptPubKey":"76a9143249f795abe0ff5f15bb08c8fa7b0c4e85cfe35d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDs6US7EYgfFrKiPzMFT84PcoQWUCniwky","randipbits":3606291758,"coin":"KMD","tag":"304075312990232153"}
470cae60ebb45da984e69e6bbb07612cacd231707998699ccef238e6e7ec9f95
{"isvalid":true,"address":"RQuMEMn1TG7CCpbmYCVcDfPqesEvEkisjC","scriptPubKey":"76a914ab608060994e0d84a92d4ede5ae7521250945f0588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQuMEMn1TG7CCpbmYCVcDfPqesEvEkisjC","randipbits":716060302,"coin":"KMD","tag":"16841908010320994413"}
fa7f4bc04cb787b60266390c75a11596e43e3b1de93d7eaf9c1275cfca1ea711
{"isvalid":true,"address":"RVptmyXVcTSkZQNd7UMgDz73p3AdfsamLS","scriptPubKey":"76a914e1616213dce019aa785d4f50e93044323a3f3f9688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RVptmyXVcTSkZQNd7UMgDz73p3AdfsamLS","randipbits":2007892413,"coin":"KMD","tag":"17542855293629488829"}
10a0f36aa4b41085b2729cb98f4c5ff2ebd36d2b494ec56cb3e8a1d83bc7a521
{"isvalid":true,"address":"REe9cFdWLNNDbCgWMNHAYBU4hBjUsu8zgY","scriptPubKey":"76a9143acf4d5e59871fcb370ec2e33722ea65bbb309e988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REe9cFdWLNNDbCgWMNHAYBU4hBjUsu8zgY","randipbits":1986374819,"coin":"KMD","tag":"11909432399170482093"}
527582bb80e267d5f81dace2041ae354223c40dde432366aa9a90e9e1ed33c9b
{"isvalid":true,"address":"RBNB5mKstG86jYRjrKFgJuFoUFvZKJb9Wq","scriptPubKey":"76a91416e1800d3dd586c4c6d91121ed749fd04471cc1b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBNB5mKstG86jYRjrKFgJuFoUFvZKJb9Wq","randipbits":3401109677,"coin":"KMD","tag":"18350877783347530320"}
de9926f4d719e8b6ec643f3f5a631d36197b0b7170c20947f7135373ce3519f7
{"isvalid":true,"address":"RHoouCBBapEHE6uyX7CxHGFcRwUQFGMot5","scriptPubKey":"76a9145d8b6349c3527dca7775b2b90a58a7de78faa22588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHoouCBBapEHE6uyX7CxHGFcRwUQFGMot5","randipbits":3350674129,"coin":"KMD","tag":"7123808566180249738"}
464b5f7fcb81232475b060b48cb02060b79e6670e658a78dc342bb01986f787c
{"isvalid":true,"address":"RAvtq1kazCRZUvWvPsN7ioY2Vt1EYtgpuz","scriptPubKey":"76a914121988609954b7cab724bb1a7b765007be0af53f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAvtq1kazCRZUvWvPsN7ioY2Vt1EYtgpuz","randipbits":3634905133,"coin":"KMD","tag":"9537577755089129848"}
ed73d122e844f89644b2834139e97aee01d9cf916cfd054087ebac3d02d64eb5
{"isvalid":true,"address":"RLHEGDwXuXQwhYkrhwSRGSJMFuvv7EAT7i","scriptPubKey":"76a91478ab350e4688cde485981b263b107ca8530df35388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLHEGDwXuXQwhYkrhwSRGSJMFuvv7EAT7i","randipbits":2358278621,"coin":"KMD","tag":"5718268358216405838"}
5965e76bcd04dfc7f05fde7d38f4485eaf8996d1a16967f0073a6558b67b2a9d
{"isvalid":true,"address":"RMWZenedfv1AQtuJw1EzYj9R2FxwzFpd54","scriptPubKey":"76a9148628ecf9c505db39c9d7f970c51b32b1800ab50388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMWZenedfv1AQtuJw1EzYj9R2FxwzFpd54","randipbits":1505688468,"coin":"KMD","tag":"4674256031372819957"}
86851cbc08c16417fa68499e3b79b41f504d9245b788872e120558d0eae5ce31
{"isvalid":true,"address":"RAEtFUqe3jwVxLywCga2eKQxT2DiewsUuN","scriptPubKey":"76a9140a886960c8b160b4320158608a2aa4b092e19ff088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAEtFUqe3jwVxLywCga2eKQxT2DiewsUuN","randipbits":114528085,"coin":"KMD","tag":"10552555834387036968"}
6dd815f89a731a406b09900fcf324303a7be8c13365ab9a7dec63f60c1139192
{"isvalid":true,"address":"RUcDMtu7fA3ATbHHsDTsZ8KThgd1ivawym","scriptPubKey":"76a914d4035d191e1b7a8fbd75017d3835615c740a9cd388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUcDMtu7fA3ATbHHsDTsZ8KThgd1ivawym","randipbits":54591336,"coin":"KMD","tag":"13813100490014569188"}
e8815e7710ae3e4f1e3e04d862557e8398d6fa7cf8c49f03e1c32e90df74659b
{"isvalid":true,"address":"RDndtdqjEgQ2kyiCzpeWEtf9TSDJnMBvao","scriptPubKey":"76a91431721cf6ffd22fc321672a296b736700a7da0b5488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDndtdqjEgQ2kyiCzpeWEtf9TSDJnMBvao","randipbits":4250743323,"coin":"KMD","tag":"7291875145736103770"}
5098d95a95c46aede54f23dc304e194ccdb407656d48b9485ce38ae2ed0b6713
{"isvalid":true,"address":"RG2cAef3JbCXiQkzPgrqS52HAQrBzJiAy4","scriptPubKey":"76a9144a06bfc7b5774b79b75bb1fd59aa55564ca7851888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RG2cAef3JbCXiQkzPgrqS52HAQrBzJiAy4","randipbits":1254871213,"coin":"KMD","tag":"6911754146836909525"}
9614014f177326c1ecb7deca198da9a42f7d12e000cde4805a8932507174aa63
{"isvalid":true,"address":"RSFJ19qzQbtYJQD98pqpkTNoBEi9gM31TA","scriptPubKey":"76a914ba1e408d6de31fdcf06b0630e7fd141d3baecb0988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSFJ19qzQbtYJQD98pqpkTNoBEi9gM31TA","randipbits":2324724189,"coin":"KMD","tag":"14797953134924064379"}
69e29c31f55c34b7e5a13d73ed9192b545c91d2a077d1ab1144951e5f76016d9
{"isvalid":true,"address":"R9gDQRa62Eg24qwZd3Pv374bYbWf4BSLZs","scriptPubKey":"76a914045aac8c4b5e08a096bbcb3731883d85df7c8e5e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9gDQRa62Eg24qwZd3Pv374bYbWf4BSLZs","randipbits":3812583006,"coin":"KMD","tag":"9620290839030244767"}
cea46d425815acc0c1a850e96387f2aa5a9a4dbecdecbd8de6943d1427d3f941
{"isvalid":true,"address":"RTh7GDBqLRDMYLdQyE7HHooBobztNXfsdW","scriptPubKey":"76a914c9f83a320582f8626b687cb068e4d3414560d8c888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTh7GDBqLRDMYLdQyE7HHooBobztNXfsdW","randipbits":2320559039,"coin":"KMD","tag":"16922858734762556442"}
5150e662e2bd14543c2431878e65d9f0af277b753bac98b961a90dd702507c68
{"isvalid":true,"address":"RKEkubK347PwSM9SQ9eReFng1yFrEbGN8C","scriptPubKey":"76a9146d3b6a051157ac77a03b33d114f9a5afd33f904688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKEkubK347PwSM9SQ9eReFng1yFrEbGN8C","randipbits":2324724189,"coin":"KMD","tag":"4744510157175025104"}
23bc43496ede3eacda904ea0d0e1f5ca5d986dc8a1ee7b8bc967ebfc54ae1b56
{"isvalid":true,"address":"RHMKLGnyum4miEW55qL8Mawv7KdGsjbmAB","scriptPubKey":"76a9145888b9ced1e7b109b7726285f282c610b934b5b288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHMKLGnyum4miEW55qL8Mawv7KdGsjbmAB","randipbits":3350674129,"coin":"KMD","tag":"5367532454610447559"}
62b7d9122629b14ea243792661d1b79f030e38828e5c1923b057f1cb8e002cce
{"isvalid":true,"address":"REzcqBkARMCCxkA5rVdp61f7rovmFtq5kf","scriptPubKey":"76a9143eae58974a1556bf59b8466cfc7722c48c8e63c888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REzcqBkARMCCxkA5rVdp61f7rovmFtq5kf","randipbits":1212417070,"coin":"KMD","tag":"11412226478957048194"}
cf033ccd827c66a31fed7c0f632220fbf962ba85e3ed32a20bbd5c451ccec775
{"isvalid":true,"address":"RTuiEzbcX7N1j1oXSwBbRE5n8s31wzyuXQ","scriptPubKey":"76a914cc5a6afa24ae63f07a2f5be771ac4c7019f7d7fa88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTuiEzbcX7N1j1oXSwBbRE5n8s31wzyuXQ","randipbits":4233966107,"coin":"KMD","tag":"778006809548776634"}
9d3a45f497d3d8f4692f8c987fe61804f8c7472cb63d603b8cd9874845fa970f
{"isvalid":true,"address":"RVcyGvC5uYhT1UguHu1wgHxSTH6JEx8NHP","scriptPubKey":"76a914df2025ac1ca399941504360a093fbf6f2c1374ae88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RVcyGvC5uYhT1UguHu1wgHxSTH6JEx8NHP","randipbits":54591336,"coin":"KMD","tag":"12876797057007631595"}
5e5540d6242d839f13467208615208f77ca79af123bb1e87eee1295e058e74ce
{"isvalid":true,"address":"RQKrkjKAvhPvhB3f9yAjipBPutJAP7TA32","scriptPubKey":"76a914a50b00fd9bd4ab6716a1a8388fc06260fff597c388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQKrkjKAvhPvhB3f9yAjipBPutJAP7TA32","randipbits":749314742,"coin":"KMD","tag":"1385317779138681935"}
f508d1cf5b97a96642542aa664a2bf1e12355f5e65760dc97c0b8330d0b6dcf5
{"isvalid":true,"address":"RFwK8bejf6ANo61ipukbXxto15z55CwRUm","scriptPubKey":"76a914490672ec2d4d90f387a5234879c9218484fabb3288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFwK8bejf6ANo61ipukbXxto15z55CwRUm","randipbits":2320559039,"coin":"KMD","tag":"4313376125996087051"}
76a5b7c320eb55b7dbaeb182e9d04b78da451121a7726a3c9246e47dd5ed0da8
{"isvalid":true,"address":"RFHBwfH6pSfzaw3WDvV84ii4SGvGpEtgjJ","scriptPubKey":"76a91441d0a442f03aeedb063a5abead3b7952a7028f6088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFHBwfH6pSfzaw3WDvV84ii4SGvGpEtgjJ","randipbits":2324724189,"coin":"KMD","tag":"8759821642199629279"}
c4fec5cedfd6c87cdec0e3581d2ad915b36b05589d5c8b2a3cc5ed363dfef0d2
{"isvalid":true,"address":"RXKZmFmmpfAV2DAdUUXhA88RqCoyPRXcnA","scriptPubKey":"76a914f1c5b376a2ece345538303b7909537eea0dc673d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RXKZmFmmpfAV2DAdUUXhA88RqCoyPRXcnA","randipbits":2422516899,"coin":"KMD","tag":"8492321325267627692"}
aad28724a994936e8247ae00442db08e3d1bdfc16bc5cfae8a99596e3e1a58b6
{"isvalid":true,"address":"RCxnQhmYdpK9vTS7PLRtXBtDk2HaRNo1qk","scriptPubKey":"76a914286541fe60f8df629cc7fd38178fdb3d3da9ed8088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCxnQhmYdpK9vTS7PLRtXBtDk2HaRNo1qk","randipbits":3558029461,"coin":"KMD","tag":"18417126252958022460"}
98e3bfcd7af8d2d9442e3bb6ed41e1dbbdc4b352171401c925cca2ac28617319
{"isvalid":true,"address":"RNFLSwnYtoA5Gjb1eHDszeGLtxaE9yPiFp","scriptPubKey":"76a9148e3fca2cf0ebbf8951534c93f4874c0aa877475c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNFLSwnYtoA5Gjb1eHDszeGLtxaE9yPiFp","randipbits":1212417070,"coin":"KMD","tag":"9599710567188407177"}
27d879a8c15eab6e578372ef23d4cd341f40879b973dbc0d136c61156c32a075
{"isvalid":true,"address":"RPtwW4UejbAxs5PU6a1zMPcPqW7SVghMDS","scriptPubKey":"76a914a0549146a960c4a94c6b5e32e920b1c998f27d4988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPtwW4UejbAxs5PU6a1zMPcPqW7SVghMDS","randipbits":1986374819,"coin":"KMD","tag":"11042382638743199135"}
eb456947490ef5307495665184ffe4972d46c607987729f7799e94353198ae4f
{"isvalid":true,"address":"RYWPYz5qotHsukbFpzRksctMUBobmWLdkG","scriptPubKey":"76a914fec9e0d27479c32069dfbf7508dbde33580059f188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYWPYz5qotHsukbFpzRksctMUBobmWLdkG","randipbits":4250743323,"coin":"KMD","tag":"17319290498951891263"}
50e8b42e36624a41d81e1b76fdcd8672fd7e0aee06488bec8e2dfb7cf1126339
{"isvalid":true,"address":"RBnTykMEj7GPYN1v8VtE9rrPvggZGuHzct","scriptPubKey":"76a9141b79966b3b9d5945e0cdd171c8c7d376d02d2cd088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBnTykMEj7GPYN1v8VtE9rrPvggZGuHzct","randipbits":306342285,"coin":"KMD","tag":"12897443633789600924"}
1b14ec04e35f10a4f739f50ba2426417da50604ebf555fce8d993b7a554c4f25
{"isvalid":true,"address":"RYMzZx5nxKrMtTm3TNeheVn4RooTGvhsNd","scriptPubKey":"76a914fd335d6f4fc38b4a4a987df588c44725ebb7343a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYMzZx5nxKrMtTm3TNeheVn4RooTGvhsNd","randipbits":4250743323,"coin":"KMD","tag":"954207933552674459"}
90c7027fcec618acd43127a249a20f94dda8e2e10ef565d0285ca48829c95381
{"isvalid":true,"address":"RPyKbtBPVb3FYv5iFULNUB6bq9DdvekZuz","scriptPubKey":"76a914a128ae07bfea203567eed1d4387e9982cdb220fa88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPyKbtBPVb3FYv5iFULNUB6bq9DdvekZuz","randipbits":3756225191,"coin":"KMD","tag":"15826281881566727460"}
f29fe74e7e4432e47ad5e7107d2defb2d5f5fc817fa970b418454af4177dc84f
{"isvalid":true,"address":"RVcGdBT2N6Fbqbptj3R4zhZYNB4WJQWEns","scriptPubKey":"76a914defe36b60170a9e8e9bd72c6d2e261ae3844e71788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RVcGdBT2N6Fbqbptj3R4zhZYNB4WJQWEns","randipbits":2582272023,"coin":"KMD","tag":"16897803795030709684"}
e7be7bd4a50917ae08dbcc552899579ce007c04c450db239ed04ab21a6b3c0bb
{"isvalid":true,"address":"RPZ1G1SP3qmfdmwxeLzuFYpeg2YgsyDmKm","scriptPubKey":"76a9149c8f629187105a8fa636522df9ac5a7733ec87c088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPZ1G1SP3qmfdmwxeLzuFYpeg2YgsyDmKm","randipbits":2324724189,"coin":"KMD","tag":"11315948320004966528"}
d0192a91c0fcbfbc3bc9f1dac9d69cc9833713be6a46ad45685d74b43cd3c935
{"isvalid":true,"address":"RH4SXj2zZqfG4TfejyHcVpaoPoDv1Uonnf","scriptPubKey":"76a9145557a99fd7b24c7446c3073cfd32fa0f1cefa4d988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RH4SXj2zZqfG4TfejyHcVpaoPoDv1Uonnf","randipbits":3909093808,"coin":"KMD","tag":"7344087155129809820"}
0faf3844c6a7a397ae493073c9dacc11837767029ea30230c25891b9b6a86c68
{"isvalid":true,"address":"RQrV64mBwDgfSSe7Tf57xApNUYKfgeAyUx","scriptPubKey":"76a914aad5cff252e7d513f77b0641975ae825bb126ee288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQrV64mBwDgfSSe7Tf57xApNUYKfgeAyUx","randipbits":1505688468,"coin":"KMD","tag":"16079253493034989224"}
abf5bfde999429f715526121bb39c69848923ac19625a38d25be7a22048df736
{"isvalid":true,"address":"RV9osrAbwSAdNpm6qNXJrC2gk3nZhp3dZB","scriptPubKey":"76a914d9fd124397928b0bdb92db17d84a62361a28cf5988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RV9osrAbwSAdNpm6qNXJrC2gk3nZhp3dZB","randipbits":1077965479,"coin":"KMD","tag":"9988292869269206255"}
175cc61e5248906edd3b7db690c214b14ab46cd0ec2f5e8f92578342c34831bd
{"isvalid":true,"address":"RNhXnjLYF8xWK3WJ81QGayVKspv39piE9A","scriptPubKey":"76a91493341264d21e46de1fa136ee1c9262ce4c78dc2488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNhXnjLYF8xWK3WJ81QGayVKspv39piE9A","randipbits":847292520,"coin":"KMD","tag":"1403051894683228468"}
a6c9cfc58d407efdc675c3728f341c742dba746bdca5f453fa12a3b8e3d3f890
{"isvalid":true,"address":"RMtaFKtY9shLtoP3WBZqWgwGFGnN48aEms","scriptPubKey":"76a9148a5292eda04f6c8320528f7021b628292e0101aa88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMtaFKtY9shLtoP3WBZqWgwGFGnN48aEms","randipbits":3756225191,"coin":"KMD","tag":"6503461066901703669"}
ff046afbfa484fd79b46eefed4456dbae47b3c5925bc4f4a5eb7e74145cbc3de
{"isvalid":true,"address":"REtq1LtbLVo6bz68f9TGFduNmUTKqG7vnH","scriptPubKey":"76a9143d960379bf0e4810f83901222e7336b22cfe96a488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REtq1LtbLVo6bz68f9TGFduNmUTKqG7vnH","randipbits":3634905133,"coin":"KMD","tag":"7508633147319547146"}
76905fc13c9ea057bef4c2a19572cd694a7f370342ebb3c19d4cc3780e6dfceb
{"isvalid":true,"address":"RS3rMPEGouBWbHKStyQg8TxVmtwFQ6ebh3","scriptPubKey":"76a914b7f4439822570e19407915681dceef4216d3d2c988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RS3rMPEGouBWbHKStyQg8TxVmtwFQ6ebh3","randipbits":3529902341,"coin":"KMD","tag":"1611789650002957008"}
e69fe9437bd18e84094ccf24539aa247504880990a9070a8ab15e029a0c637b4
{"isvalid":true,"address":"REEwT31zNEKL9B6ufdEeh3v39kaGXXmbHM","scriptPubKey":"76a914366b95d90bff5aa4fdd0639a0a94efb7b27e785a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REEwT31zNEKL9B6ufdEeh3v39kaGXXmbHM","randipbits":649762625,"coin":"KMD","tag":"15096574960004591485"}
56d892f8d413a17d6c37994551757f9a995eb4ee153269b06e27470d7bf67ac1
{"isvalid":true,"address":"RGzvr4JSHDLDQAGBwdyoUiUuaYn5sUwKNd","scriptPubKey":"76a91454ada2c4bfec4e7ed82382211696f9ce87b09c1688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGzvr4JSHDLDQAGBwdyoUiUuaYn5sUwKNd","randipbits":1212417070,"coin":"KMD","tag":"18297255803991747940"}
9c666a9485226b43ea7347c3501a1e202c15cc774198af8c7ae08c2c2ed55562
{"isvalid":true,"address":"RUNnhqkaV7SLEGCaD72mPq8nmY4c2kFpZg","scriptPubKey":"76a914d1795fd0bc9baf0088a8b83a6d740d93f3278e1488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUNnhqkaV7SLEGCaD72mPq8nmY4c2kFpZg","randipbits":3795805790,"coin":"KMD","tag":"2145714060452604690"}
df90b57f4b9449064e3ca431d57060852a90f0985a2d54fcc70630712d9e0370
{"isvalid":true,"address":"RKKuzpkq1jxGAJSbADQzUDHUbfNvVCKFpW","scriptPubKey":"76a9146e35150271cf43c66a7a922835b9fad8d45ef6db88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKKuzpkq1jxGAJSbADQzUDHUbfNvVCKFpW","randipbits":643714192,"coin":"KMD","tag":"2946658726146331625"}
03af4acfcc572ef72a52a3de00f0f5184335d46cce10759768b4521faa4ca7c2
{"isvalid":true,"address":"RMD1wVnzMmKn8uMTHaP9pYfCWkxf3QVWWE","scriptPubKey":"76a91482d761f006050eb1b113a3888661d5e0375f05d988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMD1wVnzMmKn8uMTHaP9pYfCWkxf3QVWWE","randipbits":3812583006,"coin":"KMD","tag":"16372490744275563321"}
1cda54568e4675b0b518d7e263a21d4af5cb770b57746db815da857d4a3e401e
{"isvalid":true,"address":"RKxR5Zafxm5WcmFFBdfWYTk55Qv6fbC4Vd","scriptPubKey":"76a914751c5536fa26302c9f156e8fc30b1e3af5ad40f488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKxR5Zafxm5WcmFFBdfWYTk55Qv6fbC4Vd","randipbits":749314742,"coin":"KMD","tag":"1309576106322226605"}
951d923d10a05f21b958e1995a6c7b629896baad1fd29b3b6ebfea9ea3c7fd16
{"isvalid":true,"address":"RFAPtYANyAs9hhwUBNYemugxjhpwp4YvwF","scriptPubKey":"76a9144087b3baa1860e9850a116b233f09428bea53e6388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFAPtYANyAs9hhwUBNYemugxjhpwp4YvwF","randipbits":3529902341,"coin":"KMD","tag":"5056643247278593208"}
fee88cbd9256d4040147f1a9084c837cfe543c65e6c517d725053e0f4cce4fab
{"isvalid":true,"address":"RQCEEEprmqghZHN73iG1C2XvYTTQ6FB2wE","scriptPubKey":"76a914a3999a1d550236b3751f2686b9bb028a6d809c2488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQCEEEprmqghZHN73iG1C2XvYTTQ6FB2wE","randipbits":1923364494,"coin":"KMD","tag":"12755903076952666958"}
9b7899b241a21fb8f42da4cd4d95eebdff582d2cde6fc75d41bf3a1e8ccb7721
{"isvalid":true,"address":"RDX85BbF7kJY4S33VTPgCM1tWQGwU9huTy","scriptPubKey":"76a9142e82fb97834aacac8775388add5a55c3efa1160488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDX85BbF7kJY4S33VTPgCM1tWQGwU9huTy","randipbits":4267520539,"coin":"KMD","tag":"16666215209891718793"}
cb6383f164c1b4f0c43b967c1fe661cb70e0fc99a56964d9810fceac995315cb
{"isvalid":true,"address":"RCmLc2JBpPw9T9g1skg7J5Xr5kz1fyd7mx","scriptPubKey":"76a914263b2433c4d49decd7bfe07b979b9d4e1f1199c988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCmLc2JBpPw9T9g1skg7J5Xr5kz1fyd7mx","randipbits":3529902341,"coin":"KMD","tag":"12381750983796080467"}
5ddc1f11bee91a4ae75b322c4b75e1a3fe99c05e928160a5f50cc1dae108357d
{"isvalid":true,"address":"R9ULUWEvzmHPZ4rYL5FtwkMyTWvGDZX43J","scriptPubKey":"76a914021b95a25573864846945228ae49eee8988bbd9f88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9ULUWEvzmHPZ4rYL5FtwkMyTWvGDZX43J","randipbits":3496806661,"coin":"KMD","tag":"17644502224478366215"}
1224a168d52a5b655cbcec7fa0a24298edc9dbc30c07ea2cf498c3c1fa067bb1
{"isvalid":true,"address":"RE2f5UV1JDhUk6TeJLhz3VgxH5ePPa7SYH","scriptPubKey":"76a9143418ed6789ece2b95fd952365ad120d9eec6021088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RE2f5UV1JDhUk6TeJLhz3VgxH5ePPa7SYH","randipbits":2582272023,"coin":"KMD","tag":"6785214726302321931"}
1b5368b02c3d3e4c3c20f744d4c5f10e70a064183c368a2d3e60bd5cf9793dea
{"isvalid":true,"address":"RGW1zNcVLcZDHTMBqEiSEXCm2WNWBx3z9A","scriptPubKey":"76a9144f35ddcc179396618acc714732967422738184b688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGW1zNcVLcZDHTMBqEiSEXCm2WNWBx3z9A","randipbits":1254871213,"coin":"KMD","tag":"14293138457751365327"}
637521bbe2c313ca0a07a462fc658fede79e7b414303e33c9ec3d00391235163
{"isvalid":true,"address":"RW2xS8dpxjudqBX1hqxShP7FWn8EHYH4Rb","scriptPubKey":"76a914e3a96d98131e45c6f3e950f75253d98419aeb8d888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RW2xS8dpxjudqBX1hqxShP7FWn8EHYH4Rb","randipbits":3558029461,"coin":"KMD","tag":"5448300338283729444"}
1770fbc3208c66bd8b258cab6e2187265bfa8a4d97cb093a82a98b4c5a379247
{"isvalid":true,"address":"RALRwXaEN3yS5damdDwAkmEMKvdAkVs361","scriptPubKey":"76a9140b94f1ffffa0faa5dac21421ae1e1bead1f66d7a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RALRwXaEN3yS5damdDwAkmEMKvdAkVs361","randipbits":4267520539,"coin":"KMD","tag":"12118001679126191805"}
7c7570ce5fa58b1a0bb93a2db3eea3c9028868a48641cd2a6af51387d66f8f9e
{"isvalid":true,"address":"RXk8hbw2g1iU5Vae5Aov8MmJBcNH9jTq6V","scriptPubKey":"76a914f66b2db5f465e4fa0f6c9f31e32245848e6ed96e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RXk8hbw2g1iU5Vae5Aov8MmJBcNH9jTq6V","randipbits":4233966107,"coin":"KMD","tag":"5621563725418681913"}
aa21768e3c790802f3fa27b700f2742a43480df3f85be7eba7a4131b75032445
{"isvalid":true,"address":"RPVNUvVq4BgKrrB3E1uULja2hjPW6Hv6r9","scriptPubKey":"76a9149bdf6fddcb7b9b67b5f6f23fdddea6f1f4cc77ec88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPVNUvVq4BgKrrB3E1uULja2hjPW6Hv6r9","randipbits":726058584,"coin":"KMD","tag":"3851576222574280395"}
1722916a64aaa8367d2c3993184e98673a796e0d998ba6d5612e367e0c36f8cf
{"isvalid":true,"address":"RWTfFTP7c9WxLhgxd2EXSsKszpDVPXHN8A","scriptPubKey":"76a914e8557b8b75b39e8d9a7b753cf9b7ab113896a65b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RWTfFTP7c9WxLhgxd2EXSsKszpDVPXHN8A","randipbits":649762625,"coin":"KMD","tag":"18419270347001149487"}
24447c5b1d1fdf46aeccff20b73441ca148380d1d515ef6066aab66d04fe039e
{"isvalid":true,"address":"RXFr5VB9gQYC5QYv7yVvkxtjDY3zwYuvDx","scriptPubKey":"76a914f111a7dbd1f603dc32f374e4118b1dfc3fe14e9c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RXFr5VB9gQYC5QYv7yVvkxtjDY3zwYuvDx","randipbits":3539516869,"coin":"KMD","tag":"13829815321973515267"}
d0498e111bcccc806b7afc51678adea13450af859596e3b7c663e60323259764
{"isvalid":true,"address":"RYZHjTxct7aq83rLkvb3ZrfXpPPQKdBX4z","scriptPubKey":"76a914ff5644b531e1fb08b58dac5f1d37c078d9103a3288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RYZHjTxct7aq83rLkvb3ZrfXpPPQKdBX4z","randipbits":1254871213,"coin":"KMD","tag":"16781356966076449675"}
f4ea9bc2b3545436fc6a6dfb8a6b46a18a82c8602c9d599be1a74f39ed943369
{"isvalid":true,"address":"RCKvFCXm1SLr24i2FiVN7yNmxaXpWGy2o3","scriptPubKey":"76a914216c68920eeddea258964692b1466271bdf6015c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCKvFCXm1SLr24i2FiVN7yNmxaXpWGy2o3","randipbits":2064902657,"coin":"KMD","tag":"7726735762950180477"}
86c4ad9a4c58f03f6abf54a76ea8f3624b6965862a0c63963681dd24039a2cf8
{"isvalid":true,"address":"RUqYxcjB5Hy6eqK1YDimjfXfhfp5TSyCF4","scriptPubKey":"76a914d689219c2fa34b4b808ab6c8c0e7564c787b579e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUqYxcjB5Hy6eqK1YDimjfXfhfp5TSyCF4","randipbits":3510593118,"coin":"KMD","tag":"16596108505359964587"}
76babaa471e2fdc389c72e22a655a4858abcce8ba2779a326a179fe6147f1869
{"isvalid":true,"address":"RHUpvFhHv1umX1JsV5S8smAKAsN5CxA4HD","scriptPubKey":"76a91459f455a7f1c831b5e48313dc4199ed96f4d9a87588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RHUpvFhHv1umX1JsV5S8smAKAsN5CxA4HD","randipbits":3350674129,"coin":"KMD","tag":"16007497338429761026"}
679dc17d85468f1fad4246cf9af774978315cfe7ecb7857cfda443911a21a1a8
{"isvalid":true,"address":"RW7w9NLACVHnBW37QVTKeP6YYuYegfg1LF","scriptPubKey":"76a914e49a6e8fbbdb28035a808eb49fe2081508c3b66b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RW7w9NLACVHnBW37QVTKeP6YYuYegfg1LF","randipbits":716060302,"coin":"KMD","tag":"5747497138021474289"}
8ce8a445c44931b44b476e108bce0bf9bb007286844d437e2aff34c1928e1237
{"isvalid":true,"address":"RAhvJHePdAb1PF9jjZhP2F7r72ebL9pA1f","scriptPubKey":"76a9140fa55a3e89016269ad97d9aa83af1f6be1f6d6ad88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAhvJHePdAb1PF9jjZhP2F7r72ebL9pA1f","randipbits":3558029461,"coin":"KMD","tag":"4441920960443819055"}
bd7a2bae340307163e9e2fb47c76a8b131da9dbd45ccb88111719ea0c71b0269
{"isvalid":true,"address":"RQ5PNbYYJgytmGQQSdbUeuh7Nekc3jcMRW","scriptPubKey":"76a914a24e52c8fee5637df02e97007ee05fef796157b588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQ5PNbYYJgytmGQQSdbUeuh7Nekc3jcMRW","randipbits":1212417070,"coin":"KMD","tag":"3842268692737470166"}
955346716d601009ab91b7f9eb71642feb3f2237c414ae059397f68732bea877
{"isvalid":true,"address":"RLS8Y41iqJp8rBVPtsg6mDymyWmdWBQZby","scriptPubKey":"76a9147a5a2b9063706a821b5587d55a1ef3de71f4d7ec88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLS8Y41iqJp8rBVPtsg6mDymyWmdWBQZby","randipbits":2520388199,"coin":"KMD","tag":"12038156323115667698"}
f5d6b5296e7bf4742de8461819b5d88a48afc2048976fa85083cfd33daafdd32
{"isvalid":true,"address":"RUYWU7rQ4vDyhhHbnyEeSMHrxt79qsnsAy","scriptPubKey":"76a914d34ffaf30e3d67c825a94edf932f8b35845cded188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUYWU7rQ4vDyhhHbnyEeSMHrxt79qsnsAy","randipbits":2320559039,"coin":"KMD","tag":"5932046731441869369"}
264d0216229c778eb7068db63a4261bb1a8d18855a1cb5533c3e976819b36f07
{"isvalid":true,"address":"RDCjGgoZ1tvCWop6m5wPYkr83wdFrofF6M","scriptPubKey":"76a9142b08762b7091f4308f0890c34f8bda155a898c5388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RDCjGgoZ1tvCWop6m5wPYkr83wdFrofF6M","randipbits":3310160965,"coin":"KMD","tag":"12705068326486539703"}
722466cdfc81b2025b95e6094a746d68eac713d72b53eba6509121c473e1fd8b
{"isvalid":true,"address":"RLAEm3H2LMSNzJmveLkcf2nS18AnqWR7pJ","scriptPubKey":"76a9147758b5d2e66bff666973ab0a13f2605f14e9128088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLAEm3H2LMSNzJmveLkcf2nS18AnqWR7pJ","randipbits":2474273465,"coin":"KMD","tag":"12111710440388271062"}
f7e7b99252dfc6b5c8ec506a2d8c96f526d55eac6535ad25af3cdbfac379e444
{"isvalid":true,"address":"RLko1vnC4k8WntCjCLwK6WcLYnzLZnCzfj","scriptPubKey":"76a9147de1c78be58cf827ffbd7cf13415a16842791ebd88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLko1vnC4k8WntCjCLwK6WcLYnzLZnCzfj","randipbits":749314742,"coin":"KMD","tag":"8226524654736218895"}
2e72a3f2d69e7ba6fba79e977543182ffb86f9a9eb4c9fa31ee04ae2741a81cc
{"isvalid":true,"address":"RSUfnwTLE36E3Nx8PptxVoAfSRtMeGQsFL","scriptPubKey":"76a914bca5d93ac90d40379e75f503406f58827bd984a288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSUfnwTLE36E3Nx8PptxVoAfSRtMeGQsFL","randipbits":1505688468,"coin":"KMD","tag":"10008945353933923072"}
2868a66048b79c560d0b4c0ec8ca8d3567cd731fdf246fbeb96eaee49b3e5f9b
{"isvalid":true,"address":"RPkkQmMmyLQe8Th7ZP5GoF6kSUs1DTNfAf","scriptPubKey":"76a9149ec7fb32ba719194cbec3bee682970683ffeefa188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RPkkQmMmyLQe8Th7ZP5GoF6kSUs1DTNfAf","randipbits":1212417070,"coin":"KMD","tag":"804390373941681274"}
3041e038d4b498d32a7985870b8d1499accf35e76d9285cdf25e42153539e527
{"isvalid":true,"address":"RSkhXmiPCxqdp4bM4ux7VxAwMoCv2Uar6d","scriptPubKey":"76a914bfadf4850adc513efcb24ee1ae425ff0c67561f588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSkhXmiPCxqdp4bM4ux7VxAwMoCv2Uar6d","randipbits":3606291758,"coin":"KMD","tag":"9863218566458520290"}
34f2929e81a532a7acbcc1b9b7be539ecad2527162b2afda1db81accf5536680
{"isvalid":true,"address":"RP8AvHsUhZkbDdcfHFrRsZZn2QVNcBMPNQ","scriptPubKey":"76a91497dd0cbf91133e34fed843b9d266b724400268f088ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RP8AvHsUhZkbDdcfHFrRsZZn2QVNcBMPNQ","randipbits":2064902657,"coin":"KMD","tag":"13143107622263065925"}
4f17c4368e0330e89e08d4271b35649093f121384b46ab311ca0aa1115e7f497
{"isvalid":true,"address":"RUJvR3TXCAcizk7dXdFc6GKRFS6jZfjtyY","scriptPubKey":"76a914d0be25901387463ef3690e4561c24fcb342ce06788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUJvR3TXCAcizk7dXdFc6GKRFS6jZfjtyY","randipbits":2320559039,"coin":"KMD","tag":"3164889605565987995"}
791f8a22193dfce8fbc2bea5466c747291391e85291f96b53c4f98ce012a1d35
{"isvalid":true,"address":"RLZmhbeB2tXTas9grzAeqaL2RFAXVmDVpU","scriptPubKey":"76a9147bcc1af6d5a695940a3f37e15f377e5adf39475888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLZmhbeB2tXTas9grzAeqaL2RFAXVmDVpU","randipbits":585288902,"coin":"KMD","tag":"14041076325487564924"}
7351a8e69fdea30190975ca4c84116cf2e3205d2e1f7f2a51a8dc865c34da859
{"isvalid":true,"address":"REU3FkPuNbZxogpStpyhZiyPkCp58G2bh3","scriptPubKey":"76a91438e5d6c5a489294ce3c6857c5b6fac47194b17e488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"REU3FkPuNbZxogpStpyhZiyPkCp58G2bh3","randipbits":2320559039,"coin":"KMD","tag":"6027473142906672140"}
6b9bbb886bba401ccbbca520bc85504fe2eea3c58c2ac6c8b114cf3648bd65b0
{"isvalid":true,"address":"RGHoKLW6r7DEBtYfV6VgjeBsQQFMvZ5thw","scriptPubKey":"76a9144ce64bc233e77d397cf575ef86bb14107a1c2a7288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGHoKLW6r7DEBtYfV6VgjeBsQQFMvZ5thw","randipbits":1374184384,"coin":"KMD","tag":"4680412223953801587"}
2d27631432ad1a61e46f2b1be20c46c518f5c2d3f38b7125556862ca76a670de
{"isvalid":true,"address":"RLCDEXwfJ75P1iKgWGfR9geJmjZ84A4XXJ","scriptPubKey":"76a91477b844b38a23d95d1071051ea2c3f71e47f6877b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLCDEXwfJ75P1iKgWGfR9geJmjZ84A4XXJ","randipbits":2324724189,"coin":"KMD","tag":"4861630013629819552"}
75519042825ee2ac86142c0488d363a39557d98b59de2e4dc9c6f275d9106d25
{"isvalid":true,"address":"RW1FmQGcpPv87WZVSCaMgjj74shMb3Y6Zi","scriptPubKey":"76a914e357107c6793c649aeaa83b1c2fbab3cdc717c2988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RW1FmQGcpPv87WZVSCaMgjj74shMb3Y6Zi","randipbits":2582272023,"coin":"KMD","tag":"3609665741252491211"}
9f38f6451f00adeef0e64ac32cddb32c5278e5721dd176e0204dc75fcb75de2c
{"isvalid":true,"address":"RQUMrGYr4SsHgbN56WP7tuEpWUcd62KidP","scriptPubKey":"76a914a6a69e87aeaa85845a2b4688b1df3b282ec959db88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQUMrGYr4SsHgbN56WP7tuEpWUcd62KidP","randipbits":1844341465,"coin":"KMD","tag":"4594736785745315617"}
ae39a9904bfe3397e09f36d720f53d4caab83a8826a9f0225f550d70e05d29a5
{"isvalid":true,"address":"RP8CkGhyfhdoVpGqGbVmEmRL7gGdqKBdkt","scriptPubKey":"76a91497de9339d8c7071012e5cdc0d7fef07325bd9ece88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RP8CkGhyfhdoVpGqGbVmEmRL7gGdqKBdkt","randipbits":119096734,"coin":"KMD","tag":"8511847080866559487"}
2bded7bf8992062ede8c27d4ac1960b667ed9d66e8bcb79cbc94ba5103182ee4
{"isvalid":true,"address":"RRupn47XfLSMhXEuShtCCPBCv8P6LYXrLN","scriptPubKey":"76a914b66f9f348f8df6f7af3adb4d83699f68cea9307588ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRupn47XfLSMhXEuShtCCPBCv8P6LYXrLN","randipbits":306342285,"coin":"KMD","tag":"7266318498151320931"}
35443c3f172f04e39320b8c25ebab7b5866577174e70bbedf7514645f2ee76ec
{"isvalid":true,"address":"RTPiNQKiaVaBnhneiZXqpieHfF6F2RWt7y","scriptPubKey":"76a914c6ae0bb05c9a33ac18ef833f5e001973901872b788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RTPiNQKiaVaBnhneiZXqpieHfF6F2RWt7y","randipbits":2474273465,"coin":"KMD","tag":"1187650091494195557"}
998dac128e50a70addbcbc2492009ea03dd81d1ae1115fc78ef3f1df9a136217
{"isvalid":true,"address":"RAiZZDEXN8gqgotWvxxMc4cY7shkZ6y2Es","scriptPubKey":"76a9140fc4740ee559334ea78908fbe0d0bc7d726b3b4e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAiZZDEXN8gqgotWvxxMc4cY7shkZ6y2Es","randipbits":2324724189,"coin":"KMD","tag":"15788132541469737392"}
eb3809ccc146af2e228234957e115a8003b6db0e89544dbb329bd2ef51dbc7b4
{"isvalid":true,"address":"RLkUAjyNy8CQz8SxGvLwLWMP6rj3AK8Y7S","scriptPubKey":"76a9147dd20bc1dc1070e66616685c4fbdea2e77fe82c488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLkUAjyNy8CQz8SxGvLwLWMP6rj3AK8Y7S","randipbits":1923364494,"coin":"KMD","tag":"7216368189000613073"}
9621e4c03d1a0893873660052e6db5916181639299afb743764f9e69a8527b29
{"isvalid":true,"address":"RRX73tynW4sxCmqyYBQrS9nMcDUcXuX1yG","scriptPubKey":"76a914b223a38fd7eb896d55da2482791a348a86eeef1288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRX73tynW4sxCmqyYBQrS9nMcDUcXuX1yG","randipbits":3678679579,"coin":"KMD","tag":"7320146782036675413"}
e2560151e8f9979fed63a1264b9ecf9734652423d7c69d2019ea1c10bda6dcc7
{"isvalid":true,"address":"RBFoJqbhcDJG3wcKu9vvenTMcc7EJTowFq","scriptPubKey":"76a91415acd3f264307f868095fe1016c7853df10ff2d288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RBFoJqbhcDJG3wcKu9vvenTMcc7EJTowFq","randipbits":2320559039,"coin":"KMD","tag":"7368663450862819294"}
2f1140761ff445d9bea8dabed5e680eb1b121645e7d355b3617b56041c28ac0e
{"isvalid":true,"address":"R9u7V63TLwJPH1shvAGHRG61aci61yy7RN","scriptPubKey":"76a91406cb23dcc2f6c42c1ca274ee956c3eb8b9b4facf88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9u7V63TLwJPH1shvAGHRG61aci61yy7RN","randipbits":457907142,"coin":"KMD","tag":"13184722178550341776"}
c60188aa2f78979e09248dc4397c31b987391172a2aba4786a6160c5aa946445
{"isvalid":true,"address":"RK6x2w56cGqJrnFiGcuR5VNWahzm8G5AiA","scriptPubKey":"76a9146bc15fdad74e3c3626e06ee63198382557d3c60388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RK6x2w56cGqJrnFiGcuR5VNWahzm8G5AiA","randipbits":3634905133,"coin":"KMD","tag":"12251590486799800132"}
009d448297d24da1a93e08b297a44251f37b704563bcaf290167f42eaf147e1b
{"isvalid":true,"address":"RV56pNJyghFp8ikNMqPsuaffcJxrk39Xkh","scriptPubKey":"76a914d91921e070947bc792dcf0c43a07d315269531b488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RV56pNJyghFp8ikNMqPsuaffcJxrk39Xkh","randipbits":4267520539,"coin":"KMD","tag":"12059954479745860123"}
29adf19c3b9915939b9e2294501f2935da30112bf38ea66bd892b3010bcb9f8d
{"isvalid":true,"address":"RKAxvqvC3apzrb8udG9trBxiNhhNXaLkz4","scriptPubKey":"76a9146c83c9104daa35ad9351144d5b7e85326e10c9e288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKAxvqvC3apzrb8udG9trBxiNhhNXaLkz4","randipbits":3756225191,"coin":"KMD","tag":"524537270209711700"}
34a157d49905f690aa5f9549cf5b864519fa348a7f10868a6642e2eb10c605c2
{"isvalid":true,"address":"R9SHcVV3m86KDnjRo2Pxc5yeLGKxwbyChb","scriptPubKey":"76a91401b85cfebe711a95b9f553084f5101c22780964688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9SHcVV3m86KDnjRo2Pxc5yeLGKxwbyChb","randipbits":1844341465,"coin":"KMD","tag":"6409293806330068501"}
1f93484709404b43e25cc7d8d7e737ea2bd5d4382761cb1adae82563b84c3b4a
{"isvalid":true,"address":"RV5cgPjqt37QBHr94VL5HnXWqcwdqoqoC3","scriptPubKey":"76a914d9320f6edb3adec52e7b63981d42c68cb2b3a1eb88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RV5cgPjqt37QBHr94VL5HnXWqcwdqoqoC3","randipbits":2422516899,"coin":"KMD","tag":"16335033217890267622"}
112ecc7c1bb31c32eef17672d5edc367c3cdbb529cdfe9ac6f4356e71256f15a
{"isvalid":true,"address":"RMnuGgpEzWcxYi861E7BjGMURCFX2Szj2v","scriptPubKey":"76a914893ff54993f8c662a05e286a32762f651941fc7788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RMnuGgpEzWcxYi861E7BjGMURCFX2Szj2v","randipbits":649762625,"coin":"KMD","tag":"15192753244820233720"}
b848db8cecb959d7a253efc566ca7bc27c7a351dacfc9c19bcee084015ee8870
{"isvalid":true,"address":"RF4iG6huXb9u6Pt8281WvnBjhdEtiVUnp4","scriptPubKey":"76a9143f748ad131ae69461369d8aa8022bb49e3b19d1188ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RF4iG6huXb9u6Pt8281WvnBjhdEtiVUnp4","randipbits":3678679579,"coin":"KMD","tag":"15693301119386652646"}
4068a71cd8c5cde48482ac401d051b79d8e55c8972d65b5dad46fa7b1df4b982
{"isvalid":true,"address":"RFKC68PGKwYz6rnPAbWomGZUv1BWKY8ugN","scriptPubKey":"76a9144231986e724878f23e1baa82f911a1cd46009afb88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFKC68PGKwYz6rnPAbWomGZUv1BWKY8ugN","randipbits":2358278621,"coin":"KMD","tag":"8100233926452389942"}
9c2015601f3e05365eb6a9bcd805533dd8b6b89554633e1fbd531e2427a9ff9c
{"isvalid":true,"address":"RQAzL9perFJbDKcHiJ9Lafxxce7XiKo7Sx","scriptPubKey":"76a914a35d95a508fe1da8ca967e0a0a066215e8186a3688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RQAzL9perFJbDKcHiJ9Lafxxce7XiKo7Sx","randipbits":1077965479,"coin":"KMD","tag":"17562431360068145734"}
da99d4b45f298f761c03f498bf4bcf780abd1322de1ec8cdb800a2b11ca82a86
{"isvalid":true,"address":"RRaSQCAWk74r5cXzZV8JqqW9JFbhF2o2nH","scriptPubKey":"76a914b2c50a105d3f8ad8c8bc5fab0a7996f444627c2488ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RRaSQCAWk74r5cXzZV8JqqW9JFbhF2o2nH","randipbits":1505688468,"coin":"KMD","tag":"13131499332489581200"}
e2b77ab956cfd75a458bf94d485ef9dbfaf81ce0e6f1739f3a6cb1538cbe61af
{"isvalid":true,"address":"RU49btc37WeEiQotQZMhEaGokFYeJYc616","scriptPubKey":"76a914cdf2ea4f812d9b101c0f3ab2592b55b6b65ba80a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RU49btc37WeEiQotQZMhEaGokFYeJYc616","randipbits":3496806661,"coin":"KMD","tag":"12544229480263406885"}
bcbaeb10d2bb27e48a68d88f02c84439e4e5cf07fa4db8b01ab85a324f5da1a9
{"isvalid":true,"address":"RW3gz9fEadohRLZerK9r8zXkugk5swWHrf","scriptPubKey":"76a914e3ccf2e10b6458091159d89c462d747398bb1fc788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RW3gz9fEadohRLZerK9r8zXkugk5swWHrf","randipbits":3496806661,"coin":"KMD","tag":"18021827275773651771"}
a927c61a7cdc072e13b3851831f8c099574ef27c24dea53e20253ab0712e5aec
{"isvalid":true,"address":"RAFLKtQxyGECt5fBfufuCGY6rvupfKrn3U","scriptPubKey":"76a9140a9e2dc32e77fd3ad91b28b11581317695733aed88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RAFLKtQxyGECt5fBfufuCGY6rvupfKrn3U","randipbits":2966062244,"coin":"KMD","tag":"17980386951023891077"}
30e0c514b2be13f40cf44586c3e0323e1c9d137a45f105f43c282154afda964d
{"isvalid":true,"address":"RJ89radoRzRr5oDsf71QZ7BXUTiHcyVSUu","scriptPubKey":"76a9146103885fca72f9596bcf24a60549afe1e375921d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJ89radoRzRr5oDsf71QZ7BXUTiHcyVSUu","randipbits":1077965479,"coin":"KMD","tag":"6623859242676141391"}
ca212b020dda025944d7c18f815339d4dd10d2d7c7b8f423eb42b3f1cd5591d5
{"isvalid":true,"address":"RKenAzKZyD58qPu2zVdjwPjDn71T34sWE4","scriptPubKey":"76a91471c6741d8ec5e9a546412794e75d7b88ec0f587a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RKenAzKZyD58qPu2zVdjwPjDn71T34sWE4","randipbits":114528085,"coin":"KMD","tag":"15210845949632153032"}
2f0390723351dd64861ed915ea52fb4635d2c9ef9c3da8b25831d148b5a54a83
{"isvalid":true,"address":"R9ibGGfsFHD8MxLRL4q2a6ezxAaHHPJvLc","scriptPubKey":"76a91404cdc0d618d595996cfccc66a10cc4bcdcf18aae88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9ibGGfsFHD8MxLRL4q2a6ezxAaHHPJvLc","randipbits":3558029461,"coin":"KMD","tag":"9528516854577807170"}
ae807083da593f9d52bba1f3b69a41bae4035e1a3fb2ade88b1c730f51426bc4
{"isvalid":true,"address":"RGwuMmW1ZBMrHJwJucEy5JEV3BZWv7eQnm","scriptPubKey":"76a914541b25614a7625c52e4c21dd60314289900ff0de88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGwuMmW1ZBMrHJwJucEy5JEV3BZWv7eQnm","randipbits":3310160965,"coin":"KMD","tag":"18443691897336118104"}
c19bda5d056d8d9ec0d24bb3295e7286cc08ce603c404c7e259a485a9f177193
{"isvalid":true,"address":"RT6Ckpw8yM2Q7yaCxejiVTrxELGQPtnGPm","scriptPubKey":"76a914c35e411a73cff73790032b0fbed8eea33fc6dffe88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RT6Ckpw8yM2Q7yaCxejiVTrxELGQPtnGPm","randipbits":3496806661,"coin":"KMD","tag":"415486371631711829"}
d79df8653e0788811d7c9ef352b6cea6625a68b11a60b4eb5dfede3271e3aaae
{"isvalid":true,"address":"RJfzvRW4cWXcjFpQZmv2PSy5GDGrnbM76Q","scriptPubKey":"76a914670962cef415469e0b62d0c637981d6c0eec7f9688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJfzvRW4cWXcjFpQZmv2PSy5GDGrnbM76Q","randipbits":2474273465,"coin":"KMD","tag":"8013502689693214744"}
3cbbfe701158eac511e1586a765aacf568e6650efd1f105d8ae154b650ddb343
{"isvalid":true,"address":"RSixxEuXMe8DacnajhgqDdrcFjeGD54drE","scriptPubKey":"76a914bf59ff2c07389655a469672cd03e2bf9edfceb9688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSixxEuXMe8DacnajhgqDdrcFjeGD54drE","randipbits":114528085,"coin":"KMD","tag":"15074159837093731000"}
a218dcfbe40ddf06f1526694b1e18b27e1f03ddf5cb517cfa5a5cc01593f5dcd
{"isvalid":true,"address":"RGf4wwbHVYYZrVPVZg6XdS3mWvbzHSebzu","scriptPubKey":"76a91450ec144f18b23eae5238e12592881b82b659868288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RGf4wwbHVYYZrVPVZg6XdS3mWvbzHSebzu","randipbits":2966062244,"coin":"KMD","tag":"8936737403658615534"}
69eb1aa7e85b7a482a85057139fea77da53da045afec40ad715fe226adbbab81
{"isvalid":true,"address":"RESydSaRoxRWWb1Pxn88H2kTRuV1W38dhU","scriptPubKey":"76a91438b2656b6c8cfb9140367e588414cd18b99a8d1988ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RESydSaRoxRWWb1Pxn88H2kTRuV1W38dhU","randipbits":1212417070,"coin":"KMD","tag":"11659009895163208128"}
29cc4ce2621bf8921ab8d479f7583c293d8baa3f13b4a8e8ea1add1a229b87a9
{"isvalid":true,"address":"RJAbNiCSRaMxUky9h8as6orZY3cu2rSW8z","scriptPubKey":"76a9146179aacfbc2836d98717833f48152f4edcacd94e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RJAbNiCSRaMxUky9h8as6orZY3cu2rSW8z","randipbits":2462330702,"coin":"KMD","tag":"9700846191891445667"}
f0fd5536b290f0e6b57917988ef0de03158de8f82d20e6ba5cc29442a8a2e732
{"isvalid":true,"address":"RSW5SvtjWiGYN3iwb2mteYP7Hn223Zk1tP","scriptPubKey":"76a914bcea02be7c44fd1ddb4e49e60439548d43c3310e88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSW5SvtjWiGYN3iwb2mteYP7Hn223Zk1tP","randipbits":2358278621,"coin":"KMD","tag":"10319162265769564466"}
e3bf487579e76e3ec2f8f0c5d1dcd9bf3857c9b2c992c9cbb93b1987f0031387
{"isvalid":true,"address":"RNnzD9QxDZqo6DvzfM3Pu7GiyNkVk7dgsG","scriptPubKey":"76a914943c34ee1c920c171b1f876526b56c0848bea92a88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RNnzD9QxDZqo6DvzfM3Pu7GiyNkVk7dgsG","randipbits":1923364494,"coin":"KMD","tag":"18409283446389213145"}
b22b15340992d70c221b7320accaf625c0ea7102fab2cf1be7d1e1daea214dc5
{"isvalid":true,"address":"RSofHVn8U4WfqgfXCksqqgmiVSwXxnANvq","scriptPubKey":"76a914c03d53fcd96b09a06f118c455b3e12c5ed12fe3288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSofHVn8U4WfqgfXCksqqgmiVSwXxnANvq","randipbits":1844341465,"coin":"KMD","tag":"7630923714071169428"}
f42e2f46b50f54bca487acb26a810e976a6eafbaabc9480f398c5f2650a418f1
{"isvalid":true,"address":"RFPKxBL8iLQGmkoUukXdFU7VkXyGJLSsGw","scriptPubKey":"76a91442f9d2ac12e63b0b5a9d38c61ec4f11f2992e68688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFPKxBL8iLQGmkoUukXdFU7VkXyGJLSsGw","randipbits":3795805790,"coin":"KMD","tag":"2785625006751141995"}
dc263bb3650ad3808755f878c880e3f4c5abe89f9ba98887b6c31e219bb45422
{"isvalid":true,"address":"RA9xKdNjw1H2eqPi9f9J77v7Uq1CSWdNQJ","scriptPubKey":"76a9140999bb04e94a9ff14cd6ecff4a022e881ab8126688ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RA9xKdNjw1H2eqPi9f9J77v7Uq1CSWdNQJ","randipbits":3795805790,"coin":"KMD","tag":"7691621473590935051"}
a0046fcf6edd0265f6ffba0b9ad0b5a9d06d29d428fbe3b8e5c09a464c41ade2
{"isvalid":true,"address":"RVFspAKoUpDMAiiEUiQQEpqdqXDMB48Jqp","scriptPubKey":"76a914db22da63a40e3dbffec5eda5ae6fd13924e32b7888ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RVFspAKoUpDMAiiEUiQQEpqdqXDMB48Jqp","randipbits":3678679579,"coin":"KMD","tag":"3212160090881594053"}
1e5426a9b795b4f02bd6507dc7521561244a00a6a24e1cd57a018b8afd51730f
{"isvalid":true,"address":"RCPys8hvEfFSDkMZL7GtYA8a5GSwih67Q1","scriptPubKey":"76a91422311801b820cf5a169e3614cfc7e61e08cffc1c88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCPys8hvEfFSDkMZL7GtYA8a5GSwih67Q1","randipbits":2736601237,"coin":"KMD","tag":"11382624799425215788"}
7684235993f66a032341e2490fab43f9628a64680f186f264ddb33c53eeea8c7
{"isvalid":true,"address":"R9ce1xHEaWnRRP5jrWozEfPf9ZJgX7jnxd","scriptPubKey":"76a91403ad8e4339c06506054f30b8fc892d0a5929911388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"R9ce1xHEaWnRRP5jrWozEfPf9ZJgX7jnxd","randipbits":3539516869,"coin":"KMD","tag":"14036968980545438130"}
1df1eec279f85621609f2ebffe5cc8d001c538d7efa96113942ade806938e839
{"isvalid":true,"address":"RS1rdGqAhXvwFFTVyUCx695y84E3N3emcU","scriptPubKey":"76a914b793a92aa3faed3b311f6ddfb7643a1ddf25974788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RS1rdGqAhXvwFFTVyUCx695y84E3N3emcU","randipbits":3496806661,"coin":"KMD","tag":"3577416118331019992"}
7d1f8ac6d53d17fced782240fc36b963f526e836701b1d9ce334159574f58731
{"isvalid":true,"address":"RLgKsmgdzwNCt8CgqZ5J6cZhTat9HeZgxG","scriptPubKey":"76a9147d0975b37fc7f1a178c8f79f2318f3ac6b0a331388ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RLgKsmgdzwNCt8CgqZ5J6cZhTat9HeZgxG","randipbits":1664639832,"coin":"KMD","tag":"2925847345452408723"}
b91b032588384be30fc1ee5dddc1ab6bc270660482faa6f360cbc9519769aeae
{"isvalid":true,"address":"RFN4H8YYm71TjCVkHkoVFBFpg31i4ejbiu","scriptPubKey":"76a91442bc52d84a6a4fc475a2d734ce676bf1c9af304788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RFN4H8YYm71TjCVkHkoVFBFpg31i4ejbiu","randipbits":3310160965,"coin":"KMD","tag":"8812871207750283691"}
451f8dd4333bb2274ebeb3f030aa51c3ca3e725a0f034c73d110009bc96cc33b
{"isvalid":true,"address":"RUBESyzjgZUts3fD6W7abpgMj4qRFSSszC","scriptPubKey":"76a914cf49df6300a73fc8b97b9f0d48ac4b5ef1a6039d88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RUBESyzjgZUts3fD6W7abpgMj4qRFSSszC","randipbits":3337526720,"coin":"KMD","tag":"3607830388298007708"}
e3e90065ca3ab033b284a5c3eb5bd28f9b09e6610a64927bc453c2a3544c5f94
{"isvalid":true,"address":"RSNu7Kd9p33aDrgT2AM8buy7fUSQZ2N3Gs","scriptPubKey":"76a914bb8e781d7e1b8d749aba265b06dc119d5faeb96788ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RSNu7Kd9p33aDrgT2AM8buy7fUSQZ2N3Gs","randipbits":2736601237,"coin":"KMD","tag":"9147772191752034854"}
5d6f63ec26ebe0ef24bf5347e24ee94abb476209b7e9e85dfff2d23ed5e531c3
{"isvalid":true,"address":"RCrCe4dsMzXzzp7GLahubjg73VGK2rnczC","scriptPubKey":"76a9142726929106dcde565083ec6040339ca0bff1c63288ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RCrCe4dsMzXzzp7GLahubjg73VGK2rnczC","randipbits":2358278621,"coin":"KMD","tag":"14533532906797650391"}
fc4a55367a6800e58c0672842a13827af143e67745b7313b1bcd274952bac78a
{"isvalid":true,"address":"RVTCRzofA2cV6FwGcvn1uGjZJmP5s9G1o9","scriptPubKey":"76a914dd46f8567587f0b56a2c2c686aa5ad73882f8b1b88ac","ismine":false,"iswatchonly":true,"isscript":false,"account":"RVTCRzofA2cV6FwGcvn1uGjZJmP5s9G1o9","randipbits":585288902,"coin":"KMD","tag":"12509011310067902676"}
33dddb1215c8deb4889d29f7f9d0b9767e0a467dbd43e8530675c6a56105a2bb
fix:
./komodo-cli sendtoaddress RJZ2DjthdsfCuaGxiE1PNCUGuvARAsMpHn 2848.88502056
4f7f03dc44a79078cbf1e103e254eafc6b8856c5be891f6b6f5bbc702edff159

166
src/KMD.batch1.txids

@ -1,166 +0,0 @@
325fc4797d28b57f477f7ea172972683a6ea2cdb5c5c238725f78856ef2e3a28
968.31524937 <- expected amount RDjc2nYjd2cgcyLyfCxCHNUacTHueLH5W8
509a075ecde88ca0fc5834cb0057d837eedc488870635f6461d7f5e60e5e49ce
205767.24475092 <- expected amount RA4nyddYYzEzoUqnpLCvTm8d4nKvqQavs4
dbc1cca89049d06a5ac6de9922b1db01f3cda9c1b580c54400b0443ea06a84bb
9683.15249375 <- expected amount RAS5HArp8SMWVWm91Gwxtyno6Tkw9DBQLb
6260fbc0a0ddfd88b9f4603713c23dfb1d14a6dac586377268a893dc60d53252
7746.52199500 <- expected amount RGQ6jMjParVKLYMVLoKTuUAeUDKBbZhHRh
34e61e89fc491a24291d4471d93d3b72b2ea790e4e18df941d9744273413f0de
138163.01002402 <- expected amount RFppcFo1bKQzD4zxrxCbicpAvnrqo99hPx
79873fe0e2e52f9e55601baf68b4770bcfcd2c9caf4e5015bdbb231a7089793f
243998.92767004 <- expected amount RHfHV1LTG5rz3T2HApavCto9973puD93qt
78d8efb10877c2293d5f2ed6fd3b7ff2da4f599ab63de25043e9211ddb669c13
5228902.34662500 <- expected amount RMMR84AiLuuRB5gXESJ2W7q4M9bPdt57Ys
d1a8b7cc8782480f8c2633561193a79eaa0e31b0e12173a593cd0f52c29111f0
82566.66667868 <- expected amount RCkJC2Vd3A3R7na5vfHaSBUQHA3iKB4veg
ce4e52efc6b973b073dd7246b881cd81fc2ad5927ee17f62a50b91b460fcaf46
9683.15249375 <- expected amount RRjFRzpV5EBrGigciSUn5QHkdWhB7tC6oH
2af36c684878c208f477f4cb54a5ca05db84848a6aa5027386e997446fcf39b0
968.31524937 <- expected amount RXs3VbEem331Rxg1Jac3hqknTti4UUo5pz
da64a366b0c2ee633390cd86d85a97eceda39e62c38d08ac4f48b1b15f43f396
36785.74330117 <- expected amount RPNRr6efhaPYKHzRyemxYowUbNQ6crBtcy
c485e9ec07fefcdb01b98c7253ba7cae9cf44a6069f9c05a44f7910df96e8048
567760.05597770 <- expected amount RTnhkYHVoApyX8Fc2ZEHB2rtW7cLHqZEMB
acd9dc7b2700e505e28f36ac6739c6a9aa50c77c1fad4c95581584431f89679c
30287.84201075 <- expected amount RC22v2GtzyHqdVQFBstrps9SBoDnSuQWot
51560f60cda3aa1ac1b887cea074a344f69f716e5d7777115976ef1538fad3fd
2202.52763206 <- expected amount RJdKcUM9LazYuw9xsUEQYZRjDCZNi1M9wJ
e0d4e99d2275cacf95be661ab6bd98935b547f59775281b085f5b26fe09cf18c
1403669.78549400 <- expected amount RLWai9FYvgf88UmGhqBKQfU1HFcviD2yXQ
6b5c4ed565ec56ff7cd8301e3051e96fc8f26186f64f93f12a65bde73f16d92d
4002.16436294 <- expected amount REvmz5CwutJh8pqSr6QtiZjMVmrvDMZsmD
ed8b998240bc13ff35dad3a7a8f96fbdc04ff8388e96d6f618ac4e66a29d1c53
198171.06769187 <- expected amount REu24h1gWLmijHRnw5JEiQYe395ZRqoP2F
b7cf02901629acce9eb84c2b83839b4f575d3d8710fabb2d5e43f92308abaa6a
4824.87172431 <- expected amount RShbCikwRgHp6YDNPWQyF8KBY3vEtMmtuP
c0ee42c0a0a32ec75283b3899958d5d3d5d59202642933806e1dfc0dfc47b48e
7771.42052436 <- expected amount RER2vwRLHFT4HNQLzyqT1PhbeMCitDaY1u
f0fa139e16b9a32af25d20daf6efef8b703a0b48ca12afd3743cb29e35955801
18186.86986853 <- expected amount RM3onNDjZbjypoN8wqo7Rzz3QEv6EiCfwK
e080c71757f1bd918615cc7439c92db81a83da2dea904938463bb8b224679508
9673.46934125 <- expected amount RKJGbG1xxkzwm54gdga9Jhj49G9C8F8KZL
2e343fd3e06b3a5081db25f8e549836feb850a10561dfb4d0ea19a7302238fa4
601.90475901 <- expected amount RJgMCdrxjg1xeJ1Rmi9CS3R93MS35Tx2sM
b416a052a3ef694be7ef72d14846e2509199464ecb0b96087f484829c41bd30b
1626.98055674 <- expected amount RSCeyDCcZ3kpJWcwBzmcEyHQ7e9VEtQXY7
8203d78d210e5a1b54443be48232658fe4b9f59819b1272cb5f9534866ce49af
12588.09824187 <- expected amount RGERRfbvuZx2RsVyvUpjtdgBjdKzKMNww7
f52b579986b45625a33d56d5daa857918764dc17d71f5aff8e80c268d0572eea
4919.31879231 <- expected amount RJVPgswKQzcWxHB1Woin6QKpPVYRpXVoFn
ab386ce9a2cf983996d7146669dedd5d55a297998935707b6c0f5b7dea1bac05
17428.70617350 <- expected amount RBSqMV6ihCDzgMjFgm7g5bSxAwtBGseRuE
78dacea10a1c616d6adafbf38e09c6814fc93b38509609823903c1a58de1aa27
2375.16051963 <- expected amount RVXTirtRaZkYk1wjAE3mwhdUjTXWKrTnFu
30775d94acdeb3463d16989d110c0aa690e009839e28a2a7087c3b828adec933
1742.96744887 <- expected amount RGNrH63hZEkcPzCZBnnpyYLDYfKXQqvBk1
8ad511c7ad95ea7b8f866ae388ea49f16ebcb2131477135dd1a9ede4459e1381
70173.29001640 <- expected amount RJJBtg8XfxMmb6rg6UMWME6zhxM1n8Umta
45c359d398c92be3f6304db62f3247a03a8d2231583161a440ab88fc9653a90f
4766.21295597 <- expected amount RQNegFE2PWQtC8La69esvn2VGKttTAYpny
ee0dda87563392f4e999f67765506cbdd4896b281f0c7628c1f150972f2bc6e4
228081.21691774 <- expected amount RPWiTSrWZyGDmpXfVYcVpmQq56XCh4Hkky
428f2447ae5f52492451e906837f9281ab0bfe5b0c5eba19ec8c85b3aab70fe1
220390.81840860 <- expected amount REbMisMicS8W7LUqBPJwkVfYHxNfSeW7d8
0edcf59104c3ebcb7a013ab84810f3b90eee025fda6fa3adb1c3931891ffb746
3505.92510761 <- expected amount RLBg1V9MCKeQjjFd2d6WKxon1hVTS4si73
8c33e6e5649e1d741561ca8bccb544076981915e73aa0324de90f9eae6ceec3c
15844.60160895 <- expected amount RQNmvhca3LfPV8mGf7GKKCMoM1PPMojxmz
46e957ee13d83fc2e1fcc9b1509b3cce1a97853879527cc23105fd1e1041a9e6
479029.87110523 <- expected amount RRDmaG64XZjdERzojAQ3DwHewBZbXfqpcJ
ec1fe34569606f2fff172643d2cc7ff3ccabbc423a69641b689c1bbaaace7f4b
230594.13977661 <- expected amount RTBeZc5Biq3BY1hB1dXi6XTaH8j6FsyGuz
ec3c0b89027f557d7bce9c7646ea16b4c30eff4e9939543492820f4040c4313e
36914.86263802 <- expected amount RC1S2CERDJR8BmvF3GZ4sbPviC5JrDYNKe
d1ab50f8afeb1e11eb1133fc9c20273cb2f4ef8eec971bdfa56f2d4349bf33c7
528.33837397 <- expected amount RNy3NHtaKZ11xRqEU4YWWbrcdzjCgDBTuV
683591f99a2ed1d511613fe21496e84f15e86efc9365cb84a80847c2f80b0910
19366.30498750 <- expected amount RXUEryMpxikDCdUT7LyCT3dq6bf4PPRibX
fd143bd2d9b5e4ff8747de2cf3951f0f52be6026df26478e5331618c7f3c97af
13921.94668799 <- expected amount RVoY1wTJug2VWeEG7C35iPseW2CtgZduRN
540e9c776c6c4dedd5def92a522a6b4c778550af2686866ad4b1287d8aebbb37
3873.26099750 <- expected amount RUJRcSoNU1y8WM7xq7X4JAwBMEqovak4Rb
bcea48b56a6ad36af29f7c87fd7a14edd662ddbbc52f9c97371d16dcca29c7da
28437.73050782 <- expected amount RAp5JCZiuapAgcbxgLnvbYKZcLq66LWRRk
ded071de735644f210758726f68b4c6150bb4523f5653b7199a15eb7ab3a435b
4163.75557231 <- expected amount RQantoJxT8szwfAqUM3enLPe85YiQtwndH
b87f15a0f1c9ffb89e0535b1469ebda7cfe3dc83ad88891741e7837d60055253
4483.69874171 <- expected amount RQ7ZvdGNyxKJsn9WKcPbc72R91gs7WooGY
788aa4fe73d8192633d1a461075735090a198c5d12bea35936cd7513c0d3fa95
56079.05303659 <- expected amount RWEzWEk5KSa2yBUCdHnoZ4RXS1VReq6omp
8364a25a0d458dc05941e66e9eb09170a267ec1a1df63eefdfdb80d9d4a81232
8540.87460698 <- expected amount RP8AvHsUhZkbDdcfHFrRsZZn2QVNcBMPNQ
c3e58a0d1c39010a922e4017fd221c4893b10772a3f447736ce722b1e8ea6993
1450.14891746 <- expected amount RLJkv3utC9vbsZDC12JtWPeY8Sp8dCAwZK
a2bf31cefbc81290aecf3ff06a505d9f14605e7576a4d36d59820fb7b030e36b
2949.36469257 <- expected amount RGZcCA8BT3m9vDSXmhyQQijGLw9HCsSdBy
af648086e1d651d1d26456c4da519622ade8cbdccd6af9b0c8f5437fd251347b
25505.74161232 <- expected amount RGbLr8CsszoGATo6uy7fZJ5GJPuXYbA6sv
035ad7612e8e55c1d9278e212ac956446a5906e4feb003897f0f8b95f6663254
51.15844888 <- expected amount RYE329fWaVUaVg55DU4hiB4P2rfr4w3K2Y
7350a71ea0d7e6d99526ed9a5c85b651f233982002f5cf301fbba79335028a3a
4516.65527532 <- expected amount RP7HdvokCK1yJmpVCY49q4LXsVe3qhnEU5
11d94c19c3a2c82b02f1f93f0b4e2e1f0a6d8ebaef16fd89a0c305c420b1cde0
288282.30230152 <- expected amount RTJFUrfou8DU63uyGqH7ULgiCHHPZLkDT5
a97fb20e966eb2cd579b794bb2f218624ae2aeb8f0e37e5b324388ee3ceab56b
2218.92003493 <- expected amount RU1usSdDYTL7yN34EayPxJurQ7UMxDvTkF
710e15413e8da75abe790d0703ba30b472aa7105a77a1345c085d1eebfc4087f
30244.47828467 <- expected amount RQFicXTYo7QzKhFbo3ELuBfo3eyYiUv6o6
c6fa9d781a236f7c8093204aea3e556cdf5cfe9e063458ce67c2afc119f76580
781.43040624 <- expected amount RF2LDXirQQ5afPGVM7W7o3ZQhgGbhSeH8W
18245cc8005658ef365bd12af5b97d7fc1f1a5675bbd1e4138b42c9ec6c8619d
35011.78668474 <- expected amount RMvpp3QwvYch8hFCjZNXvXkzoFWEw9R5QH
0acb562a4c07bdb2f33b2b5cb9f68f840210463e9fd18db639cbeb90de9e99e0
20332.68360637 <- expected amount RH4u1f9PndVVYHkpxdMV28HwbdKphPiX6o
857d1d59ff05ff27e5b3e8ce700d96f3675f9fbfaf433dadfa12acb510a03b7f
4942.25856789 <- expected amount RWszpjqDXG6ifFzTJN2qaqSfZ4nJ8FX3Cp
341859ac10c24da4fb186a44c1e75cf4bedda18541d67ec07a707df7e0e69c30
201.26853079 <- expected amount R9whNiPsV9NHvyPqg6ranxDFvsM8HsDtks
1d3cb3afd0bde49c6c7cdfa233db1822fe40914ee9bd61db2c81715e5ea53cd2
663.13491046 <- expected amount RFfJkcC1fnFZB2G2MUPYdNEeRrZk6njPig
0c824f0c1b31f59e41fbb428f8f0907cd2add1850ba1f9017e7e9f7f04f600ed
29548.60287586 <- expected amount RV49vYgGa9kdzTQ5hq5ra88DkX4wwVdzmK
37412c5be96ee323937ab206493b087475cab8fbae0197b8422308766cf915d2
100186.19238242 <- expected amount RMYqPrPpgosrjcoS34WmBtG9KDRmE7WcXK
474ef35ca33bae3dbf27ea3c7c97bf9a1602c35b49ebad3d547cbd6246d2f023
1853646.03638691 <- expected amount RH1Ug5jz6S5DbJyLENhMthMEAoSBbkXRMq
a2f94d89c18012ff284a957cb02c782c3e0def90225326a13248429b5e004975
56782.00622335 <- expected amount RDQH9gVbS9Yza5fd7T4GSASzdTuwiP3Sgm
d0b85a1a723b4be4d5dfd81d952edf4cd8e4f48efe5d94e06b284c64477e6fc2
151544.96672946 <- expected amount RFREgr9p32GanT4YcM25hMcPYkvRLDNkja
610739fdc49cb25411ce8601afda3afec67ea302fb30143ffdbf610051212490
48415.76246875 <- expected amount RHQggZrkWW9HV8d7o2dvb9mgN1z6tGDJRh
872c7832baefaec9371e405920d66a04eabad19a5bf96f1d4acf09a48ca7201e
295382.69930466 <- expected amount RFjddDTCuobaHatQtd7kTiSjYv94Mp9Cu4
0a96a0d8f6286a92fbef3d0cdff39dac4a545ec53c86f208b7fa07597e426d05
64965.94673778 <- expected amount RKyMDKFNC79FhCfnFr58JE1ibpADa2WScE
45b415f970c7be2eebda55ee16ec06f53e78108ea8dd8d6c6303739fe23a2f77
9683.15249375 <- expected amount RHoPZSxWRgeQp7nB3eTn4dyDpmBRoZPoKv
b3e59b50ba662b58187ba8805cd538700001dafa3aaac7d861fd36e1d1fd28d0
2414.30320001 <- expected amount RGiA2sP25BqtW9qfJ3vRUAPH8zbgepwriY
b9910599dbb95dbffa4654bb71e943a44137ac382961ef3e6cf0a7cd8cfad5a8
19375.01982474 <- expected amount RTHtdb735hqJi5DJjXNiP2LREkqUL5b8Sx
1e4c430408b1348baeba6a3c5512c982178aa31ecfbd8e4ae2992a71cce71032
1589788.37880130 <- expected amount RHZR3YhrgxaYASvNUrcVdoonXCfgrdGULz
270e639e54ca586a2f3e836f00d047469c275a2ce4939950c1af72e541651701
4458.42312105 <- expected amount RCaxwG9VfLVvxMVvc5q7SQxRSuwR9amxoy
9aeef2d9cb225e6378b6395f80b427e74e4612b2c77fa917fcfc7b8769e72ae9
21120.82823309 <- expected amount RAyEy5vxNeAAeRw57BrsN5Kh4zu8i3KYEf
6645da8d60c49f89481af3368809142031387df0fec55284c06a47fad3779b0e
6566.15472364 <- expected amount RHy56MTg74v8AY1Eo2RgbohbMbdHjUDN47
81ed2fa06af264ea2aa37c80520ed4c404ce9fe8df1d0ba74aeb793a01b0e507
59621.32507756 <- expected amount RVNWkGzsFG1ZhzKBzzUj7UPzHMu8s1JWfT
c24ba22994d4fe8cb8fd16bc37e0c2b788146364da20087ae4ad66483f85d1b2
23159.75532541 <- expected amount RGwu8hcD19TKuqzPbjdnzKmkMsUUrdsw5p
e44928ab1c8a9ca209476b8e045e8118e291e6d4e945ab220500c5cf0f095c0a
9683.15249375 <- expected amount RG7jKgxwFPKNPy4MFxXaBr7TRDEzR2sSkV
6213d1dcfc67f81075a2b6b75791868ff9215c85d9ad985ce064cf7e5926c9d7
1504.76189752 <- expected amount RQft1wNt3sgntZDRbpz2WzHDy4F2TRamhB
4da2ae47d8745cf35b5ec454ea098b2d2ea58ccffddbde5adbe87de3c67d2a51
1452.47287406 <- expected amount RRergGKQPDcYHU8PxKhpx6kmR7mXdqp8Ce
ac0d7b59075d46fc37d53a114c31183f592fc82f5d9c3da0a8cfbfa3dc78c038
7746.52199500 <- expected amount RDPo9tEaM9Ds5UePeQS1pAFqXzD1ZVvS1n
15de030bc97e0edbd0f45bf45990d634a540e5ad746d89be763c95888a75f1e5
77304.58455563 <- expected amount RMwP7F2QRMprthjNwT7gHWjHvvqtefwRsJ
c00ef567b0cf806b09f3a9a30d9935efe8271960f97321804c697ad9d4c681c1
894.72329042 <- expected amount RNpa2spCJutTMYHgsr6MwM6X2pmRfYd6LT

100
src/KMD.batch2.txids

@ -1,100 +0,0 @@
c329c89b3f7aafccc387d603701a6a64a936128ac7664fb0fee65e0bf2e429b6
1597.72016146 <- expected amount RDB6rqTtXja9iRKu5KeKz36poQqQkadsvG
b2cdaf93b7eacfed0a4f5097aa04ec75b7370ba0af607eef94e350aea7e70434
30956.65119641 <- expected amount RFahFwS1xmwufLvidWFg3aQwi6JnZ7MV92
56ed0d28cec7e2c69b5c5032196cdeb836c0f03068d06c1ad1a0512cc4dd4829
8011.05479853 <- expected amount RS3dv3trTkvMUc1qpycmcY2mZRZj527HMG
5278f1cd93023398be92f19af29e0a36650d44c749137b933330961f6b58e3f9
501.64865701 <- expected amount RU18xoQZeK4Kno2ER7mv8ZEKLHiTECRhkU
179c2d0dead8ce8290259d89b9ec3e3636c8cfddb5c302329f7f370d7e1ca164
6617.71011981 <- expected amount RFuD6bLb6seuKPmQqouwcjAy1yexEYGJ8Q
18a92ae3929a170820bcc5ad626a926a43f21bcf2010731d3e10618c723c48ab
58970.39868693 <- expected amount RSj2RG9yEbokDDNCn94g6wRf3y1R4HztjT
7e3f8af2083bfa820b629c28109d36aece5d211a90f4f28e2f6a166aa1cf52ba
18618.76561497 <- expected amount RLWjPQPe4zZ1ZF4VpShkiBkgkF4V9YFt7a
9cb657f2475005cd61d75b878f45e08c5a02dcc4f2697c8471b4d9a28e350f03
52766.61227268 <- expected amount RARemRFU1R5QcRdDZqrufjks2KCzBi6bxL
87dce30d57d563adc799d2f10e865b0ff18336d50616bc326fbcc2b30c6f2fe2
7204.26545535 <- expected amount REg8BhZUaxjJu8Ad4ZYsrETJwcwYL7mPkC
26f44e65cd397b58339bbc210e864172c17764f42c0507b603283be31b4e8256
871.48372443 <- expected amount RMnLqCcb13npqdUMgUYAdr4bGawNe5H8yo
325d5c3fdd4a637ec18db2b182c7256535b1fad9e7246e9beab3c17203df9293
681.69393556 <- expected amount RWCz1ibkFVpo6pBoBT7XeMZHVZy61EnYj3
d70a3661cc7b41394e1493656391bb1cba899fbdea7d6ceef74068855324b647
62103.45021354 <- expected amount RJxiu5FTx2Nqr9xHvwdq1xynExUjFKVPdf
2d26feebf39ec339502faa9f87269d3fe34caacb1eb3fcc332c17f85190ec351
9683.15249375 <- expected amount RRcP4HLapHvTinSVYq6bMA3d41XeYCH2Uz
b87fcff23d4d6b1de22d101cb9d312ffd893f170e60726cd03cf2b998a5dbe9d
12520.16564088 <- expected amount RB95bkGifi94Z4VSHGULKhCU8ML7tUbQ71
d131c69df7cd932c6962957e5fed4c4288ef8114b14046a32514845817475bad
3674.15911735 <- expected amount RKb5ay26iSzmBoqm51vPveyErH9BYG3dry
915d049fb7144c834876f3cd37c6af78cfb9cae800dc0b8ed995262912a3129e
1859.16527880 <- expected amount RNFKCPjFTQq5pFxBpehrVFzB55zE9enRyK
33ef89d3a1685aa2f35307b86a198a4d643c43ddd8a13f00431d66cab8f0377c
9683.15249375 <- expected amount REGu6tiLygx7HjsRnEYypHiV3QotErvKxP
991a9017669144f83e724f134a4ae66c2db968fabb35d6196020686d8f10ae1f
612851.03780014 <- expected amount RVeVZrr24524LhN3VRhLqNG6qgH9tBPixx
cabb00fd0bc49d51b494093a6aa247277391ec531b4b12beca58980ff4f6c831
954.83978703 <- expected amount RVGv9EP36z2SHf5zuGrGKEq6or8Q2hEPts
82fa5756cba3af6b06f1dde3080e3e1eaf67f7fe10b1242f038f9e6780819ff3
139007.63452726 <- expected amount RUuWvTwNAMGLpuY3GLPBAmMp8ptShkMSyN
09d000249df0e9cd6a5bbcf110a04be611e19dce4bfc83a4986d8b84ffb8b609
519232.27493854 <- expected amount RFBxwyTKGy5DtxR5CLLZSjKL5jU6fm13kp
8f453874283a089c2a3fe3b6ff5779174c57e230b04ee5c6246d02df042a333a
19366.30498750 <- expected amount RV6EZQRiEszMydw3VjLabjGCBG1HiHrU6f
065f16bf44bc940aab138fbe2ecf99bed897ec3fcdcb1ab97604564bc76a6b6f
19106.59220646 <- expected amount RB1cuwtKBpwZPZnwyJeznaij53ovj8Dm8i
a64451f3360f11c068f2ed9393eba0a8889ffff4156d80e17fe969cb8811cb62
3097.05949360 <- expected amount RK5z4QVhNBWJn5xSkpPPgdcZzms7VtFV4x
f93c8c747753e2742e89d8f0901b5084762327c733499fdc673f1c053ad3c64c
968.31524937 <- expected amount RTSFrcYBPZ3wMUtJCo5RC8n71R2c1ypC46
484d5632f378f026b62c064c649e616b8d9bd889caa67f393210e771e845fe83
14268.23083290 <- expected amount RSxDyaWzqT3VTK9WLkAKhY5WST8a9kQgr9
adf2fd2eee75f5d9fdce44b4fe4d32f62d79f5e1b0362640c76eb109b1ceb30b
1212.14061568 <- expected amount RCZriSKpiSSmgwjumuiMP2XEC2FgYgTrBf
5f2fbb598d9c824c65909c675f9cdf5450062dcf3c5cc74e7028f7709965fe2c
20418.65848567 <- expected amount RVUFVtJN2mVDEsADwMfZBBXXSq3G9QCvBs
25861dd56268dbe16b1139273b1065a35c1fe7a5922a820d8e2dec36d43aaec3
10347.76210933 <- expected amount RDx4sokytAASudNuMDDdk4R6RHJ4P8aPza
ff8b27a51fab38a48749e59f0313eb4857d733ba04a17827152fe3691762a869
71712.83911390 <- expected amount RAPJuPCGMoPwfeHuckiea21LMek8BkH8Zr
2b49a3430d317a1f09b1105cccc8dd2faf11ee730b4ed247a9ce5ac37a56c64a
26725.50088275 <- expected amount RNszK1KnyyDoU6di3qQgCYvSL3V3ZgGNGY
c0d8d3c2d7a5d8ab8ce3ed91dc97c9d4badb304cbf6c916257a68251ba33171e
16435.34703311 <- expected amount RSWsxgczqH1uYyY6MMPePJY5jNjj7uD7Xr
9e93f9084dd0d77b84c6fe71ec6e84fcb3a417f29b102be7b9bc9513b2212b5e
17137.93285029 <- expected amount RVxvCQ393MRnsQ8Fn8qiKm5yP6pk9GVgEr
33a8050ebc63e301adfada7a1c86b84d1ac11891f00efe2c1f546a245e6eedfc
1302.29267891 <- expected amount RMKk4K7zC6QrESUxNGRTfqbBnXr2MFYsLV
3d21078ebe08f4860d3e7cfda791ed78eacf13e2da98295f9aa2e02f9b8b50f1
32805.26183900 <- expected amount RJaaPBFPBTtqzPZ5ZV2uu15urxhiycwg7K
3578e7e457292ab2ba5ab9870eed5d4afd4d8f207d40a5977adc3ac05ae28534
502854.27827071 <- expected amount R9isnAJ2iyyFq8BMZZJu8PiFLpnXPhXcZ7
0a6eb401ccd0f546ea6bc8dd0c94ec9815f3f99e5c2d5c6c3ace3d38563491d2
409543.68954327 <- expected amount RG5eabU8sYvrfWrCu1wb2Go5vxhyVXsbAF
43434a36fa78520ec042e5916662d10ad83f2d1e61014de495943aff647d9137
8908.50029425 <- expected amount RQWxU8AV5SkKCmz6Q3CecmAtnauESPxDod
2f2395d0eb5a29501c2c63fa70b79cfafb2b521fa5826d7f16e6699ef388aad9
708.48776076 <- expected amount RMqivy9QZ7ax1UU8ZxqaupLqDqEBAFW6MY
85bae2856dc4a113ca7e852d09a40a5ecaa08604371a94fd3ba7cf9f4e9cd7fd
29057.20400324 <- expected amount RV85Dvvf4fm13xxtjmucYXDAarMcnV8EFq
a841458bbee450c66a706fd65bc6f3085ec3811885e0021307269f35a634c62f
632.08133544 <- expected amount RJzRaaqhT8R7pbVuVeY3C69X9K89UMU55E
b181d7f1e63468885406edfd312013b3341e1d8b20daafee61ed09aa2688a857
24029.98198519 <- expected amount RCBSjuktzRbsz1UHKjFmTUVG6nDNhd3y2g
a63afab4b50441c2a0d7acf987d806b28ccf7e1a96474bace772fa12abb6f07b
10684.09534584 <- expected amount RKDnex4tqTGA9u2UqEDGS8uTxceqWGwejk
5fbe39fc4f4284b5dee48adba5417360e36b6d6ad3df2f3f57de95c71c9e5258
302.06577591 <- expected amount RYTMDSu1BjaQAdvh6a9CQFCr7h1rsGi48d
e70bfabab12277e80f6c46dc3afa7612fd2e9232f18d0372e5338da3022c67f6
9683.15249375 <- expected amount REhPMC2k5XAsiqd3X1afzdT6SzE9vY7MS6
b552d0a83fad0d9ea90ac807676339a3775ad6135e1626b4283da9b792c629a0
30407.13753317 <- expected amount RVLd4HkkB8SsyXfXHQeHHNouNer7nv3mkL
b705ff799a0053b85764aa6a10dc35f4028404c14e1645423a4ca3e66ecbaedc
4647.91319700 <- expected amount RKa3UX7xvQuYhd9LWHFGjQm8EjbLcnLxo1
292649c59c73458074e05c90be0b98284baf551bd7ea6015dcc329f510eb140b
1914.39627638 <- expected amount RRBhAPHb7WY2XrLSST2oymc4LYtCskzijc
de68a847b4dc4e0d9595dd0ccda713f6c4e40af69a0b0722fb1bf85937019675
56568.34116197 <- expected amount RQFicXTYo7QzKhFbo3ELuBfo3eyYiUv6o6
8c8d15cda8840fe62e3f67a6a1a34ec538c8740dacad9d41363252c0be60635d
96831.52493750 <- expected amount RNkRuGR4uFrcMqrPMu8X5Nwvgbc3Jxxkqk

97
src/KMD.batch4.txids

@ -1,97 +0,0 @@
root@devbox2:~/komodo/src# ./KMD.batch4
6fad08580a1077f3eefa28fcb30e25c81cfe853b48fa1c4dd180f9844e6ec318
1999.45556678 <- expected amount RKmeJpSRwBouZgkTXA1mre8EMNjQ7CawzH
4b4965c30015f501b5566ed5635e38ae964aaba8c99af6f56e496111d434d71c
15493.04399000 <- expected amount RChSVFn3Bi8kW2vRkohcaGw2QEzapdyjA7
735d7f914eb9777fd7c9c44883c876baa53bb58e36a7d89760909ce1e92a706d
843.49707566 <- expected amount RPYGEUfYMHizer5siX2CNpQ6xHAbjtgQuB
8f4ea67ce7366804fe211f4c11a40bd364f8a6774e99c7d814f3778abf582dfa
9678.31091750 <- expected amount RLiYLy1TMui1iVGMhfks6Go1y1mopSkc7T
35aefffe9854b64ede72955ea546f84de618d5ab67426599e7a92e203a53b0c8
1219.26382940 <- expected amount RRLtUwtSG5oQUL6TPk5gtWPSFa4j1eBDxQ
77c71b6be1be68661be35b4c41ec43f8e79fa723caf5c4e7c86b9369ee2ebecf
1841.49885836 <- expected amount RVT4P7mbHcdRmRHBotapx2BsEC1MMcTCMC
9d0e39eb0a11d33544e17c607ad1aebcfdba06d214f99bb83464e92ad8cd3eba
681.69393556 <- expected amount RNrQxuKtPSrJg6fcp665Q7j8A7WTDSbwjU
7041e1cc57a518eac2da5381ba3eaf7d5703f2dde1076a5217727aafd58c57e6
3090.02793673 <- expected amount RTrZWBu7SUZWf4ZdyUVddRPxsnDhZnre7n
aa667173c69495f01b1e065596978f365580ed0303f4daa43dd3efc11345acb4
759.15915551 <- expected amount RU2MYeg8uicVE28k6iiBXUxbxzeZwULwKi
83ed733e584b29b82ab59aa314dd4692a3e26ee612c209fb83fb3c8ac1832776
158029.04869800 <- expected amount RL5Mi7TdaXCWpQNtbs4zUBdHQEurPuRYh8
f7f5190e2f1e33c1c6c3eab6f8ddfaeee289b839f57568f1c690c1ec8a6d59cd
2298.00667939 <- expected amount RGEkGiZQxqTZjsARMzu2exjPkFegXSGT9o
af503537b2d1f590ee60cd7fd4bd20428a5e13c69ce70a4debfb4d4cb4c12bda
2788.74791820 <- expected amount RAYp48ZaMJGmaKCJxeMLzWQXajW7Hd2Yjr
1f9b726760e70c55e0a56b14decda061ee6794951f0515bce5cfeeb52757ed8d
710.78619077 <- expected amount RAryshRkyDqKp3cgavp8CD77yS9A4U5jQz
38a982374bffb59fb7b10cbdd097e9b28b274b8dd54fb1dae396144d8c879e92
1118.59777607 <- expected amount RRbLh1gaRgxRXMRVwGvNw2yESgRyNzscnd
089bd0a9dd2b712554791a4f575f62f2abda25031382795af1dd5a3f920f4e32
8811.66876930 <- expected amount RJtnDNrMY8pzcwwKyUvGLTjDot5jR74FRw
8346c1963fd4a5e70d61163bbe44868c12f42fec8c88597a412e960f500d50d9
79613.96546024 <- expected amount RRixT2CqGcr5cdPoP3G2rhrWDfSbVZR6sk
83f24e4276e6aefce21000c4d444cd0d909f25da717862cb87ed28ef9ffb37c1
854.63736305 <- expected amount RHvVq3gKrEhXkXJSfxEzweGXRBjRMX1HwR
4dc40c9aeffb9f0732614ebbdde8787e4945b0b017cbc858bdddba195cffdb63
87148.37244375 <- expected amount RSqXWQNJTdiiP2L6Q8Pd6nzd3DyN7TzpNF
d2de8684bf2cb239f379a0be089c21dda90fc11ac8745275618c08189c3c9bc6
96831.52493750 <- expected amount RRRWieSx6e2ANSukRrFaRSyF2ikYiqTqbH
f86fbac5375a85a8c2d8651673c339772d98e069a481e2c2e291ed2c06e69b41
1935.66218350 <- expected amount RBhKUj4dmHDDd8Yhm8npoh9ii5V5ZUjtpu
eb6734a2f9ff4b8297fa91867286264cf8998e33d11474773bfd3fe5e0278d0b
50303.39904535 <- expected amount RRCvM3vVV6FPwayTevCCvkpXY2V8RxjEct
0e32fb1cb0887c98da24c5e5ed425f52f542de0c3ee73e73ca3d4416033654a4
106514.67743125 <- expected amount RBopZSXfCKrvi6kELKu9Cn3TYDapxpVr8d
744aaa9d311c1edbd8f358dd4023a7cc030ad43482a6d5c5c8d53dc42deb7250
1526.39979262 <- expected amount RFEHFqHrwcwnTBzvYsuEttQ4rQQZw9qQsH
d68213f76d7e6809bcaf0a1c522220ff9457aa9747182396deacb85330c717b3
2130.29354862 <- expected amount RJzu13gJQjtS6aQdNEaQMrv7TSL4wQBien
acd786f5b7bab14737a25d0ac2eb0e1a61743899f83571a694191a5317cc3c67
20106.39865075 <- expected amount RQgfzPR4zeCyLWaddHysGEVzoKLZa5E4Ut
0a6832c3878dc82afe539a3a54f56b1a6d02fc21f0b03ca78d48124d3634ded1
12526.83053462 <- expected amount RBcmNwoFVZ5kWZB8LMjgGbqvVmByD1DeTJ
3872f0a52c4e6c84a0041a09725874517adb3908d48037dce1811197640956d2
273706.84143501 <- expected amount REwf8D6dyFevVSZc6wjTAwmTgntUM5KWGd
2048f44673413d3a3c36c3f38df77bd1453bc9dd2a93edbaa35ae9c99dd64ee7
3880.03920424 <- expected amount RJQNje5EiBV2C7f28YLcm9LEm8AvrSFtVc
4698dd7471c0e12421ea777216b66a112c9e1817761e0d801f9e4845c258a3cb
116.48367000 <- expected amount RBFuL5swKoyZnLUTVEPjsuwh7pvP5sAz7P
cc32e43ba80e3895630f99a5b0a8e7183ce74c4aa2a93af8baa76a1d2cc1c15c
4646.98361435 <- expected amount RJA8Qe3xtpSjXEXeBa8F54fW9HU3ETHCXd
4c465385ef27929c1077d4b37a205bec302bea710574453b42792f3c6bc7df7d
4893.17953483 <- expected amount RFVp94ZGAAbFhKZG9BwuCBwEjDG9gCpY1g
8f282eab9df0a277c2b786bfd2f02db951131ecb7423a93c46a323dda8b85ea4
13750.07654112 <- expected amount RJcBCXAPp8VYuv87Xz9mNuNCBGJmYCKDFw
543851d36fb88fd8c046211dd6e73ea75a8006b7e195812bbacb14a00ab3b266
6399.50717276 <- expected amount RKhFZqq9ErJBMH36bSA3sgDfd51nAMdRck
7632267444ae27246e0fe876d272b8876b96ec47d2d578e02330cb766793ae0e
740.16851028 <- expected amount RDEbPLoUKK5sbRmJyhouhk3kx2MzTKt6d4
516cf5887eaa2e024881b27b71a767090e168dea7dfccbbe6cf6bd86741bf200
693.08132289 <- expected amount RAaszCNodXXu9rJL6qqVMZDykXncDecTMS
23a7f95e28ec90550f5e73fa509e3a7f614801dffe4e1e29aa02c2492c9e6302
41443.89267324 <- expected amount RHhBfhEDW88fopZfCasn6omtFr7QKa4wSk
cbca63c95d6e016ab816de044d9ef295f630468d1596bb66f3e0dbbfec879168
16344.19309420 <- expected amount RMg5XaC6Lsj3YT2FtCtSDCAa5i715NYxrf
1dd5519298d6689602e56541dc3dd96a7f6a237b1ebaa67b247fa9ee3f9739b5
867960.91662544 <- expected amount RA9G36WwA9K95bn8Cbycq5ZnoxhSzzhhBw
065a059be54fe184bfc9d43d7dd5bc6b71d300c7796ca45e70acbb99634ef2e2
1086.09863742 <- expected amount RVZEqmLd5e8FBfF9Y6uaKL5hEbdKSaRyCY
4d0498e9b38daa2705b35555d95b5cc5addcf8b9915c38f01e7422bb3c1474a5
4319.91306129 <- expected amount RMHJhEJau3JWyvsuWSm7MnzxqY4QgEXXQm
fb58e59e86673c017a32717d7ff933dd5ebf6275b91bbde46c7ecd9242e2b01a
38732.60997500 <- expected amount RHfwxdGyRKD1P9ZAY3wPRNErGjuokg5hgi
11cb10a33a2a7f028220460a4752c8684a465d1038913f0e31c7e110997c4d37
19695.58704144 <- expected amount RVcSdFR5fC3Qjk3CARvQSkra5PQwC8U3uj
d785685b205ffd0ab13cf4660be5262b7727228dd3f6e1b8f1bea8b97f800ee0
2981.62619009 <- expected amount RQokxkBAizLmegMeWK5TyTpSHn2vP5adjo
78cac40448f57823dddbaed6f69eaaa2d7b6cf407d8c5fa90b186fdab7c1d9b8
968.31524937 <- expected amount RXTuSxW7zs1enAXAq3xSaimTR4NYUTQL6Q
48cae9a4889082a43ea0ee8e481b89a4b35e544070827736336cc860f59b7954
3205.27840587 <- expected amount RNg2LQHqauerqtv6yCVXVLug2VFAqc7JaG
ba761c5bcab251499de8af6ebca8dd6f71e4697b69ad38a63ac6ed3f51e20705
40914.30625015 <- expected amount RAMvDwi58oyArqfGseWZsYbR2BN3L7ghVX
4540c58133dbc87880e91bb961cb59531778eefeb3de8c1550e3245e973e032b
48415.76246875 <- expected amount RPUoGZEYGV32m6sU1qYr375mgELoMxVEJu
77aee8dc84ddfc55aae94eab7eef3af07adf80079361a9c865424fe913a9f7f2
1363.38787112 <- expected amount RGH3G91bdgu1WrmiN4aBNREpm8EZwddmvw

323
src/REVS.batch0

@ -1,323 +0,0 @@
# RG1QE6hTqu4dadL2XSNWS9VCHjd8xNVo58 KMD 16462.32091533, REVS 289.86606506
fiat/revs sendtoaddress RG1QE6hTqu4dadL2XSNWS9VCHjd8xNVo58 289.86606506
sleep 1
# RFVvyUAnQe5yon6wq7B73Z1BzfFeZKyAZA KMD 74417.52897713, REVS 500.77700000
fiat/revs sendtoaddress RFVvyUAnQe5yon6wq7B73Z1BzfFeZKyAZA 500.77700000
sleep 1
# RWfaj9ZNmHq5A4jV411xpt1FJoyvKfVJ6c KMD 616895.10028203, REVS 3685.61452692
fiat/revs sendtoaddress RWfaj9ZNmHq5A4jV411xpt1FJoyvKfVJ6c 3685.61452692
sleep 1
# R9dTcQWVDuaRdFqDzq4xPaFDjGbaLK6t8n KMD 1053.37494565, REVS 4.29070721
fiat/revs sendtoaddress R9dTcQWVDuaRdFqDzq4xPaFDjGbaLK6t8n 4.29070721
sleep 1
# REvJWEuwqmwTnanZ8bWt85wnjfrsAjnvgE KMD 3945.67461320, REVS 30.24757576
fiat/revs sendtoaddress REvJWEuwqmwTnanZ8bWt85wnjfrsAjnvgE 30.24757576
sleep 1
# RBpEnyzuQNj1hNdAG1pKLALpAWEUS67PBj KMD 2729058.03025689, REVS 54178.00103054
fiat/revs sendtoaddress RBpEnyzuQNj1hNdAG1pKLALpAWEUS67PBj 54178.00103054
sleep 1
# RHSZ1CWDNhkNbbQRDrqLHRAdCshueMrt2r KMD 8661.80183095, REVS 171.90929822
fiat/revs sendtoaddress RHSZ1CWDNhkNbbQRDrqLHRAdCshueMrt2r 171.90929822
sleep 1
# RTqh7gEJMJDpnBp62FZZAfXctj8X7sRRia KMD 18367.01200788, REVS 350.00000000
fiat/revs sendtoaddress RTqh7gEJMJDpnBp62FZZAfXctj8X7sRRia 350.00000000
sleep 1
# RNhyF9U3o4hTgWqnwQjHwrD1o4GqWiP1T6 KMD 7816.63087181, REVS 78.63808960
fiat/revs sendtoaddress RNhyF9U3o4hTgWqnwQjHwrD1o4GqWiP1T6 78.63808960
sleep 1
# RE3yR2mCeG15ARgvENMbb573VqoQJcM3po KMD 17738.87416605, REVS 18.61556549
fiat/revs sendtoaddress RE3yR2mCeG15ARgvENMbb573VqoQJcM3po 18.61556549
sleep 1
# RT7ENMvL46nwrFfNj1TLa5FEqJzTztHefH KMD 26696.69308472, REVS 529.99000000
fiat/revs sendtoaddress RT7ENMvL46nwrFfNj1TLa5FEqJzTztHefH 529.99000000
sleep 1
# RDTcqgh4MMHLtu9FBCcULqZmP761DFmk9b KMD 82906.87674571, REVS 1438.93600000
fiat/revs sendtoaddress RDTcqgh4MMHLtu9FBCcULqZmP761DFmk9b 1438.93600000
sleep 1
# RHSUmLRyJwpbdsRtytkGs9GmpZghQWHje3 KMD 2197.34858012, REVS 43.61040113
fiat/revs sendtoaddress RHSUmLRyJwpbdsRtytkGs9GmpZghQWHje3 43.61040113
sleep 1
# RJEQbNrMQUHELrYPVLPepR2Y3ruAag3hEP KMD 64966.39751162, REVS 1035.00000000
fiat/revs sendtoaddress RJEQbNrMQUHELrYPVLPepR2Y3ruAag3hEP 1035.00000000
sleep 1
# RJ1DUUySYib5LcwJKFJ78PD3so2GQ89jKJ KMD 377892.70160675, REVS 7501.00000000
fiat/revs sendtoaddress RJ1DUUySYib5LcwJKFJ78PD3so2GQ89jKJ 7501.00000000
sleep 1
# RC2nLGhFUc5Q9QFG1b38gAi9WgSgzQ9hJR KMD 41.38832712, REVS 0.82090537
fiat/revs sendtoaddress RC2nLGhFUc5Q9QFG1b38gAi9WgSgzQ9hJR 0.82090537
sleep 1
# RCJHEogA7SW6PxuctPLtaVnXwiu49PyZY8 KMD 1350076.86672091, REVS 100.00000000
fiat/revs sendtoaddress RCJHEogA7SW6PxuctPLtaVnXwiu49PyZY8 100.00000000
sleep 1
# RJbudEMb7wEEN8QZ18fEkptxjE4QnMECUu KMD 50567.04202258, REVS 1003.32000000
fiat/revs sendtoaddress RJbudEMb7wEEN8QZ18fEkptxjE4QnMECUu 1003.32000000
sleep 1
# RSdVypRznJsboL6MaP1shkaLhrVFcNx2KL KMD 589187.66272894, REVS 11685.49743445
fiat/revs sendtoaddress RSdVypRznJsboL6MaP1shkaLhrVFcNx2KL 11685.49743445
sleep 1
# RWXwZyGf4q7cBakkY4tgupptBbCSvcBsBH KMD 1012.75625347, REVS 20.10000000
fiat/revs sendtoaddress RWXwZyGf4q7cBakkY4tgupptBbCSvcBsBH 20.10000000
sleep 1
# RA7UJPwPxqgPHn4YscYWRH5EPQVaFaaaPa KMD 45132.81116316, REVS 342.26137428
fiat/revs sendtoaddress RA7UJPwPxqgPHn4YscYWRH5EPQVaFaaaPa 342.26137428
sleep 1
# RRFFxsc6kkfahR7v4paTaUZrPFisuz9Nkq KMD 155.36852443, REVS 3.08314987
fiat/revs sendtoaddress RRFFxsc6kkfahR7v4paTaUZrPFisuz9Nkq 3.08314987
sleep 1
# RWFSbi9ECuZWVE37jpkbiKGw7DaFYdNtts KMD 23963.90703474, REVS 475.60756080
fiat/revs sendtoaddress RWFSbi9ECuZWVE37jpkbiKGw7DaFYdNtts 475.60756080
sleep 1
# RUVkn1F9g7TxoPbYtegiQoFnPTusP2gzDr KMD 43088.75849296, REVS 470.88002226
fiat/revs sendtoaddress RUVkn1F9g7TxoPbYtegiQoFnPTusP2gzDr 470.88002226
sleep 1
# R9vBYQw9tSBhu2c1g4SQhZdhuZeeQrEBoN KMD 111664.10821907, REVS 2023.42268720
fiat/revs sendtoaddress R9vBYQw9tSBhu2c1g4SQhZdhuZeeQrEBoN 2023.42268720
sleep 1
# RG8g7LjK7hdyKp3aoKBRdwzpLy31XMXMLk KMD 972.80557592, REVS 19.29916914
fiat/revs sendtoaddress RG8g7LjK7hdyKp3aoKBRdwzpLy31XMXMLk 19.29916914
sleep 1
# RJ7RfZfip4qL9uEJs7Wr9FYtGusQiryMqE KMD 43251.49599262, REVS 857.93461385
fiat/revs sendtoaddress RJ7RfZfip4qL9uEJs7Wr9FYtGusQiryMqE 857.93461385
sleep 1
# RNW6Kkcdktbeemd2n8NVPCfgnRirzWoiZY KMD 53585.08128315, REVS 731.01000000
fiat/revs sendtoaddress RNW6Kkcdktbeemd2n8NVPCfgnRirzWoiZY 731.01000000
sleep 1
# RE1NYFqFG2vmhhHVY7QFC7sTp7zBxvSSP3 KMD 57862.44847739, REVS 464.78017965
fiat/revs sendtoaddress RE1NYFqFG2vmhhHVY7QFC7sTp7zBxvSSP3 464.78017965
sleep 1
# RTkvmxME9rVZBY6ABNqkkbqKvn8WUqgQqr KMD 215743.93040290, REVS 4280.65926868
fiat/revs sendtoaddress RTkvmxME9rVZBY6ABNqkkbqKvn8WUqgQqr 4280.65926868
sleep 1
# RS9erX84xJG17efdZ66qHxhsUMG15fnCsH KMD 977546.42205511, REVS 19403.85638743
fiat/revs sendtoaddress RS9erX84xJG17efdZ66qHxhsUMG15fnCsH 19403.85638743
sleep 1
# RE1wsrDNwW2NnNWM5eE162yp6haLtm5uh7 KMD 14588.33036215, REVS 289.61149547
fiat/revs sendtoaddress RE1wsrDNwW2NnNWM5eE162yp6haLtm5uh7 289.61149547
sleep 1
# RK5BnRzCP52qsTE4xR3Qysn6m6KeTgpZA6 KMD 3170.70655908, REVS 37.96790925
fiat/revs sendtoaddress RK5BnRzCP52qsTE4xR3Qysn6m6KeTgpZA6 37.96790925
sleep 1
# RN6TfTEYHdvFAeosYrvDaMBb2yBco47Q5a KMD 7073.16782615, REVS 44.30216197
fiat/revs sendtoaddress RN6TfTEYHdvFAeosYrvDaMBb2yBco47Q5a 44.30216197
sleep 1
# RV4Hf22arBv4P4s5eFsUAnXC6N11T8x9tv KMD 117108.97863641, REVS 1631.49836519
fiat/revs sendtoaddress RV4Hf22arBv4P4s5eFsUAnXC6N11T8x9tv 1631.49836519
sleep 1
# RYBH6Ha8RJa3CcE91yxJP6z2E6mDFm3bBt KMD 163386.58575808, REVS 50.00000000
fiat/revs sendtoaddress RYBH6Ha8RJa3CcE91yxJP6z2E6mDFm3bBt 50.00000000
sleep 1
# RUY7YW1WmTD3hCvkXmUKLeRnNg5UsJoLbU KMD 6742.29255596, REVS 105.00000000
fiat/revs sendtoaddress RUY7YW1WmTD3hCvkXmUKLeRnNg5UsJoLbU 105.00000000
sleep 1
# RNVwzuZynZ7d4DE5CfT8CWkxsp9TtCY3BF KMD 1598.36899361, REVS 11.75449303
fiat/revs sendtoaddress RNVwzuZynZ7d4DE5CfT8CWkxsp9TtCY3BF 11.75449303
sleep 1
# RPriQZfzzgin7y2Ns6vxdrMAa4XgZqdY6y KMD 21671.70738465, REVS 170.69524117
fiat/revs sendtoaddress RPriQZfzzgin7y2Ns6vxdrMAa4XgZqdY6y 170.69524117
sleep 1
# RSCdeeWvzpBhg2tKnCWZWKw9iAMyYWiREG KMD 12075.12037906, REVS 239.62000000
fiat/revs sendtoaddress RSCdeeWvzpBhg2tKnCWZWKw9iAMyYWiREG 239.62000000
sleep 1
# RUAvb7FFPvxjNTVhABeS2EbbdUi2LfGNMj KMD 25710.06172178, REVS 510.00000000
fiat/revs sendtoaddress RUAvb7FFPvxjNTVhABeS2EbbdUi2LfGNMj 510.00000000
sleep 1
# RQuMEMn1TG7CCpbmYCVcDfPqesEvEkisjC KMD 34758.47429765, REVS 689.94006658
fiat/revs sendtoaddress RQuMEMn1TG7CCpbmYCVcDfPqesEvEkisjC 689.94006658
sleep 1
# RBNB5mKstG86jYRjrKFgJuFoUFvZKJb9Wq KMD 816561.67159376, REVS 16199.49755302
fiat/revs sendtoaddress RBNB5mKstG86jYRjrKFgJuFoUFvZKJb9Wq 16199.49755302
sleep 1
# RHoouCBBapEHE6uyX7CxHGFcRwUQFGMot5 KMD 88331.27512150, REVS 1398.88449696
fiat/revs sendtoaddress RHoouCBBapEHE6uyX7CxHGFcRwUQFGMot5 1398.88449696
sleep 1
# RLHEGDwXuXQwhYkrhwSRGSJMFuvv7EAT7i KMD 22366.16022678, REVS 443.95821128
fiat/revs sendtoaddress RLHEGDwXuXQwhYkrhwSRGSJMFuvv7EAT7i 443.95821128
sleep 1
# RAEtFUqe3jwVxLywCga2eKQxT2DiewsUuN KMD 25.54297774, REVS 0.50680815
fiat/revs sendtoaddress RAEtFUqe3jwVxLywCga2eKQxT2DiewsUuN 0.50680815
sleep 1
# RUcDMtu7fA3ATbHHsDTsZ8KThgd1ivawym KMD 21446.21749875, REVS 241.00000000
fiat/revs sendtoaddress RUcDMtu7fA3ATbHHsDTsZ8KThgd1ivawym 241.00000000
sleep 1
# RG2cAef3JbCXiQkzPgrqS52HAQrBzJiAy4 KMD 102137.83664315, REVS 2027.11216000
fiat/revs sendtoaddress RG2cAef3JbCXiQkzPgrqS52HAQrBzJiAy4 2027.11216000
sleep 1
# REzcqBkARMCCxkA5rVdp61f7rovmFtq5kf KMD 130928.69826981, REVS 2597.54928401
fiat/revs sendtoaddress REzcqBkARMCCxkA5rVdp61f7rovmFtq5kf 2597.54928401
sleep 1
# RXKZmFmmpfAV2DAdUUXhA88RqCoyPRXcnA KMD 28641.72782430, REVS 337.66808110
fiat/revs sendtoaddress RXKZmFmmpfAV2DAdUUXhA88RqCoyPRXcnA 337.66808110
sleep 1
# RCxnQhmYdpK9vTS7PLRtXBtDk2HaRNo1qk KMD 2171.04073365, REVS 43.05910000
fiat/revs sendtoaddress RCxnQhmYdpK9vTS7PLRtXBtDk2HaRNo1qk 43.05910000
sleep 1
# RPtwW4UejbAxs5PU6a1zMPcPqW7SVghMDS KMD 31741.86724191, REVS 514.45537037
fiat/revs sendtoaddress RPtwW4UejbAxs5PU6a1zMPcPqW7SVghMDS 514.45537037
sleep 1
# RYMzZx5nxKrMtTm3TNeheVn4RooTGvhsNd KMD 12756.16332851, REVS 253.10000000
fiat/revs sendtoaddress RYMzZx5nxKrMtTm3TNeheVn4RooTGvhsNd 253.10000000
sleep 1
# RPyKbtBPVb3FYv5iFULNUB6bq9DdvekZuz KMD 3422.63549310, REVS 51.90683618
fiat/revs sendtoaddress RPyKbtBPVb3FYv5iFULNUB6bq9DdvekZuz 51.90683618
sleep 1
# RVcGdBT2N6Fbqbptj3R4zhZYNB4WJQWEns KMD 77986.19708921, REVS 1548.20316000
fiat/revs sendtoaddress RVcGdBT2N6Fbqbptj3R4zhZYNB4WJQWEns 1548.20316000
sleep 1
# RH4SXj2zZqfG4TfejyHcVpaoPoDv1Uonnf KMD 11621.99031627, REVS 192.14192021
fiat/revs sendtoaddress RH4SXj2zZqfG4TfejyHcVpaoPoDv1Uonnf 192.14192021
sleep 1
# REtq1LtbLVo6bz68f9TGFduNmUTKqG7vnH KMD 25088.84725730, REVS 305.62849999
fiat/revs sendtoaddress REtq1LtbLVo6bz68f9TGFduNmUTKqG7vnH 305.62849999
sleep 1
# RS3rMPEGouBWbHKStyQg8TxVmtwFQ6ebh3 KMD 3546.25060143, REVS 39.99000000
fiat/revs sendtoaddress RS3rMPEGouBWbHKStyQg8TxVmtwFQ6ebh3 39.99000000
sleep 1
# RGzvr4JSHDLDQAGBwdyoUiUuaYn5sUwKNd KMD 69108.92543895, REVS 314.51750000
fiat/revs sendtoaddress RGzvr4JSHDLDQAGBwdyoUiUuaYn5sUwKNd 314.51750000
sleep 1
# RMD1wVnzMmKn8uMTHaP9pYfCWkxf3QVWWE KMD 2931.50081538, REVS 40.37145505
fiat/revs sendtoaddress RMD1wVnzMmKn8uMTHaP9pYfCWkxf3QVWWE 40.37145505
sleep 1
# RQCEEEprmqghZHN73iG1C2XvYTTQ6FB2wE KMD 5506.18026103, REVS 90.00054364
fiat/revs sendtoaddress RQCEEEprmqghZHN73iG1C2XvYTTQ6FB2wE 90.00054364
sleep 1
# RCmLc2JBpPw9T9g1skg7J5Xr5kz1fyd7mx KMD 529.41438680, REVS 10.50000000
fiat/revs sendtoaddress RCmLc2JBpPw9T9g1skg7J5Xr5kz1fyd7mx 10.50000000
sleep 1
# R9ULUWEvzmHPZ4rYL5FtwkMyTWvGDZX43J KMD 15051.18125683, REVS 298.60000000
fiat/revs sendtoaddress R9ULUWEvzmHPZ4rYL5FtwkMyTWvGDZX43J 298.60000000
sleep 1
# RW2xS8dpxjudqBX1hqxShP7FWn8EHYH4Rb KMD 166779.58408020, REVS 3310.49966000
fiat/revs sendtoaddress RW2xS8dpxjudqBX1hqxShP7FWn8EHYH4Rb 3310.49966000
sleep 1
# RALRwXaEN3yS5damdDwAkmEMKvdAkVs361 KMD 25746.96382302, REVS 510.64558668
fiat/revs sendtoaddress RALRwXaEN3yS5damdDwAkmEMKvdAkVs361 510.64558668
sleep 1
# RPVNUvVq4BgKrrB3E1uULja2hjPW6Hv6r9 KMD 16872.68860925, REVS 334.64000000
fiat/revs sendtoaddress RPVNUvVq4BgKrrB3E1uULja2hjPW6Hv6r9 334.64000000
sleep 1
# RWTfFTP7c9WxLhgxd2EXSsKszpDVPXHN8A KMD 19616.45270312, REVS 389.05771834
fiat/revs sendtoaddress RWTfFTP7c9WxLhgxd2EXSsKszpDVPXHN8A 389.05771834
sleep 1
# RXFr5VB9gQYC5QYv7yVvkxtjDY3zwYuvDx KMD 327.74801651, REVS 6.50475878
fiat/revs sendtoaddress RXFr5VB9gQYC5QYv7yVvkxtjDY3zwYuvDx 6.50475878
sleep 1
# RHUpvFhHv1umX1JsV5S8smAKAsN5CxA4HD KMD 2183.96436714, REVS 2.36599993
fiat/revs sendtoaddress RHUpvFhHv1umX1JsV5S8smAKAsN5CxA4HD 2.36599993
sleep 1
# RAhvJHePdAb1PF9jjZhP2F7r72ebL9pA1f KMD 3457.02047726, REVS 68.56389987
fiat/revs sendtoaddress RAhvJHePdAb1PF9jjZhP2F7r72ebL9pA1f 68.56389987
sleep 1
# RDCjGgoZ1tvCWop6m5wPYkr83wdFrofF6M KMD 76598.36955552, REVS 1519.19347187
fiat/revs sendtoaddress RDCjGgoZ1tvCWop6m5wPYkr83wdFrofF6M 1519.19347187
sleep 1
# RLAEm3H2LMSNzJmveLkcf2nS18AnqWR7pJ KMD 82831.36892196, REVS 1643.94000000
fiat/revs sendtoaddress RLAEm3H2LMSNzJmveLkcf2nS18AnqWR7pJ 1643.94000000
sleep 1
# RSUfnwTLE36E3Nx8PptxVoAfSRtMeGQsFL KMD 67327.03192299, REVS 1282.48928243
fiat/revs sendtoaddress RSUfnwTLE36E3Nx8PptxVoAfSRtMeGQsFL 1282.48928243
sleep 1
# RPkkQmMmyLQe8Th7ZP5GoF6kSUs1DTNfAf KMD 1538.42929417, REVS 30.51202988
fiat/revs sendtoaddress RPkkQmMmyLQe8Th7ZP5GoF6kSUs1DTNfAf 30.51202988
sleep 1
# RSkhXmiPCxqdp4bM4ux7VxAwMoCv2Uar6d KMD 73542.70261753, REVS 1459.56877203
fiat/revs sendtoaddress RSkhXmiPCxqdp4bM4ux7VxAwMoCv2Uar6d 1459.56877203
sleep 1
# RUJvR3TXCAcizk7dXdFc6GKRFS6jZfjtyY KMD 10419.10088055, REVS 206.75776925
fiat/revs sendtoaddress RUJvR3TXCAcizk7dXdFc6GKRFS6jZfjtyY 206.75776925
sleep 1
# RLZmhbeB2tXTas9grzAeqaL2RFAXVmDVpU KMD 43480.56469698, REVS 50.30001915
fiat/revs sendtoaddress RLZmhbeB2tXTas9grzAeqaL2RFAXVmDVpU 50.30001915
sleep 1
# RLCDEXwfJ75P1iKgWGfR9geJmjZ84A4XXJ KMD 105141.23597043, REVS 1006.07261743
fiat/revs sendtoaddress RLCDEXwfJ75P1iKgWGfR9geJmjZ84A4XXJ 1006.07261743
sleep 1
# RW1FmQGcpPv87WZVSCaMgjj74shMb3Y6Zi KMD 33700.59190315, REVS 380.47576230
fiat/revs sendtoaddress RW1FmQGcpPv87WZVSCaMgjj74shMb3Y6Zi 380.47576230
sleep 1
# RQUMrGYr4SsHgbN56WP7tuEpWUcd62KidP KMD 61230.10078656, REVS 600.00100000
fiat/revs sendtoaddress RQUMrGYr4SsHgbN56WP7tuEpWUcd62KidP 600.00100000
sleep 1
# RP8CkGhyfhdoVpGqGbVmEmRL7gGdqKBdkt KMD 153725.02014837, REVS 3049.70000000
fiat/revs sendtoaddress RP8CkGhyfhdoVpGqGbVmEmRL7gGdqKBdkt 3049.70000000
sleep 1
# RRupn47XfLSMhXEuShtCCPBCv8P6LYXrLN KMD 790607.74140148, REVS 15691.16324116
fiat/revs sendtoaddress RRupn47XfLSMhXEuShtCCPBCv8P6LYXrLN 15691.16324116
sleep 1
# RRX73tynW4sxCmqyYBQrS9nMcDUcXuX1yG KMD 26022.54788263, REVS 5.39446042
fiat/revs sendtoaddress RRX73tynW4sxCmqyYBQrS9nMcDUcXuX1yG 5.39446042
sleep 1
# R9u7V63TLwJPH1shvAGHRG61aci61yy7RN KMD 20764.40163902, REVS 291.83028199
fiat/revs sendtoaddress R9u7V63TLwJPH1shvAGHRG61aci61yy7RN 291.83028199
sleep 1
# RKAxvqvC3apzrb8udG9trBxiNhhNXaLkz4 KMD 6483.53169406, REVS 5.41696484
fiat/revs sendtoaddress RKAxvqvC3apzrb8udG9trBxiNhhNXaLkz4 5.41696484
sleep 1
# RV5cgPjqt37QBHr94VL5HnXWqcwdqoqoC3 KMD 81008.20903630, REVS 1607.10337790
fiat/revs sendtoaddress RV5cgPjqt37QBHr94VL5HnXWqcwdqoqoC3 1607.10337790
sleep 1
# RMnuGgpEzWcxYi861E7BjGMURCFX2Szj2v KMD 14010.00244099, REVS 277.86367220
fiat/revs sendtoaddress RMnuGgpEzWcxYi861E7BjGMURCFX2Szj2v 277.86367220
sleep 1
# RF4iG6huXb9u6Pt8281WvnBjhdEtiVUnp4 KMD 674.21697725, REVS 13.37190382
fiat/revs sendtoaddress RF4iG6huXb9u6Pt8281WvnBjhdEtiVUnp4 13.37190382
sleep 1
# RW3gz9fEadohRLZerK9r8zXkugk5swWHrf KMD 21219.62483892, REVS 421.20000000
fiat/revs sendtoaddress RW3gz9fEadohRLZerK9r8zXkugk5swWHrf 421.20000000
sleep 1
# RJ89radoRzRr5oDsf71QZ7BXUTiHcyVSUu KMD 52588.80320859, REVS 1043.00609779
fiat/revs sendtoaddress RJ89radoRzRr5oDsf71QZ7BXUTiHcyVSUu 1043.00609779
sleep 1
# RKenAzKZyD58qPu2zVdjwPjDn71T34sWE4 KMD 668547.16129881, REVS 13259.45302721
fiat/revs sendtoaddress RKenAzKZyD58qPu2zVdjwPjDn71T34sWE4 13259.45302721
sleep 1
# R9ibGGfsFHD8MxLRL4q2a6ezxAaHHPJvLc KMD 241619.45649268, REVS 4792.09548598
fiat/revs sendtoaddress R9ibGGfsFHD8MxLRL4q2a6ezxAaHHPJvLc 4792.09548598
sleep 1
# RGwuMmW1ZBMrHJwJucEy5JEV3BZWv7eQnm KMD 9071868.91817425, REVS 180010.00000000
fiat/revs sendtoaddress RGwuMmW1ZBMrHJwJucEy5JEV3BZWv7eQnm 180010.00000000
sleep 1
# RT6Ckpw8yM2Q7yaCxejiVTrxELGQPtnGPm KMD 25778.27244764, REVS 225.87592741
fiat/revs sendtoaddress RT6Ckpw8yM2Q7yaCxejiVTrxELGQPtnGPm 225.87592741
sleep 1
# RGf4wwbHVYYZrVPVZg6XdS3mWvbzHSebzu KMD 6387.59296405, REVS 126.73871740
fiat/revs sendtoaddress RGf4wwbHVYYZrVPVZg6XdS3mWvbzHSebzu 126.73871740
sleep 1
# RJAbNiCSRaMxUky9h8as6orZY3cu2rSW8z KMD 492782.94486222, REVS 9773.48000000
fiat/revs sendtoaddress RJAbNiCSRaMxUky9h8as6orZY3cu2rSW8z 9773.48000000
sleep 1
# RSW5SvtjWiGYN3iwb2mteYP7Hn223Zk1tP KMD 343847.33707184, REVS 6001.47957339
fiat/revs sendtoaddress RSW5SvtjWiGYN3iwb2mteYP7Hn223Zk1tP 6001.47957339
sleep 1
# RFPKxBL8iLQGmkoUukXdFU7VkXyGJLSsGw KMD 36335.50253541, REVS 413.60001059
fiat/revs sendtoaddress RFPKxBL8iLQGmkoUukXdFU7VkXyGJLSsGw 413.60001059
sleep 1
# RVFspAKoUpDMAiiEUiQQEpqdqXDMB48Jqp KMD 47464.51702590, REVS 634.55156126
fiat/revs sendtoaddress RVFspAKoUpDMAiiEUiQQEpqdqXDMB48Jqp 634.55156126
sleep 1
# RCPys8hvEfFSDkMZL7GtYA8a5GSwih67Q1 KMD 36359.70475507, REVS 100.00000000
fiat/revs sendtoaddress RCPys8hvEfFSDkMZL7GtYA8a5GSwih67Q1 100.00000000
sleep 1
# R9ce1xHEaWnRRP5jrWozEfPf9ZJgX7jnxd KMD 915808.36366861, REVS 18163.44258555
fiat/revs sendtoaddress R9ce1xHEaWnRRP5jrWozEfPf9ZJgX7jnxd 18163.44258555
sleep 1
# RS1rdGqAhXvwFFTVyUCx695y84E3N3emcU KMD 18822.21903353, REVS 360.77089072
fiat/revs sendtoaddress RS1rdGqAhXvwFFTVyUCx695y84E3N3emcU 360.77089072
sleep 1
# RLgKsmgdzwNCt8CgqZ5J6cZhTat9HeZgxG KMD 62376.97840244, REVS 1045.22605497
fiat/revs sendtoaddress RLgKsmgdzwNCt8CgqZ5J6cZhTat9HeZgxG 1045.22605497
sleep 1
# RUBESyzjgZUts3fD6W7abpgMj4qRFSSszC KMD 541390.42407502, REVS 10592.65522652
fiat/revs sendtoaddress RUBESyzjgZUts3fD6W7abpgMj4qRFSSszC 10592.65522652
sleep 1
# RSNu7Kd9p33aDrgT2AM8buy7fUSQZ2N3Gs KMD 130769.80646849, REVS 2593.58831601
fiat/revs sendtoaddress RSNu7Kd9p33aDrgT2AM8buy7fUSQZ2N3Gs 2593.58831601
sleep 1
# RCrCe4dsMzXzzp7GLahubjg73VGK2rnczC KMD 6843.04832293, REVS 25.10000000
fiat/revs sendtoaddress RCrCe4dsMzXzzp7GLahubjg73VGK2rnczC 25.10000000
sleep 1
# RVTCRzofA2cV6FwGcvn1uGjZJmP5s9G1o9 KMD 95283.12042643, REVS 497.50723875
fiat/revs sendtoaddress RVTCRzofA2cV6FwGcvn1uGjZJmP5s9G1o9 497.50723875
sleep 1
# total KMD 45769105.32172734 REVS 426291.27268935

78
src/REVS.batch1

@ -1,78 +0,0 @@
sleep 9999999
# RA4nyddYYzEzoUqnpLCvTm8d4nKvqQavs4 KMD 205767.24475092, REVS 4084.38717211
sleep 1
fiat/revs sendtoaddress RA4nyddYYzEzoUqnpLCvTm8d4nKvqQavs4 4084.38717211
# RFppcFo1bKQzD4zxrxCbicpAvnrqo99hPx KMD 138163.01002402, REVS 2740.59474723
sleep 1
fiat/revs sendtoaddress RFppcFo1bKQzD4zxrxCbicpAvnrqo99hPx 2740.59474723
# RHfHV1LTG5rz3T2HApavCto9973puD93qt KMD 243998.92767004, REVS 4839.53600000
sleep 1
fiat/revs sendtoaddress RHfHV1LTG5rz3T2HApavCto9973puD93qt 4839.53600000
# RPNRr6efhaPYKHzRyemxYowUbNQ6crBtcy KMD 36785.74330117, REVS 730.28056435
sleep 1
fiat/revs sendtoaddress RPNRr6efhaPYKHzRyemxYowUbNQ6crBtcy 730.28056435
# RTnhkYHVoApyX8Fc2ZEHB2rtW7cLHqZEMB KMD 567760.05597770, REVS 11191.99000000
sleep 1
fiat/revs sendtoaddress RTnhkYHVoApyX8Fc2ZEHB2rtW7cLHqZEMB 11191.99000000
# RER2vwRLHFT4HNQLzyqT1PhbeMCitDaY1u KMD 7771.42052436, REVS 0.62700000
sleep 1
fiat/revs sendtoaddress RER2vwRLHFT4HNQLzyqT1PhbeMCitDaY1u 0.62700000
# RM3onNDjZbjypoN8wqo7Rzz3QEv6EiCfwK KMD 18186.86986853, REVS 143.39272495
sleep 1
fiat/revs sendtoaddress RM3onNDjZbjypoN8wqo7Rzz3QEv6EiCfwK 143.39272495
# RVXTirtRaZkYk1wjAE3mwhdUjTXWKrTnFu KMD 2375.16051963, REVS 47.12337252
sleep 1
fiat/revs sendtoaddress RVXTirtRaZkYk1wjAE3mwhdUjTXWKrTnFu 47.12337252
# RJJBtg8XfxMmb6rg6UMWME6zhxM1n8Umta KMD 70173.29001640, REVS 1392.33555151
sleep 1
fiat/revs sendtoaddress RJJBtg8XfxMmb6rg6UMWME6zhxM1n8Umta 1392.33555151
# REbMisMicS8W7LUqBPJwkVfYHxNfSeW7d8 KMD 220390.81840860, REVS 1384.18511377
sleep 1
fiat/revs sendtoaddress REbMisMicS8W7LUqBPJwkVfYHxNfSeW7d8 1384.18511377
# RRDmaG64XZjdERzojAQ3DwHewBZbXfqpcJ KMD 479029.87110523, REVS 9502.00000000
sleep 1
fiat/revs sendtoaddress RRDmaG64XZjdERzojAQ3DwHewBZbXfqpcJ 9502.00000000
# RTBeZc5Biq3BY1hB1dXi6XTaH8j6FsyGuz KMD 230594.13977661, REVS 8.48502608
sleep 1
fiat/revs sendtoaddress RTBeZc5Biq3BY1hB1dXi6XTaH8j6FsyGuz 8.48502608
# RGbLr8CsszoGATo6uy7fZJ5GJPuXYbA6sv KMD 25505.74161232, REVS 506.00000000
sleep 1
fiat/revs sendtoaddress RGbLr8CsszoGATo6uy7fZJ5GJPuXYbA6sv 506.00000000
# RP7HdvokCK1yJmpVCY49q4LXsVe3qhnEU5 KMD 4516.65527532, REVS 31.96541397
sleep 1
fiat/revs sendtoaddress RP7HdvokCK1yJmpVCY49q4LXsVe3qhnEU5 31.96541397
# RMvpp3QwvYch8hFCjZNXvXkzoFWEw9R5QH KMD 35011.78668474, REVS 310.59835083
sleep 1
fiat/revs sendtoaddress RMvpp3QwvYch8hFCjZNXvXkzoFWEw9R5QH 310.59835083
# R9whNiPsV9NHvyPqg6ranxDFvsM8HsDtks KMD 201.26853079, REVS 3.99180609
sleep 1
fiat/revs sendtoaddress R9whNiPsV9NHvyPqg6ranxDFvsM8HsDtks 3.99180609
# RFfJkcC1fnFZB2G2MUPYdNEeRrZk6njPig KMD 663.13491046, REVS 13.16292943
sleep 1
fiat/revs sendtoaddress RFfJkcC1fnFZB2G2MUPYdNEeRrZk6njPig 13.16292943
# RV49vYgGa9kdzTQ5hq5ra88DkX4wwVdzmK KMD 29548.60287586, REVS 586.04438779
sleep 1
fiat/revs sendtoaddress RV49vYgGa9kdzTQ5hq5ra88DkX4wwVdzmK 586.04438779
# RMYqPrPpgosrjcoS34WmBtG9KDRmE7WcXK KMD 100186.19238242, REVS 1944.84440292
sleep 1
fiat/revs sendtoaddress RMYqPrPpgosrjcoS34WmBtG9KDRmE7WcXK 1944.84440292
# RH1Ug5jz6S5DbJyLENhMthMEAoSBbkXRMq KMD 1853646.03638691, REVS 415.68775429
sleep 1
fiat/revs sendtoaddress RH1Ug5jz6S5DbJyLENhMthMEAoSBbkXRMq 415.68775429
# RFREgr9p32GanT4YcM25hMcPYkvRLDNkja KMD 151544.96672946, REVS 3005.62695376
sleep 1
fiat/revs sendtoaddress RFREgr9p32GanT4YcM25hMcPYkvRLDNkja 3005.62695376
# RFjddDTCuobaHatQtd7kTiSjYv94Mp9Cu4 KMD 295382.69930466, REVS 5860.00000000
sleep 1
fiat/revs sendtoaddress RFjddDTCuobaHatQtd7kTiSjYv94Mp9Cu4 5860.00000000
# RVNWkGzsFG1ZhzKBzzUj7UPzHMu8s1JWfT KMD 59621.32507756, REVS 606.36817953
sleep 1
fiat/revs sendtoaddress RVNWkGzsFG1ZhzKBzzUj7UPzHMu8s1JWfT 606.36817953
# RGwu8hcD19TKuqzPbjdnzKmkMsUUrdsw5p KMD 23159.75532541, REVS 459.58469952
sleep 1
fiat/revs sendtoaddress RGwu8hcD19TKuqzPbjdnzKmkMsUUrdsw5p 459.58469952
# RMwP7F2QRMprthjNwT7gHWjHvvqtefwRsJ KMD 77304.58455563, REVS 1533.20000000
sleep 1
fiat/revs sendtoaddress RMwP7F2QRMprthjNwT7gHWjHvvqtefwRsJ 1533.20000000
# total KMD 0.00000000 REVS 51342.01215065

25
src/REVS.batch1.txids

@ -1,25 +0,0 @@
b35af354357e56e2cb628d6b871b29ccecc9451d81428920e99e096be6769f7a
826e2d89119eb6bef82515cbe13c155cdbda7fe6f69f7710e9cc5ce8e9e32c0d
9f9e1bc5277765087b5a1102599745eccd88ba7e5480bcd67a326e9450c8c3ce
74c469d3659d3a21354fe29abd611ad536bb1525bd05e3ddd208860c1d195b60
4863817beae6277158d4993a3919b5285706743d24865cd3d8cdd02f595abc13
727210250e6144f72ed11bbcc14a6c4f49293fcd6e3140e431268e9645a2c000
221fa9b9d8904c669bf5404d4c2bd23f3de85cfb1638550d94b8eaa3880c7442
5d8e3dcc179dfe9610bb7f55fe14674924abb8049e44e797beb1117651a679f4
3fa7ecd3ced13aebdbba27d1f276f19ba6787a118c1db9a5d70b60b49ce8b4c7
a48c18753fa85a9b8a4d8dd33ae984828277d1f0b3105479f838bdb9339efc1a
fdffe296333e9101e6c86b0d4d6562c6e53e303ea26d0741caa94d681d1764aa
6d4a5569b3f02148e579a09829d732ce6a4adada2eaacf5be2656619599818ea
8628904bff0ee39c4f70275e9011a6606bacad8a5ffa3d81a82b0ca659e04f0f
62ee7a9f2aecbb287a6f589a803fc9164ab3132f3c48b19be8de29ee6f07ac3b
d7093749b27f66af626c716aec55abb35c19f7d06b0006d0340b8f5f902b74e3
4e6893dc5cc35cae915f5fb29cc8780bff9c1c92975a83ca779f74a5efcba3fd
0f089e6e19c490ff25f8df648a3c692a4ebbc439c6e21962d8fc4c19749b5df3
d790f0c31ef22d61cab33fd067b004093b5b39dccda0015df5cf096d666f81b5
0193eb50a1c1f255f391e03a83a11ea3f59dff8aa66fad44eeb20bc10b3eff66
07157664c81db45d96a3e92f2719cffa058e4b1e61fbf83873470a1ceb195a70
f311706621dc0e5abb2af3e75fbabeb42fc08fe6a2ef73689089374f724a024f
800c9a65a0a1e7ad1381dc1770aed25fc0c7869d84f24de55861accb679f228b
40cd628126f1b9791e67c2fc2ef091c1a1fdf9a59739cb048084d76054235f23
9786cfe6f46932d70282ff9252bcc088bce2a4aab2f03a369a2596c9964eea51
bed3728d27935b12889559b05133418becd7daac6b12155e4bfc60c32bc6720f

48
src/REVS.batch2

@ -1,48 +0,0 @@
sleep 999999
# RU18xoQZeK4Kno2ER7mv8ZEKLHiTECRhkU KMD 501.64865701, REVS 9.95750000
sleep 1
fiat/revs sendtoaddress RU18xoQZeK4Kno2ER7mv8ZEKLHiTECRhkU 9.95750000
# RJxiu5FTx2Nqr9xHvwdq1xynExUjFKVPdf KMD 62103.45021354, REVS 50.00000000
sleep 1
fiat/revs sendtoaddress RJxiu5FTx2Nqr9xHvwdq1xynExUjFKVPdf 50.00000000
# RB95bkGifi94Z4VSHGULKhCU8ML7tUbQ71 KMD 12520.16564088, REVS 138.94305839
sleep 1
fiat/revs sendtoaddress RB95bkGifi94Z4VSHGULKhCU8ML7tUbQ71 138.94305839
# RKb5ay26iSzmBoqm51vPveyErH9BYG3dry KMD 3674.15911735, REVS 72.89043156
sleep 1
fiat/revs sendtoaddress RKb5ay26iSzmBoqm51vPveyErH9BYG3dry 72.89043156
# RVeVZrr24524LhN3VRhLqNG6qgH9tBPixx KMD 612851.03780014, REVS 5433.13031755
sleep 1
fiat/revs sendtoaddress RVeVZrr24524LhN3VRhLqNG6qgH9tBPixx 5433.13031755
# RFBxwyTKGy5DtxR5CLLZSjKL5jU6fm13kp KMD 519232.27493854, REVS 10298.05578171
sleep 1
fiat/revs sendtoaddress RFBxwyTKGy5DtxR5CLLZSjKL5jU6fm13kp 10298.05578171
# RB1cuwtKBpwZPZnwyJeznaij53ovj8Dm8i KMD 19106.59220646, REVS 374.39305755
sleep 1
fiat/revs sendtoaddress RB1cuwtKBpwZPZnwyJeznaij53ovj8Dm8i 374.39305755
# RCZriSKpiSSmgwjumuiMP2XEC2FgYgTrBf KMD 1212.14061568, REVS 24.05385000
sleep 1
fiat/revs sendtoaddress RCZriSKpiSSmgwjumuiMP2XEC2FgYgTrBf 24.05385000
# RDx4sokytAASudNuMDDdk4R6RHJ4P8aPza KMD 10347.76210933, REVS 205.22959870
sleep 1
fiat/revs sendtoaddress RDx4sokytAASudNuMDDdk4R6RHJ4P8aPza 205.22959870
# RAPJuPCGMoPwfeHuckiea21LMek8BkH8Zr KMD 71712.83911390, REVS 500.67180183
sleep 1
fiat/revs sendtoaddress RAPJuPCGMoPwfeHuckiea21LMek8BkH8Zr 500.67180183
# RSWsxgczqH1uYyY6MMPePJY5jNjj7uD7Xr KMD 16435.34703311, REVS 114.80740001
sleep 1
fiat/revs sendtoaddress RSWsxgczqH1uYyY6MMPePJY5jNjj7uD7Xr 114.80740001
# RVxvCQ393MRnsQ8Fn8qiKm5yP6pk9GVgEr KMD 17137.93285029, REVS 340.00462653
sleep 1
fiat/revs sendtoaddress RVxvCQ393MRnsQ8Fn8qiKm5yP6pk9GVgEr 340.00462653
# RG5eabU8sYvrfWrCu1wb2Go5vxhyVXsbAF KMD 409543.68954327, REVS 8123.68911362
sleep 1
fiat/revs sendtoaddress RG5eabU8sYvrfWrCu1wb2Go5vxhyVXsbAF 8123.68911362
# RYTMDSu1BjaQAdvh6a9CQFCr7h1rsGi48d KMD 302.06577591, REVS 5.99094155
sleep 1
fiat/revs sendtoaddress RYTMDSu1BjaQAdvh6a9CQFCr7h1rsGi48d 5.99094155
# RVLd4HkkB8SsyXfXHQeHHNouNer7nv3mkL KMD 30407.13753317, REVS 411.30538288
sleep 1
fiat/revs sendtoaddress RVLd4HkkB8SsyXfXHQeHHNouNer7nv3mkL 411.30538288
# total KMD 0.00000000 REVS 26103.12286188

15
src/REVS.batch2.txids

@ -1,15 +0,0 @@
bc4eca8000603d16ae491bf1bf4f5fda622f54d3b0ffdaefe12337461bb88d5f
cda5da13119d348565085119b37951f0ee2f6866d677bbca2295d5d44e365b4a
ce9516059a943070ec233716c878e90bfcf6456c9a35c587fc9f6c74008d2d72
c1f32cbd341d9e7e51046378ad072b0aaa55d1fc3b970b606ed708d3bb02d7d6
f2a2f2a2b4cc99b5cc89fefe8340252b0bbb7ecd83df809f2bf782a06d9bcdd0
5e44a6d50cd1cb64fa6349b49d5793d12988c4c3d517bb271f396a9fd66d3cae
6f6771ef52833bf504397c80f06e58a77e58387d809b42c8ae3bb6301796dcf0
96d12c7828f3f3fa7983aac02b724f5a53897856b7419e0728d78ae7e3756765
84fde41cd955564a18f6141349dffb26dc8ad498fcb3494052a8aeb0157ffb3c
93d6d89195f5332f7bae6e9ffc65d5892fa169446d90ed3d7d5017389a2a3ff6
2dc7e37ff11703c01e1a6301746d2586549fe091bbf6cf7bf80c6b49c1f38d1c
1732b6942035ba7482f9a6c77a47f90b529c51d8b22c4d14a7a430d7b8cf3303
733a0ef1b7ef603664271f7a3667e39809f9a4f7b618a4a9c00c3e8a6876d57c
cf2ed6deeaf6600b2fff0b5db13c5f950dc655b06420eee816edbfad7c07c991
16ae9bf3ed2d47c8b8fc088a6773c3316642c97ff573d5f2e185f89dadf39b14

44
src/REVS.batch3

@ -1,44 +0,0 @@
sleep 9999999
# RSVzs8BLvCrmvNF1MbqEpAwx9VHinmAxDg KMD 5669.98491054, REVS 112.56208000
sleep 1
fiat/revs sendtoaddress RSVzs8BLvCrmvNF1MbqEpAwx9VHinmAxDg 112.56208000
# RLqqYX4oMVz6c6s52bLnYdfi9qZ56bEK3W KMD 43088.74729573, REVS 470.87980000
sleep 1
fiat/revs sendtoaddress RLqqYX4oMVz6c6s52bLnYdfi9qZ56bEK3W 470.87980000
# RY5qhTwDGWQy4LsG2M3R8zyJz51KaMgCLW KMD 55892.82951156, REVS 1070.41924580
sleep 1
fiat/revs sendtoaddress RY5qhTwDGWQy4LsG2M3R8zyJz51KaMgCLW 1070.41924580
# RMx1MCvzuaiuRpS3rXV4LURWgZVRnLJCYK KMD 335.54240549, REVS 6.65853993
sleep 1
fiat/revs sendtoaddress RMx1MCvzuaiuRpS3rXV4LURWgZVRnLJCYK 6.65853993
# RNdQAbnuehuF5RnYiaLkWoWktpaxzfvNXh KMD 163589.49612623, REVS 3245.93000000
sleep 1
fiat/revs sendtoaddress RNdQAbnuehuF5RnYiaLkWoWktpaxzfvNXh 3245.93000000
# RXX1kbdye39h9g7oFnP6cMZ6EEePCPRYnc KMD 98858.55994787, REVS 1384.95819177
sleep 1
fiat/revs sendtoaddress RXX1kbdye39h9g7oFnP6cMZ6EEePCPRYnc 1384.95819177
# RUV5xgcHVavuxKkvMduhjXPVKA7oa1QCK9 KMD 5226.14889591, REVS 103.72248253
sleep 1
fiat/revs sendtoaddress RUV5xgcHVavuxKkvMduhjXPVKA7oa1QCK9 103.72248253
# RGFv6LBE1xgiu34SqSh6wjn3fpr973sREK KMD 159251.95713851, REVS 3160.13095281
sleep 1
fiat/revs sendtoaddress RGFv6LBE1xgiu34SqSh6wjn3fpr973sREK 3160.13095281
# RQFihaDjPvCwhENGhB163D7e8Wc8LURtKq KMD 28529.48507541, REVS 566.06461415
sleep 1
fiat/revs sendtoaddress RQFihaDjPvCwhENGhB163D7e8Wc8LURtKq 566.06461415
# RDjm2Xec5UTWiz3Yku8sUce8ZWxe8mTh72 KMD 8637.01756743, REVS 171.30000000
sleep 1
fiat/revs sendtoaddress RDjm2Xec5UTWiz3Yku8sUce8ZWxe8mTh72 171.30000000
# total KMD 0.00000000 REVS 10292.62590699
17f76404644686bdc3f58c562fb86036d9d13e540486a13f9c89daa26449ca45
df9e8d5430fd80035a4397a464a5a1b75a168e94c660a7f5eb9ac30f992ba3df
0a6c099f5dd33803223e743f099530df86d7a0bd3c2ab29d1de99ccf8d854b46
4ed406ac9e171d930460659d9a5f3c806d51313516b4fbf3812c1bc3f27e1106
83d733a0004ab00dc2106368405ec00f2a641721c9bdbdf24d7e88ce5f99df5c
76eb52c04c27566aa6181d1523e2cb6db413419b3a1ffe1b18ade8669de9f20b
be8fbc1408d013e586add3ca8c3677c17079d52f9d10a6e3fc08ed51dabc2598
cec00429c9802cea98789c73426294ba065d99dc29400a329c2a510a50160651
30500a29f6e9da29c67ea51a2718421e0ca945018f8a6eee1622c7462b9fed4a
ebc16e614204d51e09c23df54d0888741d3a40bea3c05bf3898a64fbf9826444

94
src/REVS.batch3.txids

@ -1,94 +0,0 @@
8f7d4648657dd7f8aa70d8e83539ae0592cbfafc6a961fe75d7f7f613b4d5737
5669.98491054 <- expected amount RSVzs8BLvCrmvNF1MbqEpAwx9VHinmAxDg
0f5681bbc1441e39cd3226847e3863489bc3ffe6b00c161e453a897b6a4e1268
8353.36815152 <- expected amount RXbWQbnpsQ3iSBBj5bn2HDq3WvqRPJg5Ek
34cfb92756c33c9fc2b0f1126884044711a83a6deb05c8b38cc744b7a87f34f5
9683.15249375 <- expected amount RKCDBxUx7mbCnViLt423jdLt6oNpW7SH7z
cad96a82897ec8d240bb410a1c1b54922444d7bc6383ef31ae153646d4cb0837
43088.74729573 <- expected amount RLqqYX4oMVz6c6s52bLnYdfi9qZ56bEK3W
ccef457f43908a2f18c86c3c1431a9b3857263413a756ca46117655fae2acec3
50806.03038250 <- expected amount RRCvM3vVV6FPwayTevCCvkpXY2V8RxjEct
216f60dff778c0701def1ea8eb582959591369c7a67864bf2ef20ca99178138b
2015.79933830 <- expected amount RDqaDbfFHrnPAnyLY6b9A3CFZZjivhdYSJ
96e0916f1598824cfa1e2a590a0dc683be93c6fa8dbffb6153b341906de84398
48415.76246875 <- expected amount RBGX2Z43Fiey6tkgRCL9rzc3gNhdcvQyzf
e0b44fb9e74984823a307c82b70ddb7a173976fa43aec61440d9cd53654a8e93
7885.04483652 <- expected amount RWdo833bYVhMUHRdr8hMs7HHVcG2UNPwcZ
6bff9d66cafe0f249de24a6be6312f75ea97cce10c40bd2ffd4a785758787782
2076.57141858 <- expected amount RVUby7nAZAEKQc1mNu89KGchwgVN6H74Pb
d4c509d86d3ddeb3be1ea733e2c79c816c0639f3ba1738d1f50140915292949e
55892.82951156 <- expected amount RY5qhTwDGWQy4LsG2M3R8zyJz51KaMgCLW
615c5efe7cbddd2e07d2282d215f307cbdc7e102ce4e3c1e134b96086736e459
110983.78643539 <- expected amount RPAueErz2MDLv1T4VNVRkkWRPmUKDXxNyW
1baad4f5d826832d13b0ddc7379b7235a38caa42b5098f273811109b974a6dbf
135104.07865436 <- expected amount RQ2pMNHbPGagXKQoVzrgF2o718GmP7A74Z
c70b43c915aac7f917026d6229f5a7ce15184de37ed5f8aa4756d8416a3cde70
8376.94442691 <- expected amount RE1NYFqFG2vmhhHVY7QFC7sTp7zBxvSSP3
8ceab84b76f983a4bc0ba4743027666fae243fa463f3b51bfd4cb26c39bc7731
47849.00411034 <- expected amount RHSA9ocZc77tHiFvVQ2h26AJQFsionWAXK
4b08e4b3ea8608e97d8ccdd30c4785f03c443002127269c1936134c9f2cc717d
15163.82967582 <- expected amount RS8F3LcQ8DUSoBacUKBKzMR2Wxe3hCSToY
d2c320a2fafa054cd166b331937fd5fe005f07ec02f9fd5977ca466ed663d0eb
3002.22564175 <- expected amount RLijku3v2wyCcGykdbsUViqDCNaVkVkQpc
cf93b70a0ff58ec115c03e0a395a5b413610437f40bd496707ae426df1a46aa8
14101.70011189 <- expected amount RMeaeKG7vrTpryBGVEWQ8twjQDnRVAhpqH
6be9eb9a87781ebcbd633946c891b98499001d38c934e827371a7b79d57b0de0
5832.55634776 <- expected amount RUDEQESpyWvpwdfrieiBoNo93WHaKhGxGf
e63deddaf983e5cf537f34b9777a65f001f4dda5bb86dc8b1c8f5d0ead105435
890.85002942 <- expected amount RMat1mSDDigFHhVL74mjBia9uHo5w24MLQ
f382d7ec4a9f9cf4283776449521e6c2c73a44863f119a6fa3ddd319c042f08c
335.54240549 <- expected amount RMx1MCvzuaiuRpS3rXV4LURWgZVRnLJCYK
f04aaada09059b8df995cf29c7f6d0c7ca20ed7e70d698bd21df1e61c70d2cca
19366.30498750 <- expected amount RVcMp4KgwCg6GnUJAAU2dmCvPjAa9JrEds
8496fcbe66360a2753f1795dc4b0bb1a93fa121de4b521410e046611bc04f2e5
163589.49612623 <- expected amount RNdQAbnuehuF5RnYiaLkWoWktpaxzfvNXh
9b3e499b36112979a084534143826776699b2a5def69e656d7aa7dc98a381501
3873.26099750 <- expected amount RB1j3QidCF9PTKQaZMGKe6Hzm5jdY8Mzus
17e55956fe10117b7e65a272fed473efa2dd387ab794932eebb9924e434719f0
7746.52199500 <- expected amount RFcH8p3Ke5y4UL3pdL9KCkJWp3aRdBwWpg
4499caf8325016189dc4cbaf102d3c5a358105c135defd90afbc000fbed92795
16670.51967129 <- expected amount RJDkJJd66n4Q4jVWbZJQKyXTf29ZqzeXac
41d0583c6f0720b27976f717d729c7445e10264b0663af6baa43e2ad0fe5fff0
7746.52199500 <- expected amount RKzELkcNJu4g9DWQsFFeQtFZQE5u9vevuK
eb979d5a6d79b6e0466fc3dbdd2a2f73812fb5788bfcad2b160da1e1b96828c5
74455.81274009 <- expected amount RKpUFnxUn9mJCZmNECEQT7xEubHECUPCem
2ec16b1596c2daa8d14642478d0ad6e6fa5d143980794f1c717c4e7ba2765749
98858.55994787 <- expected amount RXX1kbdye39h9g7oFnP6cMZ6EEePCPRYnc
4d59bf3a6dcd11242c3a7c20402c38e41fb8f936d63e0c5b3f6490248fd989ed
5226.14889591 <- expected amount RUV5xgcHVavuxKkvMduhjXPVKA7oa1QCK9
505e5b9d3e9ac0ee9a435e7fdb9819b53fd1169fceb9c6e4b3b2173031beac16
753.34926401 <- expected amount RBtfFBdYiryB6fyWoubm4XNqZwXqzAbJEK
b2243873085e98d346e3f2341a203c3644f1fb78fe60294f5838eff96f2121dd
159251.95713851 <- expected amount RGFv6LBE1xgiu34SqSh6wjn3fpr973sREK
75740f609901350eebc9493aff3dcfb070e107b493a2b51aa1acccfb9dedd88c
693.08132289 <- expected amount RAaszCNodXXu9rJL6qqVMZDykXncDecTMS
9beeaaa5dd83e3967f35d60073f88a320276e7a3aa61a4a06b7f8b46079fa4b4
2304.59029350 <- expected amount RT1xC82iwXtZeDLLYz3tgQRCHKsRD62Jt5
b7508390ec18fc559112de1f5ddcd6f27c74f9a41415ae97c89b01c6718afc64
6506.14889316 <- expected amount RGPEHHmPFaMPSLMQxEao2uVPTfN8vBCmym
c6eb29abc0c447043f94cac4df49b3ce640d27be2730d18c7ba3f0fe7d21861b
38732.60997500 <- expected amount RBUEoAzoydjckYewPsW2kfTr8TGFgnR2Ec
bf0e8dff8de3ce4c07b7cc09703978d7db0dc7660f312186b4c3eff2a97fd638
916.79536397 <- expected amount RVQS9NGKsbBJuKDhJnPssTRevrE428dxDK
186e0d779d5a6a644e7d972aecafe4fb1739059933a0e50ad9a82ced1c8974e4
48415.76246875 <- expected amount RHiUqYUohv49bvB2wbDe1mAkwyEFwUEnrb
37ed3649d5e2f83a0c4ee11748b076fffe8a2fb16650cad7fa39cbbe3ddc9246
16542.25810519 <- expected amount RSWPtfGaHPL1g7SMqbLm1YZ8o3QM6krzo1
2dc98a59906d57f9e57b3231d19749eb9979533d3a2c35ec5adb3cb91bfd7c7b
2322923.09575692 <- expected amount RFMcTK36Wzjo5QEk1wAH2CbATqsYvzgwXH
35a28b0551bbe3d3e5cfa989b5a073bea55784a9df162ebcafc61bffb8ff5834
28529.48507541 <- expected amount RQFihaDjPvCwhENGhB163D7e8Wc8LURtKq
3b3aabeb6483d8c37265d24ef76389f96158970485866de1005ba28d8069877b
8637.01756743 <- expected amount RDjm2Xec5UTWiz3Yku8sUce8ZWxe8mTh72
684728bb5ff281762990da11e7463c6e992b5e98cb0cc7965a3470b8a664484a
1212.26932063 <- expected amount RCZriSKpiSSmgwjumuiMP2XEC2FgYgTrBf
a021d23ab591ed687f7ba0bccbd98ecbb7d8d1f967176bb2f2e1e6fe1d83af34
32148.06627925 <- expected amount RBD72Bh4wxGi8q8xQbLfwMF2RAkTZ7sVZT
b9ab02076864711a964c149346141f01f686b50fd345e6eb5bc3f218b40c4c50
1924.55258644 <- expected amount RVih8N9Qh1jf4CCF5ySsAY8DR42eTxYqpB
d5760b4049c8818f6486d1b81b0715f6971f88b0f49e8daab4382fe6980ddd85
44542.50147125 <- expected amount RWez2L8rPoTmqj8kYKqxLdeD9BFuDibMyJ
c9bb31764aab4cd631fa733940c0b35470cad48d247ef227372cc84375cd8d8b
49199.88128813 <- expected amount RUuWvTwNAMGLpuY3GLPBAmMp8ptShkMSyN
08075d8b984266c27ed5f029b88b682596ace07cc43b2db50d4491dc810ced04
30170.24616125 <- expected amount RRTks3iwSe4oR3UDmRfGszcNcfAv6Rb5es

27
src/REVS.batch4

@ -1,27 +0,0 @@
sleep 999999
# RPYGEUfYMHizer5siX2CNpQ6xHAbjtgQuB KMD 843.49707566, REVS 16.72927581
sleep 1
fiat/revs sendtoaddress RPYGEUfYMHizer5siX2CNpQ6xHAbjtgQuB 16.72927581
# RTrZWBu7SUZWf4ZdyUVddRPxsnDhZnre7n KMD 3090.02793673, REVS 3.67077856
sleep 1
fiat/revs sendtoaddress RTrZWBu7SUZWf4ZdyUVddRPxsnDhZnre7n 3.67077856
# RRixT2CqGcr5cdPoP3G2rhrWDfSbVZR6sk KMD 79613.96546024, REVS 1579.43521640
sleep 1
fiat/revs sendtoaddress RRixT2CqGcr5cdPoP3G2rhrWDfSbVZR6sk 1579.43521640
# RQgfzPR4zeCyLWaddHysGEVzoKLZa5E4Ut KMD 20106.39865075, REVS 0.09000000
sleep 1
fiat/revs sendtoaddress RQgfzPR4zeCyLWaddHysGEVzoKLZa5E4Ut 0.09000000
# RA9G36WwA9K95bn8Cbycq5ZnoxhSzzhhBw KMD 867960.91662544, REVS 11685.48356181
sleep 1
fiat/revs sendtoaddress RA9G36WwA9K95bn8Cbycq5ZnoxhSzzhhBw 11685.48356181
# RVcSdFR5fC3Qjk3CARvQSkra5PQwC8U3uj KMD 19695.58704144, REVS 390.89494454
sleep 1
fiat/revs sendtoaddress RVcSdFR5fC3Qjk3CARvQSkra5PQwC8U3uj 390.89494454
# RQokxkBAizLmegMeWK5TyTpSHn2vP5adjo KMD 2981.62619009, REVS 30.35300490
sleep 1
fiat/revs sendtoaddress RQokxkBAizLmegMeWK5TyTpSHn2vP5adjo 30.35300490
# RAMvDwi58oyArqfGseWZsYbR2BN3L7ghVX KMD 40914.30625015, REVS 476.17156540
sleep 1
fiat/revs sendtoaddress RAMvDwi58oyArqfGseWZsYbR2BN3L7ghVX 476.17156540
# total KMD 0.00000000 REVS 14182.82834742

107
src/REVS.batchtxids0

@ -1,107 +0,0 @@
f8b8a27ca722196f5f745f7778fc8aed873c3b040a1a964e704e63ebf5185edd
b7e28fadcedd54f973a9e91df42c3d02bd1436f2377f28e6c866cafadf2c947b
dc3adb9035b939ce50e4144920acb9fc4ff1fc36b226bf6cca13e1d2a7ab36c8
8c64142d44edd729b9972361b8dbd14e5f3f022daee1b2ec1ff3b3f69a755884
d15d1de5f494c22bcd4b9717ba416efbecb78d9d143209b31fd9362be13b9dea
4b99586c873574fd4e6f2055130a85e194ea7da61303ccd2b6839f7d6754ad92
0645a7c8a584e9fe3f5dce8cb5972b9ab15f580abcd4fd12bdd19bd2bbca5d4b
a8ca857443e07b225d8a6271ab761e7636c568159582e7d8540998fe47b37b86
20b13d8b02b1f728c2b19a09876e2eeab68aa3a51cd1c0b539c18f980e244106
84491a5ed8421013e546f32e6407d4d916297176944fbc1daa99b4b7d30673db
0ff635aadfdbdb4d6887d04a1ecaed449bf708c36da782781dec0601057c6ede
4034cf5a74b9a0c5ea725ff6d227b738b1015dafb88e610d2c42bc2e56f4cd9a
7644c293c0b80e186ac8f73eeef1390458b1a2febbffe6e03442809c7a1b52ca
f6f2ceee809d3a02d32c08839965f90cc9783c7c0c979df48f17f63702bc26e2
8be21cf583d6fff597bba5fb537ae2c29b9f797f31c5d33641e377332a14396e
32652dd110bc58128354a8f1b55d027c21cf805f34183c746494d763dc5f944a
26a8db0f5dfa4f8dc0ac40f409070e7ba0bb507bb99138639382f503dbbaa11b
5f8ca3d9d4360990b7f164b0c8a6f8541e449395a17c0024b593346454cee653
6ef36fb6b117c326819d644ad59eaa17834b1bd4d2565906f39d0c239b3ee5fa
6a9664882c7fa2c033db4fba4d25d10db381e0005e10d08034d569c97849046e
0ef90e1eb2c1d73dca4270e16511bca3458f040ad066965859aec3c660609aaf
c6ece66a5a6254774b799ca3a167d3d28567e0239ff2738d90497a271b5e1113
feaaa2e13f87b1116969f1eba327d9a1ce9f3bdf900c5413a12172b4b425421d
411823d20770f587c4b77140680516964f178e143249da0fd643141b422bb4e5
15c646b807f0bfde249e7db39cf2734712ab35487bd69797473973c87ea96945
7a8a83984b699741d2ecad3c8cba537762106648bae8a590bb8468e84d1749a5
4bcd8c28879d255d53c56475a0d8aa2be0bf831db6f7e15ad1f77a0841e950a6
d472c0868258d14810ceeaaac010bb1f927ece44b55d7e2cda42214baddb0ea0
69acf622b21eb4eba6af5d506d4d11831ee4533814ba6a0300072354de25a625
20bcdf8d19f96fea65b7130193e0d5ab54b5e4a2150b8a6ade3bf4e98bf98d0c
0c5bad3e366c301e730fbf58a83b219f5265f0a596feb89bbe0306bd87a4b72b
33744e5ee5df4dd46a7e133825a5af4734baafbe3f1d3c849e5d36e8c038b282
d4cce84308b475327d6fec1505cb12f30a1cd266b34c9dc810a14df5eac5f825
eafe1f16f6bf6ef1fe987039e2daf80723fc78752d2896ff6d99ae9cd0143a26
a7033c2b1772e461a897012c9ecca796a9f3f9f0622beb006f3dbabdcbeaa5f1
bb35fa7bed699d2c1188a0df41371e4fac1ca34eefdcfb4cd7cba398300493c3
3de0201d7b0e0d531116c457dd857e1b92ad4ba99b1283f4e6ea346641ba270b
fa1641370e84b65f43086c90f37a0c79d918cb7330f95977849560f5db90ec7a
0dcbe1b19e716b2ae5ebe7ecce917e26fb09a8890480f2b7e8315f7b6fdf9de8
35a134a0ca04f3cf402827df17616f64e0b488ddfa277f9d287a3aa524258a0b
08e7c05da62f384287ed42ac138d1d5da6968d3320fb855cf66a3a72685f6ec7
fa0b0b65fb2f66f26379c6eb7f0b299d916ed0dbf7a569d7bae4fc455cb6cfc2
88794bbb699f130951c40dc99a27d2c7c7016e12824fd1040cbedf86980de04d
3d2b8a2bd53af7f871d9c5c3ada5a8742b9ca14918efbdc0b50655fbd6a9c43c
91928c3a9e0ab6710cf6b517234420ba8455592af3c9da7662f8a3ce2fa1e823
1e311229a68642300d6e4cae166334df4a3e87c0e52e86760ccc0234d2ebecd1
9a82ddea65986359f0e69bd9d06db7f0f3ab99bf6be2ae2cfaa24e3de74ec170
c0a151d520e4c11eb23f75a0b3b3a09c5dcdb4283edc5f7aaa5082336337e3c4
ca850ff82776e1e72d82a2d0c4c35235e4841cec6f2b36d8d4e37aa46d06a5e4
5b4060b77f23488e5f2ad57c775dfb62e235140f42d57720cb985ee218d97d64
403183a0ab2a672c6968e9c88190910d8949bd03808b353291e150ac6e5e49a4
5a86136b1ecf2d9a43dd42d3d902653ca24c8ecc71001097ca035e3750ba8998
780ea40a7fea9bab8547c2917c60c90a7a88ce38bb1f3af06197dd3341504987
4e1b419e3d67c35351fe18e2f001a404c08c04f8b6148412c7a5d7ee01f91a73
4231eb801746ac3bd08e57533498a74400570c28f4bc4c2f8a1424be3d4b1bb1
e1bc9dcf2dd758717480f29e62a24a9e250b356d5ef275de46bc580002ed85d0
25e0a1f1c0d8db40acedfd491ae445e2242d6fa0ca39b18ccb4e9d6eff86dbb0
053839195f085b1586d46ab54dd05b17e91e4f0876d0a53832543774a8fb0b1d
9deeabbcaca2e613254eca4b15dea6e86d6fa7ec8893baffe713b8ed796fc3cb
c6e0f0089b9741e4c75d3080a1549cd5ea87e7605501e2419ee9186817c60a8a
a1bca1dd1011c23bde3babeff2120ebd48282b3a9b41c10a0b80dc38e3efdef9
563f1812684dc33528418877fa5bbcb15b83c4d3496b076f4f3bdad38f0fdb6a
06a3ca90a32455b03b5f6008737d25fab7fc02f0126b40e25f440d4ad8c98caf
36b8f751739ec405427830b06b8020f9975bc29ea93faf72e1e99c22231bed88
ef9247fd847739e2ec786a23663da32efff73c6e4b9b02f43411332ad1eac945
1d3fe9e86a4692029ea13b153f423fc9be211dd3d7207f374e5360a8a1812f0a
afe379fcb8d097448decdcaebc8669c2b6f05c9a593f89265b44280231d900f2
07873c642e76432ae77193bdee90fb21c3fe1d2d47cb87689d20feb47ecf6884
904c0e81c754b190b459be69c5ac925d274aa91e8d69639375adfc7bc3659c23
34cbc40d34fcc916845b7a991f3d430831a919c782556a0dab5b4083cf0b277d
38c0d0d6055d6e37513af175c5232a97a04e16a6c64d2e5711e0ed0e01868264
e1988acd516c445a36a425d4e881b6ba620ec31be7fc2e86ff40113030611a41
0472010fbe40e01a55bdca2bfe06b9383c41ec8a4d70c54ecb32b7f1765a85f4
4058e9174d9fbdf611c481552a0c9038b4905341ad31156fadb62e924156b971
c0b23f4f41480765fda1efb44af0eb118685e70392e004e5b5a68ae4cb741452
dde373fff9ce038d5b2524506038f0986b459fca9550452e3248c34b40041ece
98e70c5491278d48f0ee5fbaf63a1ffac7ab7975ec8def8e711f8821df214c32
45e995c9a816a7ccfd34823ae88375f7e7b2d52a9fe5f1953748d06c8c9f920b
d3196f666e093f6295ff5d9bbb5fad3d735c79efc3a0ef2682a5d10abbc047d9
47819cadf315ee1931a475219d61fa2367a73310749f23cfa994ef9e0324fff3
aa4719fd7745191531c68c140ec52728cb9d3ffaea5875967f75dbb7ab7a2b57
83dfacc40a05c80e1a8e4cae7a0cbb98a30f76ad010efb63b9a515b490f7676e
4c118313fff51fc72ec2c49045679e6bb9a9aeb7143b576b1f3eb07429a0b806
f208fd7abeb82b6aa0218db68421045078cde1521129029dd2ffafa759208cbc
cf58359f2b61ab6fd73f176bd094154d04f83752a86bd91a2b7879123a51cbf0
3e10f831b75abd7bb89fa74dd6b74d5f07a2d818c44eccec496896dfadac9534
250204ddd107ece1d5092a4cd1163115ede9e754ef136d80d912ccfc132e0ac5
676d1ea16b0fd80025953ecc999213d4e0b1b002f2b4193d7616ec97a269a49f
4ca289d052c847b502ce756ed65f035e38e78575ee9fa0e68df89595151967fb
ccdec5f135b9dee61540fb3f0cca5a372189d69c1461242eaa11c788557740d8
f3ebba346b9ad00771ce1ee67dafab3f875c307ba39ab8439f63822d4c78c656
4496f369401f0e7778fbaa9199505f8ab093c0cc22fdefe3a6d0a465b3c0d078
b0eb34108101f19e10248066d9a339596bded6dd7a84d0be64c701e837b5f596
796577570b9a7dce40bcc476c95c72d903531367db6ebc9d5d457d77634d0123
26ee642aaa9f2fbeb1603ac695ce13dcfa8709af07e0cd71bce85c2ccb3ac4cf
ada15a386b1ded5afb41bd30946b9bac14a5bf8912ffcd12f086f29dfe31b3b2
073202790ae224da09b17aed4c18d8395433d5e6ea910bd04c1b952444b8a239
cb38a03e8afa8b0dfcdbe13070ea6d048ea1cc9a1054ba86c6ab88511e2661d4
e8dba03f46da7dfa258be5376fc1dec714c0104423191b3ad14a476bbcbce929
6c9dd8171202deab1d5d8af6aa1b7c1ea6f4cb8654cb3241040659674b700308
49f2add7db2978cacc1798cd08b67f33d435606d2b3dc877a673dfdeaa7617b3
84ae90011844413779316580fc2731e391829237e7b356354ae1266e5712ac3d
efffc292acaa38e458ef396c818dda28c9e2971065f65abeaa0a4d951b141dfe
f03e0af2f1fd32263d5a4149fedd9128c3bc7616088c208abbd5c1f065cb5249
1814b8d5550ceb07acecc3c4995dd2d582af9bf6f6e6b5a40319f824570f18c9
73e622d891f13d8c136214eaeeddc2c9e7d721844abf797916fb0c4b2a9e9e49
6cee8ae520488bbe9cb516490e94876e0828c27bffdb72f7e9695d5ec9ee3b2c

5492
src/REVS.raw

File diff suppressed because it is too large

5492
src/REVS.rawtxids

File diff suppressed because it is too large

5653
src/REVS.snapshot

File diff suppressed because it is too large

3683
src/REVS.txids

File diff suppressed because it is too large

5650
src/REVS.txids0

File diff suppressed because it is too large

3
src/assetchains

@ -5,6 +5,7 @@ set -eo pipefail
source pubkey.txt
overide_args="$@"
seed_ip=`getent hosts zero.kolo.supernet.org | awk '{ print $1 }'`
komodo_binary='./komodod'
if [ -z "$delay" ]; then delay=20; fi
@ -14,6 +15,6 @@ if [ -z "$delay" ]; then delay=20; fi
gen=" -gen -genproclimit=1"
fi
./komodod $gen $args $overide_args -pubkey=$pubkey -addnode=$seed_ip &
$komodo_binary $gen $args $overide_args -pubkey=$pubkey -addnode=$seed_ip &
sleep $delay
done

12
src/assetchains.json

@ -233,14 +233,22 @@
"ac_supply": "90000000000",
"ac_reward": "100000000",
"ac_cc": "3",
"addnode": ["138.201.136.145"]
"ac_staked": "10",
"addnode": [
"138.201.136.145",
"95.217.44.58"
]
},
{
"ac_name": "MORTY",
"ac_supply": "90000000000",
"ac_reward": "100000000",
"ac_cc": "3",
"addnode": ["138.201.136.145"]
"ac_staked": "10",
"addnode": [
"138.201.136.145",
"95.217.44.58"
]
},
{
"ac_name": "KOIN",

4
src/assetchains.old

@ -46,8 +46,8 @@ echo $pubkey
./komodod -pubkey=$pubkey -ac_name=KSB -ac_supply=1000000000 -ac_end=1 -ac_public=1 -addnode=37.187.225.231 &
./komodod -pubkey=$pubkey -ac_name=OUR -ac_reward=1478310502 -ac_halving=525600 -ac_cc=42 -ac_supply=100000000 -ac_perc=77700 -ac_staked=93 -ac_pubkey=02652a3f3e00b3a1875a918314f0bac838d6dd189a346fa623f5efe9541ac0b98c -ac_public=1 -addnode=51.255.195.65 -addnode=217.182.129.38 -addnode=37.187.225.231 &
./komodod -pubkey=$pubkey -ac_name=ILN -ac_supply=10000000000 -ac_cc=2 -addressindex=1 -spentindex=1 -addnode=51.75.122.83 &
./komodod -pubkey=$pubkey -ac_name=RICK -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -addnode=138.201.136.145 &
./komodod -pubkey=$pubkey -ac_name=MORTY -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -addnode=138.201.136.145 &
./komodod -pubkey=$pubkey -ac_name=RICK -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -ac_staked=10 -addnode=95.217.44.58 -addnode=138.201.136.145 &
./komodod -pubkey=$pubkey -ac_name=MORTY -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -ac_staked=10 -addnode=95.217.44.58 -addnode=138.201.136.145 &
./komodod -pubkey=$pubkey -ac_name=VOTE2019 -ac_supply=123651638 -ac_public=1 -addnode=95.213.238.98 &
./komodod -pubkey=$pubkey -ac_name=KOIN -ac_supply=125000000 -addnode=3.0.32.10 &
./komodod -pubkey=$pubkey -ac_name=ZEXO -ac_supply=100000000 -ac_reward=1478310502 -ac_halving=525600 -ac_cc=42 -ac_ccenable=236 -ac_perc=77700 -ac_staked=93 -ac_pubkey=02713bd85e054db923694b6b7a85306264edf4d6bd6d331814f2b40af444b3ebbc -ac_public=1 -addnode=80.240.17.222 &

4
src/assetchains_stop

@ -1,6 +1,8 @@
#!/bin/bash
set -eo pipefail
komodo_cli='./komodo-cli'
./listassetchains | while read chain; do
./komodo-cli --ac_name=$chain stop
$komodo_cli --ac_name=$chain stop
done

6
src/bitcoind.cpp

@ -76,14 +76,14 @@ void WaitForShutdown(boost::thread_group* threadGroup)
fprintf(stderr,"error: earlytx must be before block height %d or tx does not exist\n",KOMODO_EARLYTXID_HEIGHT);
StartShutdown();
}
if ( ASSETCHAINS_STAKED == 0 && ASSETCHAINS_ADAPTIVEPOW == 0 && (pindex= komodo_chainactive(1)) != 0 )
/*if ( ASSETCHAINS_STAKED == 0 && ASSETCHAINS_ADAPTIVEPOW == 0 && (pindex= komodo_chainactive(1)) != 0 )
{
if ( pindex->nTime > ADAPTIVEPOW_CHANGETO_DEFAULTON )
{
ASSETCHAINS_ADAPTIVEPOW = 1;
fprintf(stderr,"default activate adaptivepow\n");
} else fprintf(stderr,"height1 time %u vs %u\n",pindex->nTime,ADAPTIVEPOW_CHANGETO_DEFAULTON);
} //else fprintf(stderr,"cant find height 1\n");
} //else fprintf(stderr,"cant find height 1\n");*/
if ( ASSETCHAINS_CBOPRET != 0 )
komodo_pricesinit();
while (!fShutdown)
@ -91,7 +91,7 @@ void WaitForShutdown(boost::thread_group* threadGroup)
//fprintf(stderr,"call passport iteration\n");
if ( ASSETCHAINS_SYMBOL[0] == 0 )
{
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
komodo_passport_iteration();
for (i=0; i<10; i++)
{

3
src/cc/CCinclude.h

@ -56,7 +56,7 @@ one other technical note is that komodod has the insight-explorer extensions bui
#define CC_BURNPUBKEY "02deaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddead"
#define CC_MAXVINS 1024
#define CC_REQUIREMENTS_MSG (KOMODO_NSPV!=0?"to use CC contracts you need to nspv_login first\n":"to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n")
#define CC_REQUIREMENTS_MSG (KOMODO_NSPV_SUPERLITE?"to use CC contracts you need to nspv_login first\n":"to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n")
#define SMALLVAL 0.000000000000001
#define SATOSHIDEN ((uint64_t)100000000L)
@ -292,6 +292,7 @@ extern std::vector<CPubKey> NULL_pubkeys;
std::string FinalizeCCTx(uint64_t skipmask,struct CCcontract_info *cp,CMutableTransaction &mtx,CPubKey mypk,uint64_t txfee,CScript opret,std::vector<CPubKey> pubkeys = NULL_pubkeys);
void SetCCunspents(std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > &unspentOutputs,char *coinaddr,bool CCflag = true);
void SetCCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex,char *coinaddr,bool CCflag = true);
void SetCCtxids_NSPV(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex,char *coinaddr,bool ccflag, uint8_t evalcode, uint256 filtertxid);
int64_t NSPV_AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs,struct NSPV_CCmtxinfo *ptr);
int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs);
int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinputs);

2
src/cc/CCtokens.cpp

@ -957,7 +957,7 @@ UniValue TokenInfo(uint256 tokenid)
result.push_back(Pair("error", "cant find tokenid"));
return(result);
}
if ( KOMODO_NSPV <= 0 && hashBlock.IsNull()) {
if ( KOMODO_NSPV_FULLNODE && hashBlock.IsNull()) {
result.push_back(Pair("result", "error"));
result.push_back(Pair("error", "the transaction is still in mempool"));
return(result);

21
src/cc/CCtx.cpp

@ -162,7 +162,7 @@ std::string FinalizeCCTx(uint64_t CCmask,struct CCcontract_info *cp,CMutableTran
utxovout = mtx.vin[i].prevout.n;
if ( vintx.vout[utxovout].scriptPubKey.IsPayToCryptoCondition() == 0 )
{
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
if ( SignTx(mtx,i,vintx.vout[utxovout].nValue,vintx.vout[utxovout].scriptPubKey) == 0 )
fprintf(stderr,"signing error for vini.%d of %llx\n",i,(long long)vinimask);
@ -340,11 +340,12 @@ std::string FinalizeCCTx(uint64_t CCmask,struct CCcontract_info *cp,CMutableTran
void NSPV_CCunspents(std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > &unspentOutputs,char *coinaddr,bool ccflag);
void NSPV_CCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &txids,char *coinaddr,bool ccflag);
void NSPV_CCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &txids,char *coinaddr,bool ccflag,uint8_t evalcode,uint256 filtertxid);
void SetCCunspents(std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > &unspentOutputs,char *coinaddr,bool ccflag)
{
int32_t type=0,i,n; char *ptr; std::string addrstr; uint160 hashBytes; std::vector<std::pair<uint160, int> > addresses;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
NSPV_CCunspents(unspentOutputs,coinaddr,ccflag);
return;
@ -368,7 +369,7 @@ void SetCCunspents(std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValu
void SetCCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex,char *coinaddr,bool ccflag)
{
int32_t type=0,i,n; char *ptr; std::string addrstr; uint160 hashBytes; std::vector<std::pair<uint160, int> > addresses;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
NSPV_CCtxids(addressIndex,coinaddr,ccflag);
return;
@ -389,6 +390,16 @@ void SetCCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex
}
}
void SetCCtxids_NSPV(std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex,char *coinaddr,bool ccflag, uint8_t evalcode, uint256 filtertxid)
{
if ( KOMODO_NSPV_SUPERLITE )
{
NSPV_CCtxids(addressIndex,coinaddr,ccflag,evalcode,filtertxid);
return;
}
else SetCCtxids(addressIndex,coinaddr,ccflag);
}
int64_t CCutxovalue(char *coinaddr,uint256 utxotxid,int32_t utxovout,int32_t CCflag)
{
uint256 txid; std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > unspentOutputs;
@ -555,7 +566,7 @@ int32_t CC_vinselect(int32_t *aboveip,int64_t *abovep,int32_t *belowip,int64_t *
int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs)
{
int32_t abovei,belowi,ind,vout,i,n = 0; int64_t sum,threshold,above,below; int64_t remains,nValue,totalinputs = 0; uint256 txid,hashBlock; std::vector<COutput> vecOutputs; CTransaction tx; struct CC_utxo *utxos,*up;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(NSPV_AddNormalinputs(mtx,mypk,total,maxinputs,&NSPV_U));
#ifdef ENABLE_WALLET
assert(pwalletMain != NULL);
@ -652,7 +663,7 @@ int64_t AddNormalinputs2(CMutableTransaction &mtx,int64_t total,int32_t maxinput
{
int32_t abovei,belowi,ind,vout,i,n = 0; int64_t sum,threshold,above,below; int64_t remains,nValue,totalinputs = 0; char coinaddr[64]; uint256 txid,hashBlock; CTransaction tx; struct CC_utxo *utxos,*up;
std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > unspentOutputs;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(NSPV_AddNormalinputs(mtx,pubkey2pk(Mypubkey()),total,maxinputs,&NSPV_U));
utxos = (struct CC_utxo *)calloc(CC_MAXVINS,sizeof(*utxos));
if ( maxinputs > CC_MAXVINS )

8
src/cc/CCutils.cpp

@ -450,7 +450,7 @@ extern uint32_t NSPV_logintime;
bool Myprivkey(uint8_t myprivkey[])
{
char coinaddr[64],checkaddr[64]; std::string strAddress; char *dest; int32_t i,n; CBitcoinAddress address; CKeyID keyID; CKey vchSecret; uint8_t buf33[33];
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
if ( NSPV_logintime == 0 || time(NULL) > NSPV_logintime+NSPV_AUTOLOGOUT )
{
@ -590,7 +590,7 @@ int32_t NSPV_coinaddr_inmempool(char const *logcategory,char *coinaddr,uint8_t C
int32_t myIs_coinaddr_inmempoolvout(char const *logcategory,char *coinaddr)
{
int32_t i,n; char destaddr[64];
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(NSPV_coinaddr_inmempool(logcategory,coinaddr,1));
BOOST_FOREACH(const CTxMemPoolEntry &e,mempool.mapTx)
{
@ -619,7 +619,7 @@ int32_t myGet_mempool_txs(std::vector<CTransaction> &txs,uint8_t evalcode,uint8_
{
int i=0;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
CTransaction tx; uint256 hashBlock;
@ -673,7 +673,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid)
CBlockIndex *pindex;
char symbol[KOMODO_ASSETCHAIN_MAXLEN],dest[KOMODO_ASSETCHAIN_MAXLEN]; struct komodo_state *sp;
if (KOMODO_NSPV!=0)
if ( KOMODO_NSPV_SUPERLITE )
{
if ( NSPV_myGetTransaction(txid,tx,hashBlock,txheight,currentheight) == 0 )
{

2
src/cc/channels.cpp

@ -846,7 +846,7 @@ UniValue ChannelsInfo(uint256 channeltxid)
result.push_back(Pair("Amount (satoshi)",i64tostr(param1*param2)));
}
GetCCaddress(cp,CCaddr,mypk);
SetCCtxids(addressIndex,CCaddr,true);
SetCCtxids_NSPV(addressIndex,CCaddr,true,EVAL_CHANNELS,opentxid);
for (std::vector<std::pair<CAddressIndexKey, CAmount> >::const_iterator it=addressIndex.begin(); it!=addressIndex.end(); it++)
{
if (myGetTransaction(it->first.txhash,tx,hashBlock) != 0 && (numvouts= tx.vout.size()) > 0 && it->second==CC_MARKER_VALUE &&

25
src/cc/gateways.cpp

@ -629,12 +629,10 @@ bool GatewaysValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &
return eval->Invalid("deposit amount greater then bind total supply");
else if (komodo_txnotarizedconfirmed(deposittxid) == false)
return eval->Invalid("gatewaysdeposit tx is not yet confirmed(notarised)!");
else if (IsCCInput(tx.vin[0].scriptSig) != 0)
return eval->Invalid("vin.0 is normal for gatewaysclaim!");
else if (tx.vin.size()>2)
else if (tx.vin.size()>0)
{
i=1;
while (i<=tx.vin.size()-2)
i=0;
while (i<tx.vin.size()-1)
{
if (IsCCInput(tx.vin[i].scriptSig)==0) return eval->Invalid("vin."+std::to_string(i)+" is CC for gatewaysclaim!");
i++;
@ -1108,19 +1106,14 @@ std::string GatewaysClaim(uint64_t txfee,uint256 bindtxid,std::string refcoin,ui
LOGSTREAM("gatewayscc",CCLOG_INFO, stream << CCerror << std::endl);
return("");
}
if ( AddNormalinputs(mtx,mypk,txfee,1) > 0 )
if ((inputs=AddGatewaysInputs(cp, mtx, gatewayspk, bindtxid, amount, 60)) > 0)
{
if ((inputs=AddGatewaysInputs(cp, mtx, gatewayspk, bindtxid, amount, 60)) > 0)
{
if ( inputs > amount ) CCchange = (inputs - amount);
mtx.vin.push_back(CTxIn(deposittxid,0,CScript()));
mtx.vout.push_back(MakeCC1vout(EVAL_TOKENS,amount,destpub));
if ( CCchange != 0 ) mtx.vout.push_back(MakeTokensCC1vout(EVAL_GATEWAYS,CCchange,gatewayspk));
return(FinalizeCCTx(0,cp,mtx,mypk,txfee,EncodeGatewaysClaimOpRet('C',tokenid,bindtxid,refcoin,deposittxid,destpub,amount)));
}
if ( inputs > amount ) CCchange = (inputs - amount);
mtx.vin.push_back(CTxIn(deposittxid,0,CScript()));
mtx.vout.push_back(MakeCC1vout(EVAL_TOKENS,amount,destpub));
if ( CCchange != 0 ) mtx.vout.push_back(MakeTokensCC1vout(EVAL_GATEWAYS,CCchange,gatewayspk));
return(FinalizeCCTx(0,cp,mtx,mypk,txfee,EncodeGatewaysClaimOpRet('C',tokenid,bindtxid,refcoin,deposittxid,destpub,amount)));
}
CCerror = strprintf("cant find enough inputs or mismatched total");
LOGSTREAM("gatewayscc",CCLOG_INFO, stream << CCerror << std::endl);
return("");
}

3
src/cc/oracles.cpp

@ -641,6 +641,7 @@ bool OraclesDataValidate(struct CCcontract_info *cp,Eval* eval,const CTransactio
int32_t GetLatestTimestamp(int32_t height)
{
if ( KOMODO_NSPV_SUPERLITE ) return (NSPV_blocktime(height));
return(komodo_heightstamp(height));
}
@ -793,7 +794,7 @@ int64_t LifetimeOraclesFunds(struct CCcontract_info *cp,uint256 oracletxid,CPubK
char coinaddr[64]; CPubKey pk; int64_t total=0,num; uint256 txid,hashBlock,subtxid; CTransaction subtx;
std::vector<std::pair<CAddressIndexKey, CAmount> > addressIndex;
GetCCaddress(cp,coinaddr,publisher);
SetCCtxids(addressIndex,coinaddr,true);
SetCCtxids_NSPV(addressIndex,coinaddr,true,EVAL_ORACLES,oracletxid);
//fprintf(stderr,"scan lifetime of %s\n",coinaddr);
for (std::vector<std::pair<CAddressIndexKey, CAmount> >::const_iterator it=addressIndex.begin(); it!=addressIndex.end(); it++)
{

40
src/cc/payments.cpp

@ -77,6 +77,18 @@
// start of consensus code
void mpz_set_lli( mpz_t rop, long long op )
{
mpz_import(rop, 1, 1, sizeof(op), 0, 0, &op);
}
int64_t mpz_get_si2( mpz_t op )
{
int64_t ret = 0;
mpz_export(&ret, NULL, 1, sizeof(ret), 0, 0, op);
return ret;
}
CScript EncodePaymentsTxidOpRet(int64_t allocation,std::vector<uint8_t> scriptPubKey,std::vector<uint8_t> destopret)
{
CScript opret; uint8_t evalcode = EVAL_PAYMENTS;
@ -277,7 +289,7 @@ int32_t payments_getallocations(int32_t top, int32_t bottom, const std::vector<s
//fprintf(stderr, "address: %s nValue.%li \n", CBitcoinAddress(address.second).ToString().c_str(), address.first);
scriptPubKeys.push_back(scriptPubKey);
allocations.push_back(address.first);
mpz_set_si(mpzAllocation,address.first);
mpz_set_lli(mpzAllocation,address.first);
mpz_add(mpzTotalAllocations,mpzTotalAllocations,mpzAllocation);
mpz_clear(mpzAllocation);
}
@ -316,7 +328,7 @@ bool PaymentsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &
return(eval->Invalid("could not decode ccopret"));
if ( tx.vout.back().scriptPubKey.IsOpReturn() )
fHasOpret = true;
mpz_set_si(mpzCheckamount,amountReleased);
mpz_set_lli(mpzCheckamount,amountReleased);
} else return(eval->Invalid("could not decode ccopret"));
// use the createtxid to fetch the tx and all of the plans info.
@ -382,7 +394,7 @@ bool PaymentsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &
//fprintf(stderr, "totalallocations.%li checkallocations.%li\n",totalallocations, checkallocations);
if ( totalallocations != checkallocations )
return(eval->Invalid("allocation missmatch"));
mpz_set_si(mpzTotalAllocations,totalallocations);
mpz_set_lli(mpzTotalAllocations,totalallocations);
}
else if ( funcid == 'S' || funcid == 'O' )
{
@ -438,16 +450,16 @@ bool PaymentsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &
else
{
mpz_init(mpzAllocation);
mpz_set_si(mpzAllocation,allocations[n]);
mpz_set_lli(mpzAllocation,allocations[n]);
mpz_mul(mpzAllocation,mpzAllocation,mpzCheckamount);
mpz_tdiv_q(mpzAllocation,mpzAllocation,mpzTotalAllocations);
test = mpz_get_si(mpzAllocation);
test = mpz_get_si2(mpzAllocation);
mpz_clear(mpzAllocation);
}
//fprintf(stderr, "vout %i test.%li nValue.%li\n", i, test, tx.vout[i].nValue);
//fprintf(stderr, "vout.%i test.%lli vs nVlaue.%lli\n",i, (long long)test, (long long)tx.vout[i].nValue);
if ( test != tx.vout[i].nValue )
{
fprintf(stderr, "vout.%i test.%li vs nVlaue.%li\n",i, test, tx.vout[i].nValue);
fprintf(stderr, "vout.%i test.%lli vs nVlaue.%lli\n",i, (long long)test, (long long)tx.vout[i].nValue);
return(eval->Invalid("amounts do not match"));
}
if ( test < minimum )
@ -463,10 +475,10 @@ bool PaymentsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &
{
// need to check that the next allocation was less than minimum, otherwise ppl can truncate the tx at any place not paying all elegible addresses.
mpz_init(mpzAllocation);
mpz_set_si(mpzAllocation,allocations[n+1]);
mpz_set_lli(mpzAllocation,allocations[n+1]);
mpz_mul(mpzAllocation,mpzAllocation,mpzCheckamount);
mpz_tdiv_q(mpzAllocation,mpzAllocation,mpzTotalAllocations);
int64_t test = mpz_get_si(mpzAllocation);
int64_t test = mpz_get_si2(mpzAllocation);
//fprintf(stderr, "check next vout pays under min: test.%li > minimuim.%i\n", test, minimum);
if ( test > minimum )
return(eval->Invalid("next allocation was not under minimum"));
@ -785,7 +797,7 @@ UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr)
return(result);
}
// set totalallocations to a mpz_t bignum, for amounts calculation later.
mpz_set_si(mpzTotalAllocations,totalallocations);
mpz_set_lli(mpzTotalAllocations,totalallocations);
}
else if ( funcid == 'S' || funcid == 'O' )
{
@ -852,7 +864,7 @@ UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr)
}
newamount = amount;
int64_t totalamountsent = 0;
mpz_t mpzAmount; mpz_init(mpzAmount); mpz_set_si(mpzAmount,amount);
mpz_t mpzAmount; mpz_init(mpzAmount); mpz_set_lli(mpzAmount,amount);
for (i=0; i<m; i++)
{
mpz_t mpzValue; mpz_init(mpzValue);
@ -860,11 +872,11 @@ UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr)
mtx.vout[i+1].nValue = amount / (top-bottom);
else
{
mpz_set_si(mpzValue,mtx.vout[i+1].nValue);
mpz_set_lli(mpzValue,mtx.vout[i+1].nValue);
mpz_mul(mpzValue,mpzValue,mpzAmount);
mpz_tdiv_q(mpzValue,mpzValue,mpzTotalAllocations);
if ( mpz_fits_slong_p(mpzValue) )
mtx.vout[i+1].nValue = mpz_get_si(mpzValue);
mtx.vout[i+1].nValue = mpz_get_si2(mpzValue);
else
{
result.push_back(Pair("result","error"));
@ -897,7 +909,7 @@ UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr)
totalamountsent += mtx.vout[i+1].nValue;
}
if ( totalamountsent < amount ) newamount = totalamountsent;
//int64_t temptst = mpz_get_si(mpzTotalAllocations);
//int64_t temptst = mpz_get_si2(mpzTotalAllocations);
//fprintf(stderr, "checkamount RPC.%li totalallocations.%li\n",totalamountsent, temptst);
mpz_clear(mpzAmount); mpz_clear(mpzTotalAllocations);
}

2
src/cc/pegs.cpp

@ -1234,7 +1234,7 @@ UniValue PegsAccountHistory(uint256 pegstxid)
mypk = pubkey2pk(Mypubkey());
pegspk = GetUnspendable(cp,0);
GetCCaddress1of2(cp,coinaddr,mypk,pegspk);
SetCCtxids(txids,coinaddr,true);
SetCCtxids_NSPV(txids,coinaddr,true,EVAL_PEGS,pegstxid);
for (std::vector<std::pair<CAddressIndexKey, CAmount> >::const_iterator it=txids.begin(); it!=txids.end(); it++)
{
txid = it->first.txhash;

128
src/chain.h

@ -29,6 +29,7 @@ class CChainPower;
#include "tinyformat.h"
#include "uint256.h"
extern int8_t is_STAKED(const char *chain_name);
extern bool fZindex;
#include <vector>
@ -254,15 +255,108 @@ public:
//! (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block
CChainPower chainPower;
// block stats
//! Number of transactions in this block.
//! Note: in a potential headers-first mode, this number cannot be relied upon
unsigned int nTx;
//! Number of notarization transactions in this block.
unsigned int nNotarizations;
//! (memory only) Number of payments (shielded or transparent) in the block
//! up to and including this block. One transaction can contain one or more
//! payments. This stat allows us to calculate ratios of shielded/transparent
//! when combined with shielded payment stats
unsigned int nPayments;
//! (memory only) Number of shielded transactions (of any kind) in the block up to and including this block.
//! A shielded transaction is defined as a transaction that contains at least 1 JoinSplit, which includes
//! shielding/de-shielding and other complex transaction possibilties including multiple taddrs/zaddrs as
//! inputs and outputs.
unsigned int nShieldedTx;
//! (memory only) Number of fully shielded transactions. A fully shielded transaction is defined
//! as a transaction containing JoinSplits and only shielded inputs and outputs, i.e. no transparent
// inputs or outputs: z->z or z->(z,z) or z->(z,z,z,) etc...
unsigned int nFullyShieldedTx;
//! (memory only) Number of shielding payments. A shielding payment is defined
//! as having a shielded output but transparent input: t->z
unsigned int nShieldingPayments;
//! (memory only) Number of shielded payments. A shielded payment is defined
//! as having a shielded input or output: t->z or z->t
unsigned int nShieldedPayments;
//! (memory only) Number of fully shielded payments. A fully shielded payment is defined
//! as having a shielded input and shielded output: z->z
unsigned int nFullyShieldedPayments;
//! (memory only) Number of deshielding transactions. A deshielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent output.
unsigned int nDeshieldingTx;
//! (memory only) Number of deshielding payments. A deshielding payment is defined
//! as one transparent input and one shielded output: z->t
unsigned int nDeshieldingPayments;
//! (memory only) Number of shielding transactions. A shielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent input
// i.e. t->z or t->(z,t) or z->(z,z,t)
unsigned int nShieldingTx;
// chain stats
//! (memory only) Number of transactions in the chain up to and including this block.
//! This value will be non-zero only if and only if transactions for this block and all its parents are available.
//! Change to 64-bit type when necessary; won't happen before 2030
unsigned int nChainTx;
//! Number of notarization transactions in this chain
int64_t nChainNotarizations;
//! (memory only) Number of payments (shielded or transparent) in the chain
//! up to and including this block. One transaction can contain one or more
//! payments. This stat allows us to calculate ratios of shielded/transparent
//! when combined with shielded payment stats
int64_t nChainPayments;
//! (memory only) Number of shielded transactions (of any kind) in the chain up to and including this block.
//! A shielded transaction is defined as a transaction that contains at least 1 JoinSplit, which includes
//! shielding/de-shielding and other complex transaction possibilties including multiple taddrs/zaddrs as
//! inputs and outputs.
int64_t nChainShieldedTx;
//! (memory only) Number of fully shielded transactions. A fully shielded transaction is defined
//! as a transaction containing JoinSplits and only shielded inputs and outputs, i.e. no transparent
// inputs or outputs: z->z or z->(z,z) or z->(z,z,z,) etc...
int64_t nChainFullyShieldedTx;
//! (memory only) Number of shielding payments. A shielding payment is defined
//! as having a shielded output but transparent input: t->z
int64_t nChainShieldingPayments;
//! (memory only) Number of shielded payments. A shielded payment is defined
//! as having a shielded input or output: t->z or z->t
int64_t nChainShieldedPayments;
//! (memory only) Number of fully shielded payments. A fully shielded payment is defined
//! as having a shielded input and shielded output: z->z
int64_t nChainFullyShieldedPayments;
//! (memory only) Number of deshielding transactions. A deshielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent output.
int64_t nChainDeshieldingTx;
//! (memory only) Number of deshielding payments. A deshielding payment is defined
//! as one transparent input and one shielded output: z->t
int64_t nChainDeshieldingPayments;
//! (memory only) Number of shielding transactions. A shielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent input
// i.e. t->z or t->(z,t) or z->(z,z,t)
int64_t nChainShieldingTx;
//! Verification status of this block. See enum BlockStatus
unsigned int nStatus;
@ -321,6 +415,24 @@ public:
chainPower = CChainPower();
nTx = 0;
nChainTx = 0;
nChainShieldedTx = 0;
nChainShieldingTx = 0;
nChainDeshieldingTx = 0;
nChainFullyShieldedTx = 0;
nChainShieldedPayments = 0;
nChainShieldingPayments = 0;
nChainDeshieldingPayments = 0;
nChainFullyShieldedPayments = 0;
nShieldedTx = 0;
nShieldingTx = 0;
nDeshieldingTx = 0;
nFullyShieldedTx = 0;
nShieldedPayments = 0;
nShieldingPayments = 0;
nDeshieldingPayments = 0;
nFullyShieldedPayments = 0;
nStatus = 0;
nCachedBranchId = boost::none;
hashSproutAnchor = uint256();
@ -506,6 +618,22 @@ public:
READWRITE(VARINT(chainPower.nHeight));
READWRITE(VARINT(nStatus));
READWRITE(VARINT(nTx));
// These values only serialized when -zindex enabled
if((s.GetType() & SER_DISK) && fZindex) {
READWRITE(VARINT(nShieldedTx));
READWRITE(VARINT(nShieldingTx));
READWRITE(VARINT(nDeshieldingTx));
READWRITE(VARINT(nFullyShieldedTx));
READWRITE(VARINT(nShieldedPayments));
READWRITE(VARINT(nShieldingPayments));
READWRITE(VARINT(nDeshieldingPayments));
READWRITE(VARINT(nFullyShieldedPayments));
READWRITE(VARINT(nNotarizations));
}
if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO))
READWRITE(VARINT(nFile));
if (nStatus & BLOCK_HAVE_DATA)

4
src/clientversion.h

@ -34,7 +34,7 @@
// Must be kept in sync with configure.ac !
#define CLIENT_VERSION_MAJOR 3
#define CLIENT_VERSION_MINOR 1
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_REVISION 1
#define CLIENT_VERSION_BUILD 0
//! Set to true for release, false for prerelease or test build
@ -56,7 +56,7 @@
#define DO_STRINGIZE(X) #X
//! Copyright string used in Windows .rc files
#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core Developers, The Zcash developers, Komodo developers, and Verus developers"
#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core, Zcash, Komodo, Hush, and Verus developers"
/**
* bitcoind-res.rc includes this file, but it cannot cope with real c++ code.

10
src/consensus/upgrades.cpp

@ -21,6 +21,14 @@
extern int32_t KOMODO_NSPV;
#define NSPV_BRANCHID 0x76b809bb
#ifndef KOMODO_NSPV_FULLNODE
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
#endif // !KOMODO_NSPV_FULLNODE
#ifndef KOMODO_NSPV_SUPERLITE
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
#endif // !KOMODO_NSPV_SUPERLITE
/**
* General information about each network upgrade.
* Ordered by Consensus::UpgradeIndex.
@ -101,7 +109,7 @@ int CurrentEpoch(int nHeight, const Consensus::Params& params) {
uint32_t CurrentEpochBranchId(int nHeight, const Consensus::Params& params)
{
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(NSPV_BRANCHID);
return NetworkUpgradeInfo[CurrentEpoch(nHeight, params)].nBranchId;
}

8
src/cryptoconditions/src/cryptoconditions.c

@ -272,10 +272,10 @@ int cc_verify(const struct CC *cond, const unsigned char *msg, size_t msgLength,
unsigned char msgHash[32];
if (doHashMsg) sha256(msg, msgLength, msgHash);
else memcpy(msgHash, msg, 32);
int32_t z;
for (z=0; z<32; z++)
fprintf(stderr,"%02x",msgHash[z]);
fprintf(stderr," msgHash msglen.%d\n",msgLength);
//int32_t z;
//for (z=0; z<32; z++)
// fprintf(stderr,"%02x",msgHash[z]);
//fprintf(stderr," msgHash msglen.%d\n",(int32_t)msgLength);
if (!cc_secp256k1VerifyTreeMsg32(cond, msgHash)) {
fprintf(stderr," cc_verify error C\n");

3
src/fiat-cli

@ -1,8 +1,9 @@
#!/bin/bash
args="$@"
komodo_cli='./komodo-cli'
./listassetchains | while read chain; do
echo $chain
./komodo-cli --ac_name=$chain $args
$komodo_cli --ac_name=$chain $args
done

5
src/hush-cli

@ -8,4 +8,9 @@ cd $DIR
NAME=HUSH3
CLI=${KOMODOCLI:-./komodo-cli}
# Debian packages prefix binaries with hush-
# so we prevent conflicting with official komodod
if [ ! -e "$CLI" ]; then
CLI=hush-komodo-cli
fi
$CLI -ac_name=$NAME "$@"

5
src/hush-cli-testnet

@ -8,4 +8,9 @@ cd $DIR
NAME=HUSH3T
CLI=${KOMODOCLI:-./komodo-cli}
# Debian packages prefix binaries with hush-
# so we prevent conflicting with official komodod
if [ ! -e "$CLI" ]; then
CLI=hush-komodo-cli
fi
$CLI -ac_name=$NAME "$@"

10
src/hush-tx

@ -5,6 +5,12 @@
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR
NAME=HUSHT
NAME=HUSH3
./komodo-tx -ac_name=$NAME "$@"
TX=${KOMODOTX:-./komodo-tx}
# Debian packages prefix binaries with hush-
# so we prevent conflicting with official komodod
if [ ! -e "$TX" ]; then
TX=hush-komodo-tx
fi
$TX -ac_name=$NAME "$@"

10
src/hushd

@ -37,10 +37,14 @@ ORACLE=236
GATEWAY=241
CCENABLE=$FAUCET,$HEIR,$CHANNEL,$ORACLE,$GATEWAY
#NOTE: This is not compatible with upstream KMD komodod,
# but you can reuse one hush3 komodod binary in various
# directories/repos on one server, to save disk space
KMD=${KOMODOD:-./komodod}
# Debian packages prefix binaries with hush-
# so we prevent conflicting with official komodod
if [ ! -e "$KMD" ]; then
KMD=hush-komodod
fi
$KMD -ac_name=$NAME -ac_sapling=1 \
-ac_reward=$REWARD \
-ac_halving=$HALVING \

10
src/hushd-testnet

@ -33,10 +33,14 @@ ORACLE=236
GATEWAY=241
CCENABLE=$FAUCET,$HEIR,$CHANNEL,$ORACLE,$GATEWAY
#NOTE: This is not compatible with upstream KMD komodod,
# but you can reuse one hush3 komodod binary in various
# directories/repos on one server, to save disk space
KMD=${KOMODOD:-./komodod}
# Debian packages prefix binaries with hush-
# so we prevent conflicting with official komodod
if [ ! -e "$KMD" ]; then
KMD=hush-komodod
fi
$KMD -ac_name=$NAME -ac_sapling=1 \
-ac_reward=$REWARD \
-ac_halving=$HALVING \

18
src/init.cpp

@ -400,6 +400,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += HelpMessageOpt("-addressindex", strprintf(_("Maintain a full address index, used to query for the balance, txids and unspent outputs for addresses (default: %u)"), DEFAULT_ADDRESSINDEX));
strUsage += HelpMessageOpt("-timestampindex", strprintf(_("Maintain a timestamp index for block hashes, used to query blocks hashes by a range of timestamps (default: %u)"), DEFAULT_TIMESTAMPINDEX));
strUsage += HelpMessageOpt("-spentindex", strprintf(_("Maintain a full spent index, used to query the spending txid and input index for an outpoint (default: %u)"), DEFAULT_SPENTINDEX));
strUsage += HelpMessageOpt("-zindex", strprintf(_("Maintain extra statistics about shielded transactions and payments (default: %u)"), 0));
strUsage += HelpMessageGroup(_("Connection options:"));
strUsage += HelpMessageOpt("-addnode=<ip>", _("Add a node to connect to and attempt to keep the connection open"));
strUsage += HelpMessageOpt("-banscore=<n>", strprintf(_("Threshold for disconnecting misbehaving peers (default: %u)"), 100));
@ -1088,7 +1089,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
RegisterAllCoreRPCCommands(tableRPC);
#ifdef ENABLE_WALLET
bool fDisableWallet = GetBoolArg("-disablewallet", false);
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
fDisableWallet = true;
nLocalServices = 0;
@ -1169,7 +1170,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
// Option to startup with mocktime set (used for regression testing):
SetMockTime(GetArg("-mocktime", 0)); // SetMockTime(0) is a no-op
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
if (GetBoolArg("-peerbloomfilters", true))
nLocalServices |= NODE_BLOOM;
@ -1282,14 +1283,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Komodo is probably already running.") + " %s.", strDataDir, e.what()));
}
fprintf(stderr,"About to create pidfile\n");
#ifndef _WIN32
CreatePidFile(GetPidFile(), getpid());
#endif
fprintf(stderr,"created pidfile\n");
if (GetBoolArg("-shrinkdebugfile", !fDebug))
ShrinkDebugFile();
fprintf(stderr,"past shrinkdebugfile\n");
LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
LogPrintf("Komodo version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
@ -1333,7 +1331,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
libsnark::inhibit_profiling_info = true;
libsnark::inhibit_profiling_counters = true;
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
// Initialize Zcash circuit parameters
ZC_LoadParams(chainparams);
@ -1514,7 +1512,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
}
#endif
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
std::vector<boost::filesystem::path> vImportFiles;
threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles));
@ -1668,6 +1666,12 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
break;
}
fprintf(stderr, "zindex=%s in block index\n", fZindex ? "enabled" : "disabled");
if (fZindex != GetBoolArg("-zindex", false)) {
strLoadError = _("You need to rebuild the database using -reindex to change -zindex");
break;
}
// Check for changed -prune state. What we are concerned about is a user who has pruned blocks
// in the past, but is now trying to run unpruned.
if (fHavePruned && !fPruneMode) {

5
src/komodo.h

@ -67,9 +67,14 @@ void komodo_currentheight_set(int32_t height)
sp->CURRENT_HEIGHT = height;
}
extern struct NSPV_inforesp NSPV_inforesult;
int32_t komodo_currentheight()
{
char symbol[KOMODO_ASSETCHAIN_MAXLEN],dest[KOMODO_ASSETCHAIN_MAXLEN]; struct komodo_state *sp;
if ( KOMODO_NSPV_SUPERLITE )
{
return (NSPV_inforesult.height);
}
if ( (sp= komodo_stateptr(symbol,dest)) != 0 )
return(sp->CURRENT_HEIGHT);
else return(0);

9
src/komodo_defs.h

@ -20,7 +20,7 @@
#include "komodo_nk.h"
#define KOMODO_EARLYTXID_HEIGHT 100
#define ADAPTIVEPOW_CHANGETO_DEFAULTON 1572480000
//#define ADAPTIVEPOW_CHANGETO_DEFAULTON 1572480000
#define ASSETCHAINS_MINHEIGHT 128
#define ASSETCHAINS_MAX_ERAS 7
#define KOMODO_ELECTION_GAP 2000
@ -345,4 +345,11 @@ arith_uint256 komodo_adaptivepow_target(int32_t height,arith_uint256 bnTarget,ui
uint256 Parseuint256(const char *hexstr);
#ifndef KOMODO_NSPV_FULLNODE
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
#endif // !KOMODO_NSPV_FULLNODE
#ifndef KOMODO_NSPV_SUPERLITE
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
#endif // !KOMODO_NSPV_SUPERLITE
#endif

2
src/komodo_gateway.h

@ -1420,7 +1420,7 @@ void komodo_passport_iteration()
int32_t maxseconds = 10;
FILE *fp; uint8_t *filedata; long fpos,datalen,lastfpos; int32_t baseid,limit,n,ht,isrealtime,expired,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[KOMODO_ASSETCHAIN_MAXLEN],dest[KOMODO_ASSETCHAIN_MAXLEN]; uint32_t buf[3],starttime; uint64_t RTmask = 0; //CBlockIndex *pindex;
expired = 0;
while ( KOMODO_INITDONE == 0 )
while ( 0 && KOMODO_INITDONE == 0 )
{
fprintf(stderr,"[%s] PASSPORT iteration waiting for KOMODO_INITDONE\n",ASSETCHAINS_SYMBOL);
sleep(3);

2
src/komodo_nSPV_defs.h

@ -17,7 +17,7 @@
#ifndef KOMODO_NSPV_DEFSH
#define KOMODO_NSPV_DEFSH
#define NSPV_PROTOCOL_VERSION 0x00000002
#define NSPV_PROTOCOL_VERSION 0x00000003
#define NSPV_POLLITERS 200
#define NSPV_POLLMICROS 50000
#define NSPV_MAXVINS 64

115
src/komodo_nSPV_fullnode.h

@ -172,7 +172,7 @@ int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC
{
// if gettxout is != null to handle mempool
{
if ( n >= skipcount )
if ( n >= skipcount && myIsutxo_spentinmempool(ignoretxid,ignorevin,it->first.txhash,(int32_t)it->first.index) == 0 )
{
ptr->utxos[ind].txid = it->first.txhash;
ptr->utxos[ind].vout = (int32_t)it->first.index;
@ -208,8 +208,13 @@ int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC
int32_t NSPV_getaddresstxids(struct NSPV_txidsresp *ptr,char *coinaddr,bool isCC,int32_t skipcount,uint32_t filter)
{
int32_t maxlen,txheight,ind=0,n = 0,len = 0;
int32_t maxlen,txheight,ind=0,n = 0,len = 0; CTransaction tx; uint256 hashBlock,filtertxid;
std::vector<std::pair<CAddressIndexKey, CAmount> > txids;
if (ptr->txids!=0)
{
filtertxid=ptr->txids[0].txid;
free(ptr->txids);
}
SetCCtxids(txids,coinaddr,isCC);
ptr->nodeheight = chainActive.LastTip()->GetHeight();
maxlen = MAX_BLOCK_SIZE(ptr->nodeheight) - 512;
@ -231,6 +236,32 @@ int32_t NSPV_getaddresstxids(struct NSPV_txidsresp *ptr,char *coinaddr,bool isCC
{
if ( n >= skipcount )
{
if (filter&0xFF!=0)
{
myGetTransaction(it->first.txhash,tx,hashBlock);
std::vector<std::pair<uint8_t, vscript_t>> oprets; uint256 tokenid,txid;
std::vector<uint8_t> vopret,vOpretExtra; uint8_t *script,e,f,tokenevalcode;
std::vector<CPubKey> pubkeys;
if (DecodeTokenOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,tokenevalcode,tokenid,pubkeys,oprets)!=0 && GetOpretBlob(oprets, OPRETID_CHANNELSDATA, vOpretExtra) && tokenevalcode==EVAL_TOKENS && vOpretExtra.size()>0)
{
vopret=vOpretExtra;
}
else GetOpReturnData(tx.vout[tx.vout.size()-1].scriptPubKey, vopret);
script = (uint8_t *)vopret.data();
if ( vopret.size() > 2 && script[0]==filter&0xFF )
{
switch (filter&0xFF)
{
case EVAL_CHANNELS:EVAL_PEGS:EVAL_ORACLES:
E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> txid;);
if (txid!=filtertxid && e==filter&0xFF) continue;
break;
default:
break;
}
}
}
ptr->txids[ind].txid = it->first.txhash;
ptr->txids[ind].vout = (int32_t)it->first.index;
ptr->txids[ind].satoshis = (int64_t)it->second;
@ -250,10 +281,11 @@ int32_t NSPV_getaddresstxids(struct NSPV_txidsresp *ptr,char *coinaddr,bool isCC
return(0);
}
int32_t NSPV_mempoolfuncs(int32_t *vindexp,std::vector<uint256> &txids,char *coinaddr,bool isCC,uint8_t funcid,uint256 txid,int32_t vout)
int32_t NSPV_mempoolfuncs(bits256 *satoshisp,int32_t *vindexp,std::vector<uint256> &txids,char *coinaddr,bool isCC,uint8_t funcid,uint256 txid,int32_t vout)
{
int32_t num = 0,vini = 0,vouti = 0; uint8_t evalcode=0,func=0; std::vector<uint8_t> vopret; char destaddr[64];
*vindexp = -1;
memset(satoshisp,0,sizeof(*satoshisp));
if ( mempool.size() == 0 )
return(0);
if ( funcid == NSPV_MEMPOOL_CCEVALCODE )
@ -323,6 +355,8 @@ int32_t NSPV_mempoolfuncs(int32_t *vindexp,std::vector<uint256> &txids,char *coi
{
txids.push_back(hash);
*vindexp = vouti;
if ( num < 4 )
satoshisp->ulongs[num] = txout.nValue;
num++;
}
}
@ -336,14 +370,14 @@ int32_t NSPV_mempoolfuncs(int32_t *vindexp,std::vector<uint256> &txids,char *coi
int32_t NSPV_mempooltxids(struct NSPV_mempoolresp *ptr,char *coinaddr,uint8_t isCC,uint8_t funcid,uint256 txid,int32_t vout)
{
std::vector<uint256> txids; uint256 tmp,tmpdest; int32_t i,len = 0;
std::vector<uint256> txids; bits256 satoshis; uint256 tmp,tmpdest; int32_t i,len = 0;
ptr->nodeheight = chainActive.LastTip()->GetHeight();
strncpy(ptr->coinaddr,coinaddr,sizeof(ptr->coinaddr)-1);
ptr->CCflag = isCC;
ptr->txid = txid;
ptr->vout = vout;
ptr->funcid = funcid;
if ( NSPV_mempoolfuncs(&ptr->vindex,txids,coinaddr,isCC,funcid,txid,vout) >= 0 )
if ( NSPV_mempoolfuncs(&satoshis,&ptr->vindex,txids,coinaddr,isCC,funcid,txid,vout) >= 0 )
{
if ( (ptr->numtxids= (int32_t)txids.size()) >= 0 )
{
@ -356,6 +390,11 @@ int32_t NSPV_mempooltxids(struct NSPV_mempoolresp *ptr,char *coinaddr,uint8_t is
iguana_rwbignum(0,(uint8_t *)&tmp,sizeof(*ptr->txids),(uint8_t *)&ptr->txids[i]);
}
}
if ( funcid == NSPV_MEMPOOL_ADDRESS )
{
memcpy(&tmp,&satoshis,sizeof(tmp));
iguana_rwbignum(0,(uint8_t *)&tmp,sizeof(ptr->txid),(uint8_t *)&ptr->txid);
}
len = (int32_t)(sizeof(*ptr) + sizeof(*ptr->txids)*ptr->numtxids - sizeof(ptr->txids));
return(len);
}
@ -413,46 +452,48 @@ int32_t NSPV_sendrawtransaction(struct NSPV_broadcastresp *ptr,uint8_t *data,int
int32_t NSPV_gettxproof(struct NSPV_txproof *ptr,int32_t vout,uint256 txid,int32_t height)
{
int32_t flag = 0,len = 0; CTransaction _tx; uint256 hashBlock; CBlock block; CBlockIndex *pindex;
if ( (ptr->tx= NSPV_getrawtx(_tx,hashBlock,&ptr->txlen,txid)) == 0 )
return(-1);
ptr->txid = txid;
ptr->vout = vout;
ptr->hashblock = hashBlock;
if ( height == 0 )
ptr->height = komodo_blockheight(hashBlock);
else
ptr->height = -1;
if ( (ptr->tx= NSPV_getrawtx(_tx,hashBlock,&ptr->txlen,txid)) != 0 )
{
ptr->height = height;
if ( (pindex= komodo_chainactive(height)) != 0 && komodo_blockload(block,pindex) == 0 )
ptr->txid = txid;
ptr->vout = vout;
ptr->hashblock = hashBlock;
if ( height == 0 )
ptr->height = komodo_blockheight(hashBlock);
else
{
BOOST_FOREACH(const CTransaction&tx, block.vtx)
ptr->height = height;
if ( (pindex= komodo_chainactive(height)) != 0 && komodo_blockload(block,pindex) == 0 )
{
if ( tx.GetHash() == txid )
BOOST_FOREACH(const CTransaction&tx, block.vtx)
{
flag = 1;
break;
if ( tx.GetHash() == txid )
{
flag = 1;
break;
}
}
}
if ( flag != 0 )
{
set<uint256> setTxids;
CDataStream ssMB(SER_NETWORK, PROTOCOL_VERSION);
setTxids.insert(txid);
CMerkleBlock mb(block, setTxids);
ssMB << mb;
std::vector<uint8_t> proof(ssMB.begin(), ssMB.end());
ptr->txprooflen = (int32_t)proof.size();
//fprintf(stderr,"%s txproof.(%s)\n",txid.GetHex().c_str(),HexStr(proof).c_str());
if ( ptr->txprooflen > 0 )
if ( flag != 0 )
{
ptr->txproof = (uint8_t *)calloc(1,ptr->txprooflen);
memcpy(ptr->txproof,&proof[0],ptr->txprooflen);
set<uint256> setTxids;
CDataStream ssMB(SER_NETWORK, PROTOCOL_VERSION);
setTxids.insert(txid);
CMerkleBlock mb(block, setTxids);
ssMB << mb;
std::vector<uint8_t> proof(ssMB.begin(), ssMB.end());
ptr->txprooflen = (int32_t)proof.size();
//fprintf(stderr,"%s txproof.(%s)\n",txid.GetHex().c_str(),HexStr(proof).c_str());
if ( ptr->txprooflen > 0 )
{
ptr->txproof = (uint8_t *)calloc(1,ptr->txprooflen);
memcpy(ptr->txproof,&proof[0],ptr->txprooflen);
}
//fprintf(stderr,"gettxproof slen.%d\n",(int32_t)(sizeof(*ptr) - sizeof(ptr->tx) - sizeof(ptr->txproof) + ptr->txlen + ptr->txprooflen));
}
//fprintf(stderr,"gettxproof slen.%d\n",(int32_t)(sizeof(*ptr) - sizeof(ptr->tx) - sizeof(ptr->txproof) + ptr->txlen + ptr->txprooflen));
}
}
ptr->unspentvalue = CCgettxout(txid,vout,1,1);
}
ptr->unspentvalue = CCgettxout(txid,vout,1,1);
return(sizeof(*ptr) - sizeof(ptr->tx) - sizeof(ptr->txproof) + ptr->txlen + ptr->txprooflen);
}
@ -579,7 +620,7 @@ void komodo_nSPVreq(CNode *pfrom,std::vector<uint8_t> request) // received a req
iguana_rwnum(0,&request[len-8],sizeof(skipcount),&skipcount);
iguana_rwnum(0,&request[len-4],sizeof(filter),&filter);
}
if ( isCC != 0 )
if ( 0 && isCC != 0 )
fprintf(stderr,"utxos %s isCC.%d skipcount.%d filter.%x\n",coinaddr,isCC,skipcount,filter);
memset(&U,0,sizeof(U));
if ( (slen= NSPV_getaddressutxos(&U,coinaddr,isCC,skipcount,filter)) > 0 )
@ -619,7 +660,7 @@ void komodo_nSPVreq(CNode *pfrom,std::vector<uint8_t> request) // received a req
iguana_rwnum(0,&request[len-8],sizeof(skipcount),&skipcount);
iguana_rwnum(0,&request[len-4],sizeof(filter),&filter);
}
//if ( isCC != 0 )
if ( 0 && isCC != 0 )
fprintf(stderr,"txids %s isCC.%d skipcount.%d filter.%d\n",coinaddr,isCC,skipcount,filter);
memset(&T,0,sizeof(T));
if ( (slen= NSPV_getaddresstxids(&T,coinaddr,isCC,skipcount,filter)) > 0 )

17
src/komodo_nSPV_superlite.h

@ -214,7 +214,7 @@ void komodo_nSPVresp(CNode *pfrom,std::vector<uint8_t> response) // received a r
CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind)
{
int32_t n,flag = 0; CNode *pnodes[64]; uint32_t timestamp = (uint32_t)time(NULL);
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
return(0);
if ( pnode == 0 )
{
@ -243,7 +243,7 @@ CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind)
std::vector<uint8_t> request;
request.resize(len);
memcpy(&request[0],msg,len);
if ( (0) && KOMODO_NSPV > 0 )
if ( (0) && KOMODO_NSPV_SUPERLITE )
fprintf(stderr,"pushmessage [%d] len.%d\n",msg[0],len);
pnode->PushMessage("getnSPV",request);
pnode->prevtimes[ind] = timestamp;
@ -279,7 +279,7 @@ void komodo_nSPV(CNode *pto) // polling loop from SendMessages
return;
if ( pto->prevtimes[NSPV_INFO>>1] > timestamp )
pto->prevtimes[NSPV_INFO>>1] = 0;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
if ( timestamp > NSPV_lastinfo + ASSETCHAINS_BLOCKTIME/2 && timestamp > pto->prevtimes[NSPV_INFO>>1] + 2*ASSETCHAINS_BLOCKTIME/3 )
{
@ -355,7 +355,7 @@ UniValue NSPV_getinfo_json(struct NSPV_inforesp *ptr)
{
UniValue result(UniValue::VOBJ); int32_t expiration; uint32_t timestamp = (uint32_t)time(NULL);
result.push_back(Pair("result","success"));
result.push_back(Pair("nSPV",KOMODO_NSPV!=0?"superlite":"fullnode"));
result.push_back(Pair("nSPV",KOMODO_NSPV==-1?"disabled":(KOMODO_NSPV_SUPERLITE?"superlite":"fullnode")));
if ( NSPV_address.size() != 0 )
{
result.push_back(Pair("address",NSPV_address));
@ -537,7 +537,7 @@ UniValue NSPV_login(char *wifstr)
result.push_back(Pair("address",NSPV_address));
result.push_back(Pair("pubkey",HexStr(pubkey)));
strcpy(NSPV_pubkeystr,HexStr(pubkey).c_str());
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
decode_hex(NOTARY_PUBKEY33,33,NSPV_pubkeystr);
result.push_back(Pair("wifprefix",(int64_t)data[0]));
result.push_back(Pair("compressed",(int64_t)(data[len-5] == 1)));
@ -621,7 +621,7 @@ UniValue NSPV_addressutxos(char *coinaddr,int32_t CCflag,int32_t skipcount,int32
return(result);
}
UniValue NSPV_addresstxids(char *coinaddr,int32_t CCflag,int32_t skipcount,int32_t filter)
UniValue NSPV_addresstxids(char *coinaddr,int32_t CCflag,int32_t skipcount,int32_t filter, uint256 filtertxid)
{
UniValue result(UniValue::VOBJ); uint8_t msg[512]; int32_t i,iter,slen,len = 0;
if ( NSPV_txidsresult.nodeheight >= NSPV_inforesult.height && strcmp(coinaddr,NSPV_txidsresult.coinaddr) == 0 && CCflag == NSPV_txidsresult.CCflag && skipcount == NSPV_txidsresult.skipcount )
@ -642,6 +642,11 @@ UniValue NSPV_addresstxids(char *coinaddr,int32_t CCflag,int32_t skipcount,int32
msg[len++] = (CCflag != 0);
len += iguana_rwnum(1,&msg[len],sizeof(skipcount),&skipcount);
len += iguana_rwnum(1,&msg[len],sizeof(filter),&filter);
if (filtertxid!=zeroid)
{
NSPV_txidsresult.txids = (struct NSPV_txidresp *)malloc(sizeof(NSPV_txidsresult.txids));
NSPV_txidsresult.txids[0].txid=filtertxid;
}
//fprintf(stderr,"skipcount.%d\n",skipcount);
for (iter=0; iter<3; iter++)
if ( NSPV_req(0,msg,len,NODE_ADDRINDEX,msg[0]>>1) != 0 )

15
src/komodo_nSPV_wallet.h

@ -452,12 +452,12 @@ int64_t NSPV_AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total
mtx.nVersionGroupId = SAPLING_VERSION_GROUP_ID;
mtx.nVersion = SAPLING_TX_VERSION;
Getscriptaddress(coinaddr,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG);
if ( strcmp(ptr->U.coinaddr,coinaddr) != 0 )
{
// if ( strcmp(ptr->U.coinaddr,coinaddr) != 0 )
// {
NSPV_addressutxos(coinaddr,CCflag,0,0);
NSPV_utxosresp_purge(&ptr->U);
NSPV_utxosresp_copy(&ptr->U,&NSPV_utxosresult);
}
// }
fprintf(stderr,"%s numutxos.%d\n",ptr->U.coinaddr,ptr->U.numutxos);
memset(ptr->used,0,sizeof(ptr->used));
return(NSPV_addinputs(ptr->used,mtx,total,maxinputs,ptr->U.utxos,ptr->U.numutxos));
@ -522,7 +522,14 @@ void NSPV_CCunspents(std::vector<std::pair<CAddressUnspentKey, CAddressUnspentVa
void NSPV_CCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &txids,char *coinaddr,bool ccflag)
{
int32_t filter = 0;
NSPV_addresstxids(coinaddr,ccflag,0,filter);
NSPV_addresstxids(coinaddr,ccflag,0,filter,zeroid);
NSPV_txids2CCtxids(&NSPV_txidsresult,txids);
}
void NSPV_CCtxids(std::vector<std::pair<CAddressIndexKey, CAmount> > &txids,char *coinaddr,bool ccflag, uint8_t evalcode,uint256 filtertxid)
{
int32_t filter = evalcode;
NSPV_addresstxids(coinaddr,ccflag,0,filter,filtertxid);
NSPV_txids2CCtxids(&NSPV_txidsresult,txids);
}

217
src/main.cpp

@ -98,6 +98,7 @@ bool fExperimentalMode = true;
bool fImporting = false;
bool fReindex = false;
bool fTxIndex = false;
bool fZindex = false;
bool fAddressIndex = false;
bool fTimestampIndex = false;
bool fSpentIndex = false;
@ -2227,7 +2228,7 @@ bool myAddtomempool(CTransaction &tx, CValidationState *pstate, bool fSkipExpiry
bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock)
{
memset(&hashBlock,0,sizeof(hashBlock));
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
int64_t rewardsum = 0; int32_t i,retval,txheight,currentheight,height=0,vout = 0;
for (i=0; i<NSPV_U.U.numutxos; i++)
@ -2281,7 +2282,7 @@ bool myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlo
bool NSPV_myGetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock, int32_t &txheight, int32_t &currentheight)
{
memset(&hashBlock,0,sizeof(hashBlock));
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
int64_t rewardsum = 0; int32_t i,retval,height=0,vout = 0;
for (i=0; i<NSPV_U.U.numutxos; i++)
@ -3427,7 +3428,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
{
CDiskBlockPos blockPos;
const CChainParams& chainparams = Params();
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(true);
if ( KOMODO_STOPAT != 0 && pindex->GetHeight() > KOMODO_STOPAT )
return(false);
@ -4011,7 +4012,7 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
void FlushStateToDisk() {
CValidationState state;
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
FlushStateToDisk(state, FLUSH_STATE_ALWAYS);
}
@ -4162,7 +4163,7 @@ bool static DisconnectTip(CValidationState &state, bool fBare = false) {
if ((i == (block.vtx.size() - 1)) && (ASSETCHAINS_STAKED != 0 && (komodo_isPoS((CBlock *)&block,pindexDelete->GetHeight(),true) != 0)))
{
#ifdef ENABLE_WALLET
if ( !GetBoolArg("-disablewallet", false) && KOMODO_NSPV <= 0 )
if ( !GetBoolArg("-disablewallet", false) && KOMODO_NSPV_FULLNODE )
pwalletMain->EraseFromWallet(tx.GetHash());
#endif
}
@ -4267,7 +4268,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
// Get the current commitment tree
SproutMerkleTree oldSproutTree;
SaplingMerkleTree oldSaplingTree;
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
assert(pcoinsTip->GetSproutAnchorAt(pcoinsTip->GetBestAnchor(SPROUT), oldSproutTree));
assert(pcoinsTip->GetSaplingAnchorAt(pcoinsTip->GetBestAnchor(SAPLING), oldSaplingTree));
@ -4296,13 +4297,13 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
mapBlockSource.erase(pindexNew->GetBlockHash());
nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2;
LogPrint("bench", " - Connect total: %.2fms [%.2fs]\n", (nTime3 - nTime2) * 0.001, nTimeConnectTotal * 0.000001);
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
assert(view.Flush());
}
int64_t nTime4 = GetTimeMicros(); nTimeFlush += nTime4 - nTime3;
LogPrint("bench", " - Flush: %.2fms [%.2fs]\n", (nTime4 - nTime3) * 0.001, nTimeFlush * 0.000001);
// Write the chain state to disk, if necessary.
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
if (!FlushStateToDisk(state, FLUSH_STATE_IF_NEEDED))
return false;
@ -4318,7 +4319,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
// Update chainActive & related variables.
UpdateTip(pindexNew);
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
// Tell wallet about transactions that went from mempool
// to conflicted:
@ -4346,7 +4347,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
komodo_broadcast(pblock,8);
else if ( ASSETCHAINS_SYMBOL[0] != 0 )
komodo_broadcast(pblock,4);*/
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
if ( ASSETCHAINS_CBOPRET != 0 )
komodo_pricesupdate(pindexNew->GetHeight(),pblock);
@ -4452,8 +4453,8 @@ static bool ActivateBestChainStep(bool fSkipdpow, CValidationState &state, CBloc
notarizedht = komodo_notarized_height(&prevMoMheight,&notarizedhash,&txid);
if ( !fSkipdpow && pindexFork != 0 && pindexOldTip->GetHeight() > notarizedht && pindexFork->GetHeight() < notarizedht )
{
fprintf(stderr,"pindexOldTip->GetHeight().%d > notarizedht %d && pindexFork->GetHeight().%d is < notarizedht %d, so ignore it\n",(int32_t)pindexFork->GetHeight(),notarizedht,(int32_t)pindexOldTip->GetHeight(),notarizedht);
return state.DoS(100, error("ActivateBestChainStep(): pindexOldTip->GetHeight().%d > notarizedht %d && pindexFork->GetHeight().%d is < notarizedht %d, so ignore it",(int32_t)pindexFork->GetHeight(),notarizedht,(int32_t)pindexOldTip->GetHeight(),notarizedht),
fprintf(stderr,"pindexOldTip->GetHeight().%d > notarizedht %d && pindexFork->GetHeight().%d is < notarizedht %d, so ignore it\n",(int32_t)pindexOldTip->GetHeight(),notarizedht,(int32_t)pindexFork->GetHeight(),notarizedht);
return state.DoS(100, error("ActivateBestChainStep(): pindexOldTip->GetHeight().%d > notarizedht %d && pindexFork->GetHeight().%d is < notarizedht %d, so ignore it",(int32_t)pindexOldTip->GetHeight(),notarizedht,(int32_t)pindexFork->GetHeight(),notarizedht),
REJECT_INVALID, "past-notarized-height");
}
// - On ChainDB initialization, pindexOldTip will be null, so there are no removable blocks.
@ -4767,10 +4768,17 @@ CBlockIndex* AddToBlockIndex(const CBlockHeader& block)
/** Mark a block as having its data received and checked (up to BLOCK_VALID_TRANSACTIONS). */
bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBlockIndex *pindexNew, const CDiskBlockPos& pos)
{
pindexNew->nTx = block.vtx.size();
pindexNew->nChainTx = 0;
CAmount sproutValue = 0;
CAmount saplingValue = 0;
pindexNew->nTx = block.vtx.size();
pindexNew->nChainTx = 0;
pindexNew->nChainPayments = 0;
CAmount sproutValue = 0;
CAmount saplingValue = 0;
bool isShieldedTx = false;
int64_t nShieldedSpends=0,nShieldedOutputs=0,nPayments=0;
int64_t nShieldedTx=0,nFullyShieldedTx=0,nDeshieldingTx=0,nShieldingTx=0;
int64_t nShieldedPayments=0,nFullyShieldedPayments=0,nShieldingPayments=0,nDeshieldingPayments=0;
int64_t nNotarizations=0;
for (auto tx : block.vtx) {
// Negative valueBalance "takes" money from the transparent value pool
// and adds it to the Sapling value pool. Positive valueBalance "gives"
@ -4782,7 +4790,71 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
sproutValue += js.vpub_old;
sproutValue -= js.vpub_new;
}
// Ignore following stats unless -zindex
if (!fZindex)
continue;
nShieldedSpends = tx.vShieldedSpend.size();
nShieldedOutputs = tx.vShieldedOutput.size();
isShieldedTx = (nShieldedSpends + nShieldedOutputs) > 0 ? true : false;
// We want to avoid full verification with a low false-positive rate
if(tx.vin.size()==13 && tx.vout.size()==2 && tx.vout[1].scriptPubKey.IsOpReturn() && tx.vout[1].nValue==0) {
nNotarizations++;
}
if(isShieldedTx) {
nShieldedTx++;
if(tx.vin.size()==0 && tx.vout.size()==0) {
nFullyShieldedTx++;
} else if(tx.vin.size()>0) {
nShieldingTx++;
} else if(tx.vout.size()>0) {
nDeshieldingTx++;
}
//NOTE: These are at best heuristics. Improve them as much as possible.
// You cannot compare stats generated from different sets of heuristics, so
// if you change this code, you must delete and resync from scratch, or you
// will be mixing together data from two set of heuristics.
if (nShieldedOutputs >= 1) {
// If there are shielded outputs, count each as a payment
// By default, if there is more than 1 output, we assume 1 change output which is not a payment.
// In the case of multiple outputs which spend inputs exactly, there is no change output and this
// heuristic will undercount payments. Since this edge case is rare, this seems acceptable.
// t->(t,t,z) = 1 shielded payment
// z->(z,z) = 1 shielded payment + shielded change
// t->(z,z) = 1 shielded payment + shielded change
// t->(t,z) = 1 shielded payment + transparent change
// (z,z)->z = 1 shielded payment (has this xtn ever occurred?)
// z->(z,z,z) = 2 shielded payments + shielded change
// Assume that there is always 1 change output when there are more than one
nShieldedPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1;
// Fully shielded do not count toward shielding/deshielding
if(tx.vin.size()==0 && tx.vout.size()==0) {
nFullyShieldedPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1;
} else {
nShieldingPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1;
}
} else if (nShieldedSpends >=1) {
// Shielded inputs with no shielded outputs. We know none are change output because
// change would flow back to the zaddr
// z->t = 1 shielded payment
// z->(t,t) = 2 shielded payments
// z->(t,t,t) = 3 shielded payments
nShieldedPayments += tx.vout.size();
nDeshieldingPayments += tx.vout.size() > 1 ? tx.vout.size()-1 : tx.vout.size();
}
//TODO: correctly add shielded payments to total chain payments
nPayments += nShieldedPayments;
} else {
// No shielded payments, add transparent payments minus a change address
nPayments += tx.vout.size() > 1 ? tx.vout.size()-1 : tx.vout.size();
}
}
pindexNew->nSproutValue = sproutValue;
pindexNew->nChainSproutValue = boost::none;
pindexNew->nSaplingValue = saplingValue;
@ -4792,6 +4864,20 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
pindexNew->nUndoPos = 0;
pindexNew->nStatus |= BLOCK_HAVE_DATA;
pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS);
if (fZindex) {
pindexNew->nPayments = nPayments;
pindexNew->nShieldedTx = nShieldedTx;
pindexNew->nFullyShieldedTx = nFullyShieldedTx;
pindexNew->nDeshieldingTx = nDeshieldingTx;
pindexNew->nShieldingTx = nShieldingTx;
pindexNew->nShieldedPayments = nShieldedPayments;
pindexNew->nFullyShieldedPayments = nFullyShieldedPayments;
pindexNew->nDeshieldingPayments = nDeshieldingPayments;
pindexNew->nShieldingPayments = nShieldingPayments;
pindexNew->nNotarizations = nNotarizations;
}
setDirtyBlockIndex.insert(pindexNew);
if (pindexNew->pprev == NULL || pindexNew->pprev->nChainTx) {
@ -4803,7 +4889,22 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
while (!queue.empty()) {
CBlockIndex *pindex = queue.front();
queue.pop_front();
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx;
if (fZindex) {
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx;
pindex->nChainNotarizations = (pindex->pprev ? pindex->pprev->nChainNotarizations : 0) + pindex->nNotarizations;
pindex->nChainShieldedTx = (pindex->pprev ? pindex->pprev->nChainShieldedTx : 0) + pindex->nShieldedTx;
pindex->nChainFullyShieldedTx = (pindex->pprev ? pindex->pprev->nChainFullyShieldedTx : 0) + pindex->nFullyShieldedTx;
pindex->nChainShieldingTx = (pindex->pprev ? pindex->pprev->nChainShieldingTx : 0) + pindex->nShieldingTx;
pindex->nChainDeshieldingTx = (pindex->pprev ? pindex->pprev->nChainDeshieldingTx : 0) + pindex->nDeshieldingTx;
pindex->nChainPayments = (pindex->pprev ? pindex->pprev->nChainPayments : 0) + pindex->nPayments;
pindex->nChainShieldedPayments = (pindex->pprev ? pindex->pprev->nChainShieldedPayments : 0) + pindex->nShieldedPayments;
pindex->nChainFullyShieldedPayments = (pindex->pprev ? pindex->pprev->nChainFullyShieldedPayments : 0) + pindex->nFullyShieldedPayments;
pindex->nChainShieldingPayments = (pindex->pprev ? pindex->pprev->nChainShieldingPayments : 0) + pindex->nShieldingPayments;
pindex->nChainDeshieldingPayments = (pindex->pprev ? pindex->pprev->nChainDeshieldingPayments : 0) + pindex->nDeshieldingPayments;
}
if (pindex->pprev) {
if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) {
pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue;
@ -4840,6 +4941,10 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
}
}
if (fZindex)
fprintf(stderr, "ht.%d, ShieldedPayments=%d, ShieldedTx=%d, FullyShieldedTx=%d, ntz=%d\n",
pindexNew->GetHeight(), nShieldedPayments, nShieldedTx, nFullyShieldedTx, nNotarizations );
return true;
}
@ -6070,7 +6175,20 @@ bool static LoadBlockIndexDB()
if (pindex->nTx > 0) {
if (pindex->pprev) {
if (pindex->pprev->nChainTx) {
pindex->nChainTx = pindex->pprev->nChainTx + pindex->nTx;
if (fZindex) {
pindex->nChainNotarizations = pindex->pprev->nChainNotarizations + pindex->nNotarizations;
pindex->nChainTx = pindex->pprev->nChainTx + pindex->nTx;
pindex->nChainShieldedTx = pindex->pprev->nChainShieldedTx + pindex->nShieldedTx;
pindex->nChainShieldedPayments = pindex->pprev->nChainShieldedPayments + pindex->nShieldedPayments;
pindex->nChainShieldingTx = pindex->pprev->nChainShieldingTx + pindex->nShieldingTx;
pindex->nChainShieldingPayments = pindex->pprev->nChainShieldingPayments + pindex->nShieldingPayments;
pindex->nChainDeshieldingTx = pindex->pprev->nChainShieldedTx + pindex->nShieldedTx;
pindex->nChainDeshieldingPayments = pindex->pprev->nChainShieldedPayments + pindex->nShieldedPayments;
pindex->nChainFullyShieldedTx = pindex->pprev->nChainFullyShieldedTx + pindex->nFullyShieldedTx;
pindex->nChainFullyShieldedPayments = pindex->pprev->nChainFullyShieldedPayments + pindex->nFullyShieldedPayments;
}
if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) {
pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue;
} else {
@ -6082,15 +6200,36 @@ bool static LoadBlockIndexDB()
pindex->nChainSaplingValue = boost::none;
}
} else {
pindex->nChainTx = 0;
pindex->nChainSproutValue = boost::none;
pindex->nChainSaplingValue = boost::none;
pindex->nChainTx = 0;
if (fZindex) {
pindex->nChainNotarizations = 0;
pindex->nChainShieldedTx = 0;
pindex->nChainFullyShieldedTx = 0;
pindex->nChainShieldedPayments = 0;
pindex->nChainShieldingPayments = 0;
pindex->nChainDeshieldingTx = 0;
pindex->nChainDeshieldingPayments = 0;
pindex->nChainFullyShieldedTx = 0;
pindex->nChainFullyShieldedPayments = 0;
}
pindex->nChainSproutValue = boost::none;
pindex->nChainSaplingValue = boost::none;
mapBlocksUnlinked.insert(std::make_pair(pindex->pprev, pindex));
}
} else {
pindex->nChainTx = pindex->nTx;
pindex->nChainSproutValue = pindex->nSproutValue;
pindex->nChainSaplingValue = pindex->nSaplingValue;
pindex->nChainTx = pindex->nTx;
pindex->nChainSproutValue = pindex->nSproutValue;
pindex->nChainSaplingValue = pindex->nSaplingValue;
if (fZindex) {
pindex->nChainNotarizations = pindex->nNotarizations;
pindex->nChainShieldedTx = pindex->nShieldedTx;
pindex->nChainShieldedPayments = pindex->nShieldedPayments;
pindex->nChainShieldingTx = pindex->nShieldingTx;
pindex->nChainShieldingPayments = pindex->nShieldingPayments;
pindex->nChainDeshieldingTx = pindex->nDeshieldingTx;
pindex->nChainDeshieldingPayments = pindex->nDeshieldingPayments;
pindex->nChainFullyShieldedPayments = pindex->nFullyShieldedPayments;
}
}
}
// Construct in-memory chain of branch IDs.
@ -6168,10 +6307,15 @@ bool static LoadBlockIndexDB()
// Check whether we have a transaction index
pblocktree->ReadFlag("txindex", fTxIndex);
LogPrintf("%s: transaction index %s\n", __func__, fTxIndex ? "enabled" : "disabled");
// Check whether we have an address index
pblocktree->ReadFlag("addressindex", fAddressIndex);
LogPrintf("%s: address index %s\n", __func__, fAddressIndex ? "enabled" : "disabled");
// Check whether we have a shielded index
pblocktree->ReadFlag("zindex", fZindex);
LogPrintf("%s: shielded index %s\n", __func__, fZindex ? "enabled" : "disabled");
// Check whether we have a timestamp index
pblocktree->ReadFlag("timestampindex", fTimestampIndex);
LogPrintf("%s: timestamp index %s\n", __func__, fTimestampIndex ? "enabled" : "disabled");
@ -6535,17 +6679,22 @@ bool InitBlockIndex() {
// Use the provided setting for -txindex in the new database
fTxIndex = GetBoolArg("-txindex", true);
pblocktree->WriteFlag("txindex", fTxIndex);
// Use the provided setting for -addressindex in the new database
fAddressIndex = GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX);
pblocktree->WriteFlag("addressindex", fAddressIndex);
// Use the provided setting for -zindex in the new database
fZindex = GetBoolArg("-zindex", DEFAULT_SHIELDEDINDEX);
pblocktree->WriteFlag("zindex", fZindex);
// Use the provided setting for -timestampindex in the new database
fTimestampIndex = GetBoolArg("-timestampindex", DEFAULT_TIMESTAMPINDEX);
pblocktree->WriteFlag("timestampindex", fTimestampIndex);
fSpentIndex = GetBoolArg("-spentindex", DEFAULT_SPENTINDEX);
pblocktree->WriteFlag("spentindex", fSpentIndex);
fprintf(stderr,"fAddressIndex.%d/%d fSpentIndex.%d/%d\n",fAddressIndex,DEFAULT_ADDRESSINDEX,fSpentIndex,DEFAULT_SPENTINDEX);
fprintf(stderr,"fAddressIndex.%d/%d fSpentIndex.%d/%d fZindex.%d/%d\n",fAddressIndex,DEFAULT_ADDRESSINDEX,fSpentIndex,DEFAULT_SPENTINDEX,fZindex, DEFAULT_SHIELDEDINDEX );
LogPrintf("Initializing databases...\n");
}
// Only add the genesis block if not reindexing (in which case we reuse the one already on disk)
@ -6568,7 +6717,7 @@ bool InitBlockIndex() {
if (!ActivateBestChain(true, state, &block))
return error("LoadBlockIndex(): genesis block cannot be activated");
// Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
return FlushStateToDisk(state, FLUSH_STATE_ALWAYS);
else return(true);
} catch (const std::runtime_error& e) {
@ -7128,7 +7277,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
{
const CChainParams& chainparams = Params();
LogPrint("net", "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->id);
//if ( KOMODO_NSPV > 0 )
//if ( KOMODO_NSPV_SUPERLITE )
//if ( strCommand != "version" && strCommand != "verack" )
// fprintf(stderr, "recv: %s (%u bytes) peer=%d\n", SanitizeString(strCommand).c_str(), (int32_t)vRecv.size(), (int32_t)pfrom->GetId());
if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0)
@ -7303,7 +7452,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
{
pfrom->SetRecvVersion(min(pfrom->nVersion, PROTOCOL_VERSION));
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
if ( (pfrom->nServices & NODE_NSPV) == 0 )
{
@ -7513,7 +7662,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
}
else if (strCommand == "nSPV")
{
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
std::vector<uint8_t> payload;
vRecv >> payload;
@ -7521,7 +7670,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
}
return(true);
}
else if ( KOMODO_NSPV > 0 )
else if ( KOMODO_NSPV_SUPERLITE )
return(true);
else if (strCommand == "inv")
{
@ -8311,7 +8460,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
}
state.fShouldBan = false;
}
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
komodo_nSPV(pto);
return(true);
@ -8522,7 +8671,7 @@ extern "C" const char* getDataDir()
CMutableTransaction CreateNewContextualCMutableTransaction(const Consensus::Params& consensusParams, int nHeight)
{
CMutableTransaction mtx;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
mtx.fOverwintered = true;
mtx.nExpiryHeight = 0;

2
src/main.h

@ -125,6 +125,7 @@ static const int64_t DEFAULT_MAX_TIP_AGE = 24 * 60 * 60;
#define DEFAULT_ADDRESSINDEX (GetArg("-ac_cc",0) != 0 || GetArg("-ac_ccactivate",0) != 0)
#define DEFAULT_SPENTINDEX (GetArg("-ac_cc",0) != 0 || GetArg("-ac_ccactivate",0) != 0)
static const bool DEFAULT_TIMESTAMPINDEX = false;
static const bool DEFAULT_SHIELDEDINDEX = false;
static const unsigned int DEFAULT_DB_MAX_OPEN_FILES = 1000;
static const bool DEFAULT_DB_COMPRESSION = true;
@ -157,6 +158,7 @@ extern bool fImporting;
extern bool fReindex;
extern int nScriptCheckThreads;
extern bool fTxIndex;
extern bool fZindex;
extern bool fIsBareMultisigStd;
extern bool fCheckBlockIndex;
extern bool fCheckpointsEnabled;

9
src/net.cpp

@ -445,6 +445,13 @@ void CNode::CloseSocketDisconnect()
}
extern int32_t KOMODO_NSPV;
#ifndef KOMODO_NSPV_FULLNODE
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
#endif // !KOMODO_NSPV_FULLNODE
#ifndef KOMODO_NSPV_SUPERLITE
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
#endif // !KOMODO_NSPV_SUPERLITE
void CNode::PushVersion()
{
@ -1843,7 +1850,7 @@ bool StopNode()
for (int i=0; i<MAX_OUTBOUND_CONNECTIONS; i++)
semOutbound->post();
if (KOMODO_NSPV <= 0 && fAddressesInitialized)
if (KOMODO_NSPV_FULLNODE && fAddressesInitialized)
{
DumpAddresses();
fAddressesInitialized = false;

90
src/rpc/blockchain.cpp

@ -49,6 +49,7 @@
using namespace std;
extern int32_t KOMODO_INSYNC;
extern bool fZindex;
extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry);
void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex);
int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp);
@ -396,7 +397,7 @@ bool NSPV_inmempool(uint256 txid);
bool myIsutxo_spentinmempool(uint256 &spenttxid,int32_t &spentvini,uint256 txid,int32_t vout)
{
int32_t vini = 0;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
return(NSPV_spentinmempool(spenttxid,spentvini,txid,vout));
BOOST_FOREACH(const CTxMemPoolEntry &e,mempool.mapTx)
{
@ -420,7 +421,7 @@ bool myIsutxo_spentinmempool(uint256 &spenttxid,int32_t &spentvini,uint256 txid,
bool mytxid_inmempool(uint256 txid)
{
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
}
@ -1949,7 +1950,7 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp)
"{\n"
" \"time\": xxxxx, (numeric) The timestamp for the final block in the window in UNIX format.\n"
" \"txcount\": xxxxx, (numeric) The total number of transactions in the chain up to that point.\n"
" \"window_final_block_hash\": \"...\", (string) The hash of the final block in the window.\n"
" \"window_final_block_hash\": \"...\", (string) The hash of the final block in the window.\n"
" \"window_block_count\": xxxxx, (numeric) Size of the window in number of blocks.\n"
" \"window_tx_count\": xxxxx, (numeric) The number of transactions in the window. Only returned if \"window_block_count\" is > 0.\n"
" \"window_interval\": xxxxx, (numeric) The elapsed time in the window in seconds. Only returned if \"window_block_count\" is > 0.\n"
@ -1990,20 +1991,93 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp)
}
}
const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount);
int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast();
int nTxDiff = pindex->nChainTx - pindexPast->nChainTx;
const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount);
int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast();
int nTxDiff = pindex->nChainTx - pindexPast->nChainTx;
UniValue ret(UniValue::VOBJ);
ret.pushKV("time", (int64_t)pindex->nTime);
ret.pushKV("txcount", (int64_t)pindex->nChainTx);
if (fZindex) {
ret.pushKV("notarizations", (int64_t)pindex->nChainNotarizations);
ret.pushKV("shielded_txcount", (int64_t)pindex->nChainShieldedTx);
ret.pushKV("fully_shielded_txcount", (int64_t)pindex->nChainFullyShieldedTx);
ret.pushKV("deshielding_txcount", (int64_t)pindex->nChainDeshieldingTx);
ret.pushKV("shielding_txcount", (int64_t)pindex->nChainShieldingTx);
ret.pushKV("shielded_payments", (int64_t)pindex->nChainShieldedPayments);
ret.pushKV("fully_shielded_payments", (int64_t)pindex->nChainFullyShieldedPayments);
ret.pushKV("deshielding_payments", (int64_t)pindex->nChainDeshieldingPayments);
ret.pushKV("shielding_payments", (int64_t)pindex->nChainShieldingPayments);
}
ret.pushKV("window_final_block_hash", pindex->GetBlockHash().GetHex());
ret.pushKV("window_final_block_height", pindex->GetHeight());
ret.pushKV("window_block_count", blockcount);
if (blockcount > 0) {
ret.pushKV("window_tx_count", nTxDiff);
int64_t nPaymentsDiff = pindex->nChainPayments - pindexPast->nChainPayments;
int64_t nShieldedTxDiff = pindex->nChainShieldedTx - pindexPast->nChainShieldedTx;
int64_t nShieldingTxDiff = pindex->nChainShieldingTx - pindexPast->nChainShieldingTx;
int64_t nDeshieldingTxDiff = pindex->nChainDeshieldingTx - pindexPast->nChainDeshieldingTx;
int64_t nFullyShieldedTxDiff = pindex->nChainFullyShieldedTx - pindexPast->nChainFullyShieldedTx;
int64_t nShieldedPaymentsDiff = pindex->nChainShieldedPayments - pindexPast->nChainShieldedPayments;
int64_t nShieldingPaymentsDiff = pindex->nChainShieldingPayments - pindexPast->nChainShieldingPayments;
int64_t nDeshieldingPaymentsDiff = pindex->nChainDeshieldingPayments - pindexPast->nChainDeshieldingPayments;
int64_t nFullyShieldedPaymentsDiff = pindex->nChainFullyShieldedPayments - pindexPast->nChainFullyShieldedPayments;
unsigned int nNotarizationsDiff = pindex->nChainNotarizations - pindexPast->nChainNotarizations;
ret.pushKV("window_interval", nTimeDiff);
ret.pushKV("window_txcount", nTxDiff);
ret.pushKV("window_payments", nPaymentsDiff);
ret.pushKV("window_notarizations", (int) nNotarizationsDiff);
if (nTimeDiff > 0) {
ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff);
ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff);
if (fZindex) {
ret.pushKV("notarization_txrate", ((double)nNotarizationsDiff) / nTimeDiff);
ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / nTimeDiff);
ret.pushKV("fully_shielded_txrate", ((double)nFullyShieldedTxDiff) / nTimeDiff);
ret.pushKV("paymentrate", ((double)nPaymentsDiff) / nTimeDiff);
ret.pushKV("shielded_paymentrate", ((double)nShieldedPaymentsDiff) / nTimeDiff);
ret.pushKV("fully_shielded_paymentrate", ((double)nFullyShieldedPaymentsDiff) / nTimeDiff);
}
}
if (fZindex) {
ret.pushKV("window_fully_shielded_payments", nFullyShieldedPaymentsDiff);
ret.pushKV("window_shielded_payments", nShieldedPaymentsDiff);
ret.pushKV("window_shielding_payments", nShieldingPaymentsDiff);
ret.pushKV("window_deshielding_payments", nDeshieldingPaymentsDiff);
ret.pushKV("window_shielded_txcount", nShieldedTxDiff);
if (nTxDiff > 0) {
ret.pushKV("shielded_tx_percent", ((double)nShieldedTxDiff) / nTxDiff);
ret.pushKV("fully_shielded_tx_percent", ((double)nFullyShieldedTxDiff) / nTxDiff);
ret.pushKV("shielding_tx_percent", ((double)nShieldingTxDiff) / nTxDiff);
ret.pushKV("deshielding_tx_percent", ((double)nDeshieldingTxDiff) / nTxDiff);
}
if (nPaymentsDiff > 0) {
ret.pushKV("shielded_payments_percent", ((double)nShieldedPaymentsDiff) / nPaymentsDiff);
ret.pushKV("fully_shielded_payments_percent", ((double)nFullyShieldedPaymentsDiff) / nPaymentsDiff);
ret.pushKV("shielding_payments_percent", ((double)nShieldingPaymentsDiff) / nPaymentsDiff);
ret.pushKV("deshielding_payments_percent", ((double)nDeshieldingPaymentsDiff) / nPaymentsDiff);
}
// Shielded-only statistics
UniValue shielded(UniValue::VOBJ);
if (nShieldedTxDiff > 0) {
shielded.pushKV("fully_shielded_tx_percent", ((double)nFullyShieldedTxDiff) / nShieldedTxDiff );
shielded.pushKV("shielding_tx_percent", ((double)nShieldingTxDiff) / nShieldedTxDiff );
shielded.pushKV("deshielding_tx_percent", ((double)nDeshieldingTxDiff) / nShieldedTxDiff );
}
if (nShieldedPaymentsDiff > 0) {
shielded.pushKV("fully_shielded_payments_percent", ((double)nFullyShieldedPaymentsDiff) / nShieldedPaymentsDiff );
shielded.pushKV("shielding_payments_percent", ((double)nShieldingPaymentsDiff) / nShieldedPaymentsDiff );
shielded.pushKV("deshielding_payments_percent", ((double)nDeshieldingPaymentsDiff) / nShieldedPaymentsDiff );
}
if(nShieldedTxDiff+nShieldedPaymentsDiff > 0)
ret.pushKV("shielded_only", shielded);
}
}

1
src/rpc/client.cpp

@ -151,6 +151,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
{ "z_mergetoaddress", 2},
{ "z_mergetoaddress", 3},
{ "z_mergetoaddress", 4},
{ "z_viewtransaction", 1},
{ "z_sendmany", 1},
{ "z_sendmany", 2},
{ "z_sendmany", 3},

2
src/rpc/misc.cpp

@ -243,7 +243,7 @@ UniValue getinfo(const UniValue& params, bool fHelp)
obj.push_back(Pair("prevMoMheight", prevMoMheight));
obj.push_back(Pair("notarizedhash", notarized_hash.ToString()));
obj.push_back(Pair("notarizedtxid", notarized_desttxid.ToString()));
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
txid_height = notarizedtxid_height(ASSETCHAINS_SYMBOL[0] != 0 ? (char *)"KMD" : (char *)"BTC",(char *)notarized_desttxid.ToString().c_str(),&kmdnotarized_height);
if ( txid_height > 0 )

4
src/rpc/rawtransaction.cpp

@ -374,7 +374,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry)
const CTxOut& txout = tx.vout[i];
UniValue out(UniValue::VOBJ);
out.push_back(Pair("value", ValueFromAmount(txout.nValue)));
if ( KOMODO_NSPV <= 0 && ASSETCHAINS_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 )
if ( KOMODO_NSPV_FULLNODE && ASSETCHAINS_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 )
{
int64_t interest; int32_t txheight; uint32_t locktime;
interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight());
@ -1366,7 +1366,7 @@ UniValue sendrawtransaction(const UniValue& params, bool fHelp)
bool fOverrideFees = false;
if (params.size() > 1)
fOverrideFees = params[1].get_bool();
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
CCoinsViewCache &view = *pcoinsTip;
const CCoins* existingCoins = view.AccessCoins(hashTx);

15
src/script/sign.cpp

@ -37,6 +37,13 @@ typedef vector<unsigned char> valtype;
extern uint8_t ASSETCHAINS_TXPOW;
extern char NSPV_wifstr[],NSPV_pubkeystr[];
extern int32_t KOMODO_NSPV;
#ifndef KOMODO_NSPV_FULLNODE
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
#endif // !KOMODO_NSPV_FULLNODE
#ifndef KOMODO_NSPV_SUPERLITE
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
#endif // !KOMODO_NSPV_SUPERLITE
uint256 SIG_TXHASH;
TransactionSignatureCreator::TransactionSignatureCreator(const CKeyStore* keystoreIn, const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, int nHashTypeIn) : BaseSignatureCreator(keystoreIn), txTo(txToIn), nIn(nInIn), nHashType(nHashTypeIn), amount(amountIn), checker(txTo, nIn, amountIn) {}
@ -53,7 +60,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector<unsigned char>& vchSig,
}
}
SIG_TXHASH = hash;
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
key = DecodeSecret(NSPV_wifstr);
else if (pprivKey)
key = *pprivKey;
@ -74,7 +81,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector<unsigned char>& vchSig,
return false;
}
vchSig = CCSigVec(cc);
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
memset((uint8_t *)key.begin(),0,32);
return true;
}
@ -100,7 +107,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector<unsigned char>& vchSig,
}
vchSig.push_back((unsigned char)nHashType);
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
memset((uint8_t *)key.begin(),0,32);
return true;
}
@ -381,7 +388,7 @@ static bool SignStep(const BaseSignatureCreator& creator, const CScript& scriptP
}
else
{
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
{
CPubKey vch;
creator.KeyStore().GetPubKey(keyID, vch);

43
src/txdb.cpp

@ -702,24 +702,33 @@ bool CBlockTreeDB::LoadBlockIndexGuts()
CBlockIndex* pindexNew = InsertBlockIndex(diskindex.GetBlockHash());
pindexNew->pprev = InsertBlockIndex(diskindex.hashPrev);
pindexNew->SetHeight(diskindex.GetHeight());
pindexNew->nFile = diskindex.nFile;
pindexNew->nDataPos = diskindex.nDataPos;
pindexNew->nUndoPos = diskindex.nUndoPos;
pindexNew->hashSproutAnchor = diskindex.hashSproutAnchor;
pindexNew->nVersion = diskindex.nVersion;
pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot;
pindexNew->nFile = diskindex.nFile;
pindexNew->nDataPos = diskindex.nDataPos;
pindexNew->nUndoPos = diskindex.nUndoPos;
pindexNew->hashSproutAnchor = diskindex.hashSproutAnchor;
pindexNew->nVersion = diskindex.nVersion;
pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot;
pindexNew->hashFinalSaplingRoot = diskindex.hashFinalSaplingRoot;
pindexNew->nTime = diskindex.nTime;
pindexNew->nBits = diskindex.nBits;
pindexNew->nNonce = diskindex.nNonce;
pindexNew->nSolution = diskindex.nSolution;
pindexNew->nStatus = diskindex.nStatus;
pindexNew->nCachedBranchId = diskindex.nCachedBranchId;
pindexNew->nTx = diskindex.nTx;
pindexNew->nSproutValue = diskindex.nSproutValue;
pindexNew->nSaplingValue = diskindex.nSaplingValue;
pindexNew->segid = diskindex.segid;
pindexNew->nNotaryPay = diskindex.nNotaryPay;
pindexNew->nTime = diskindex.nTime;
pindexNew->nBits = diskindex.nBits;
pindexNew->nNonce = diskindex.nNonce;
pindexNew->nSolution = diskindex.nSolution;
pindexNew->nStatus = diskindex.nStatus;
pindexNew->nCachedBranchId = diskindex.nCachedBranchId;
pindexNew->nTx = diskindex.nTx;
pindexNew->nShieldedTx = diskindex.nShieldedTx;
pindexNew->nShieldedPayments = diskindex.nShieldedPayments;
pindexNew->nShieldingTx = diskindex.nShieldingTx;
pindexNew->nShieldingPayments = diskindex.nShieldingPayments;
pindexNew->nDeshieldingTx = diskindex.nDeshieldingTx;
pindexNew->nDeshieldingPayments = diskindex.nDeshieldingPayments;
pindexNew->nFullyShieldedTx = diskindex.nFullyShieldedTx;
pindexNew->nFullyShieldedPayments = diskindex.nFullyShieldedPayments;
pindexNew->nSproutValue = diskindex.nSproutValue;
pindexNew->nSaplingValue = diskindex.nSaplingValue;
pindexNew->segid = diskindex.segid;
pindexNew->nNotaryPay = diskindex.nNotaryPay;
//fprintf(stderr,"loadguts ht.%d\n",pindexNew->GetHeight());
// Consistency checks
auto header = pindexNew->GetBlockHeader();

37
src/wallet/rpcdump.cpp

@ -973,10 +973,17 @@ UniValue z_exportviewingkey(const UniValue& params, bool fHelp)
}
extern int32_t KOMODO_NSPV;
#ifndef KOMODO_NSPV_FULLNODE
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
#endif // !KOMODO_NSPV_FULLNODE
#ifndef KOMODO_NSPV_SUPERLITE
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
#endif // !KOMODO_NSPV_SUPERLITE
uint256 zeroid;
UniValue NSPV_getinfo_req(int32_t reqht);
UniValue NSPV_login(char *wifstr);
UniValue NSPV_logout();
UniValue NSPV_addresstxids(char *coinaddr,int32_t CCflag,int32_t skipcount,int32_t filter);
UniValue NSPV_addresstxids(char *coinaddr,int32_t CCflag,int32_t skipcount,int32_t filter, uint256 filtertxid);
UniValue NSPV_addressutxos(char *coinaddr,int32_t CCflag,int32_t skipcount,int32_t filter);
UniValue NSPV_mempooltxids(char *coinaddr,int32_t CCflag,uint8_t funcid,uint256 txid,int32_t vout);
UniValue NSPV_broadcast(char *hex);
@ -993,7 +1000,7 @@ UniValue nspv_getinfo(const UniValue& params, bool fHelp)
int32_t reqht = 0;
if ( fHelp || params.size() > 1 )
throw runtime_error("nspv_getinfo [hdrheight]\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
if ( params.size() == 1 )
reqht = atoi((char *)params[0].get_str().c_str());
@ -1004,7 +1011,7 @@ UniValue nspv_logout(const UniValue& params, bool fHelp)
{
if ( fHelp || params.size() != 0 )
throw runtime_error("nspv_logout\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
return(NSPV_logout());
}
@ -1013,7 +1020,7 @@ UniValue nspv_login(const UniValue& params, bool fHelp)
{
if ( fHelp || params.size() != 1 )
throw runtime_error("nspv_login wif\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
return(NSPV_login((char *)params[0].get_str().c_str()));
}
@ -1023,7 +1030,7 @@ UniValue nspv_listunspent(const UniValue& params, bool fHelp)
int32_t skipcount = 0,CCflag = 0;
if ( fHelp || params.size() > 3 )
throw runtime_error("nspv_listunspent [address [isCC [skipcount]]]\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
if ( params.size() == 0 )
{
@ -1048,7 +1055,7 @@ UniValue nspv_mempool(const UniValue& params, bool fHelp)
memset(&txid,0,sizeof(txid));
if ( fHelp || params.size() > 5 )
throw runtime_error("nspv_mempool func(0 all, 1 address recv, 2 txid/vout spent, 3 txid inmempool) address isCC [txid vout]]]\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
funcid = atoi((char *)params[0].get_str().c_str());
coinaddr = (char *)params[1].get_str().c_str();
@ -1068,12 +1075,12 @@ UniValue nspv_listtransactions(const UniValue& params, bool fHelp)
int32_t skipcount = 0,CCflag = 0;
if ( fHelp || params.size() > 3 )
throw runtime_error("nspv_listtransactions [address [isCC [skipcount]]]\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
if ( params.size() == 0 )
{
if ( NSPV_address.size() != 0 )
return(NSPV_addresstxids((char *)NSPV_address.c_str(),0,0,0));
return(NSPV_addresstxids((char *)NSPV_address.c_str(),0,0,0,zeroid));
else throw runtime_error("nspv_listtransactions [address [isCC [skipcount]]]\n");
}
if ( params.size() >= 1 )
@ -1083,7 +1090,7 @@ UniValue nspv_listtransactions(const UniValue& params, bool fHelp)
if ( params.size() == 3 )
skipcount = atoi((char *)params[2].get_str().c_str());
//fprintf(stderr,"call txids cc.%d skip.%d\n",CCflag,skipcount);
return(NSPV_addresstxids((char *)params[0].get_str().c_str(),CCflag,skipcount,0));
return(NSPV_addresstxids((char *)params[0].get_str().c_str(),CCflag,skipcount,0,zeroid));
}
else throw runtime_error("nspv_listtransactions [address [isCC [skipcount]]]\n");
}
@ -1093,7 +1100,7 @@ UniValue nspv_spentinfo(const UniValue& params, bool fHelp)
uint256 txid; int32_t vout;
if ( fHelp || params.size() != 2 )
throw runtime_error("nspv_spentinfo txid vout\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
txid = Parseuint256((char *)params[0].get_str().c_str());
vout = atoi((char *)params[1].get_str().c_str());
@ -1105,7 +1112,7 @@ UniValue nspv_notarizations(const UniValue& params, bool fHelp)
int32_t height;
if ( fHelp || params.size() != 1 )
throw runtime_error("nspv_notarizations height\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
height = atoi((char *)params[0].get_str().c_str());
return(NSPV_notarizations(height));
@ -1116,7 +1123,7 @@ UniValue nspv_hdrsproof(const UniValue& params, bool fHelp)
int32_t prevheight,nextheight;
if ( fHelp || params.size() != 2 )
throw runtime_error("nspv_hdrsproof prevheight nextheight\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
prevheight = atoi((char *)params[0].get_str().c_str());
nextheight = atoi((char *)params[1].get_str().c_str());
@ -1128,7 +1135,7 @@ UniValue nspv_txproof(const UniValue& params, bool fHelp)
uint256 txid; int32_t height;
if ( fHelp || params.size() != 2 )
throw runtime_error("nspv_txproof txid height\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
txid = Parseuint256((char *)params[0].get_str().c_str());
height = atoi((char *)params[1].get_str().c_str());
@ -1140,7 +1147,7 @@ UniValue nspv_spend(const UniValue& params, bool fHelp)
uint64_t satoshis;
if ( fHelp || params.size() != 2 )
throw runtime_error("nspv_spend address amount\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
if ( NSPV_address.size() == 0 )
throw runtime_error("to nspv_send you need an active nspv_login\n");
@ -1155,7 +1162,7 @@ UniValue nspv_broadcast(const UniValue& params, bool fHelp)
{
if ( fHelp || params.size() != 1 )
throw runtime_error("nspv_broadcast hex\n");
if ( KOMODO_NSPV <= 0 )
if ( KOMODO_NSPV_FULLNODE )
throw runtime_error("-nSPV=1 must be set to use nspv\n");
return(NSPV_broadcast((char *)params[0].get_str().c_str()));
}

220
src/wallet/rpcwallet.cpp

@ -53,6 +53,7 @@
#include <stdint.h>
#include <boost/assign/list_of.hpp>
#include <utf8.h>
#include <univalue.h>
@ -162,7 +163,7 @@ void OS_randombytes(unsigned char *x,long xlen);
UniValue getnewaddress(const UniValue& params, bool fHelp)
{
if ( KOMODO_NSPV <= 0 && !EnsureWalletIsAvailable(fHelp) )
if ( KOMODO_NSPV_FULLNODE && !EnsureWalletIsAvailable(fHelp) )
return NullUniValue;
if (fHelp || params.size() > 1)
@ -178,7 +179,7 @@ UniValue getnewaddress(const UniValue& params, bool fHelp)
+ HelpExampleRpc("getnewaddress", "")
);
if ( KOMODO_NSPV > 0 )
if ( KOMODO_NSPV_SUPERLITE )
{
UniValue result(UniValue::VOBJ); uint8_t priv32[32];
#ifndef __WIN32
@ -2974,7 +2975,7 @@ UniValue listunspent(const UniValue& params, bool fHelp)
uint64_t komodo_interestsum()
{
#ifdef ENABLE_WALLET
if ( ASSETCHAINS_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && KOMODO_NSPV <= 0 )
if ( ASSETCHAINS_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && KOMODO_NSPV_FULLNODE )
{
uint64_t interest,sum = 0; int32_t txheight; uint32_t locktime;
vector<COutput> vecOutputs;
@ -4121,6 +4122,216 @@ UniValue z_gettotalbalance(const UniValue& params, bool fHelp)
return result;
}
UniValue z_viewtransaction(const UniValue& params, bool fHelp)
{
if (!EnsureWalletIsAvailable(fHelp))
return NullUniValue;
if (fHelp || params.size() != 1)
throw runtime_error(
"z_viewtransaction \"txid\"\n"
"\nGet detailed shielded information about in-wallet transaction <txid>\n"
"\nArguments:\n"
"1. \"txid\" (string, required) The transaction id\n"
"\nResult:\n"
"{\n"
" \"txid\" : \"transactionid\", (string) The transaction id\n"
" \"spends\" : [\n"
" {\n"
" \"type\" : \"sprout|sapling\", (string) The type of address\n"
" \"js\" : n, (numeric, sprout) the index of the JSDescription within vJoinSplit\n"
" \"jsSpend\" : n, (numeric, sprout) the index of the spend within the JSDescription\n"
" \"spend\" : n, (numeric, sapling) the index of the spend within vShieldedSpend\n"
" \"txidPrev\" : \"transactionid\", (string) The id for the transaction this note was created in\n"
" \"jsPrev\" : n, (numeric, sprout) the index of the JSDescription within vJoinSplit\n"
" \"jsOutputPrev\" : n, (numeric, sprout) the index of the output within the JSDescription\n"
" \"outputPrev\" : n, (numeric, sapling) the index of the output within the vShieldedOutput\n"
" \"address\" : \"zcashaddress\", (string) The Zcash address involved in the transaction\n"
" \"value\" : x.xxx (numeric) The amount in " + CURRENCY_UNIT + "\n"
" \"valueZat\" : xxxx (numeric) The amount in zatoshis\n"
" }\n"
" ,...\n"
" ],\n"
" \"outputs\" : [\n"
" {\n"
" \"type\" : \"sprout|sapling\", (string) The type of address\n"
" \"js\" : n, (numeric, sprout) the index of the JSDescription within vJoinSplit\n"
" \"jsOutput\" : n, (numeric, sprout) the index of the output within the JSDescription\n"
" \"output\" : n, (numeric, sapling) the index of the output within the vShieldedOutput\n"
" \"address\" : \"zcashaddress\", (string) The Zcash address involved in the transaction\n"
" \"recovered\" : true|false (boolean, sapling) True if the output is not for an address in the wallet\n"
" \"value\" : x.xxx (numeric) The amount in " + CURRENCY_UNIT + "\n"
" \"valueZat\" : xxxx (numeric) The amount in zatoshis\n"
" \"memo\" : \"hexmemo\", (string) Hexademical string representation of the memo field\n"
" \"memoStr\" : \"memo\", (string) Only returned if memo contains valid UTF-8 text.\n"
" }\n"
" ,...\n"
" ],\n"
"}\n"
"\nExamples:\n"
+ HelpExampleCli("z_viewtransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"")
+ HelpExampleCli("z_viewtransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\" true")
+ HelpExampleRpc("z_viewtransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"")
);
LOCK2(cs_main, pwalletMain->cs_wallet);
uint256 hash;
hash.SetHex(params[0].get_str());
UniValue entry(UniValue::VOBJ);
if (!pwalletMain->mapWallet.count(hash))
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid or non-wallet transaction id");
const CWalletTx& wtx = pwalletMain->mapWallet[hash];
entry.push_back(Pair("txid", hash.GetHex()));
UniValue spends(UniValue::VARR);
UniValue outputs(UniValue::VARR);
// Sprout spends
for (size_t i = 0; i < wtx.vjoinsplit.size(); ++i) {
for (size_t j = 0; j < wtx.vjoinsplit[i].nullifiers.size(); ++j) {
auto nullifier = wtx.vjoinsplit[i].nullifiers[j];
// Fetch the note that is being spent, if ours
auto res = pwalletMain->mapSproutNullifiersToNotes.find(nullifier);
if (res == pwalletMain->mapSproutNullifiersToNotes.end()) {
continue;
}
auto jsop = res->second;
auto wtxPrev = pwalletMain->mapWallet.at(jsop.hash);
auto decrypted = wtxPrev.DecryptSproutNote(jsop);
auto notePt = decrypted.first;
auto pa = decrypted.second;
UniValue entry(UniValue::VOBJ);
entry.push_back(Pair("type", ADDR_TYPE_SPROUT));
entry.push_back(Pair("js", (int)i));
entry.push_back(Pair("jsSpend", (int)j));
entry.push_back(Pair("txidPrev", jsop.hash.GetHex()));
entry.push_back(Pair("jsPrev", (int)jsop.js));
entry.push_back(Pair("jsOutputPrev", (int)jsop.n));
entry.push_back(Pair("address", EncodePaymentAddress(pa)));
entry.push_back(Pair("value", ValueFromAmount(notePt.value())));
entry.push_back(Pair("valueZat", notePt.value()));
outputs.push_back(entry);
}
}
// Sprout outputs
for (auto & pair : wtx.mapSproutNoteData) {
JSOutPoint jsop = pair.first;
auto decrypted = wtx.DecryptSproutNote(jsop);
auto notePt = decrypted.first;
auto pa = decrypted.second;
auto memo = notePt.memo();
UniValue entry(UniValue::VOBJ);
entry.push_back(Pair("type", ADDR_TYPE_SPROUT));
entry.push_back(Pair("js", (int)jsop.js));
entry.push_back(Pair("jsOutput", (int)jsop.n));
entry.push_back(Pair("address", EncodePaymentAddress(pa)));
entry.push_back(Pair("value", ValueFromAmount(notePt.value())));
entry.push_back(Pair("valueZat", notePt.value()));
entry.push_back(Pair("memo", HexStr(memo)));
if (memo[0] <= 0xf4) {
auto end = std::find_if(memo.rbegin(), memo.rend(), [](unsigned char v) { return v != 0; });
std::string memoStr(memo.begin(), end.base());
if (utf8::is_valid(memoStr)) {
entry.push_back(Pair("memoStr", memoStr));
}
}
outputs.push_back(entry);
}
// Sapling spends
std::set<uint256> ovks;
for (size_t i = 0; i < wtx.vShieldedSpend.size(); ++i) {
auto spend = wtx.vShieldedSpend[i];
// Fetch the note that is being spent
auto res = pwalletMain->mapSaplingNullifiersToNotes.find(spend.nullifier);
if (res == pwalletMain->mapSaplingNullifiersToNotes.end()) {
continue;
}
auto op = res->second;
auto wtxPrev = pwalletMain->mapWallet.at(op.hash);
auto decrypted = wtxPrev.DecryptSaplingNote(op).get();
auto notePt = decrypted.first;
auto pa = decrypted.second;
// Store the OutgoingViewingKey for recovering outputs
libzcash::SaplingFullViewingKey fvk;
assert(pwalletMain->GetSaplingFullViewingKey(wtxPrev.mapSaplingNoteData.at(op).ivk, fvk));
ovks.insert(fvk.ovk);
UniValue entry(UniValue::VOBJ);
entry.push_back(Pair("type", ADDR_TYPE_SAPLING));
entry.push_back(Pair("spend", (int)i));
entry.push_back(Pair("txidPrev", op.hash.GetHex()));
entry.push_back(Pair("outputPrev", (int)op.n));
entry.push_back(Pair("address", EncodePaymentAddress(pa)));
entry.push_back(Pair("value", ValueFromAmount(notePt.value())));
entry.push_back(Pair("valueZat", notePt.value()));
spends.push_back(entry);
}
// Sapling outputs
for (uint32_t i = 0; i < wtx.vShieldedOutput.size(); ++i) {
auto op = SaplingOutPoint(hash, i);
SaplingNotePlaintext notePt;
SaplingPaymentAddress pa;
bool isRecovered;
auto decrypted = wtx.DecryptSaplingNote(op);
if (decrypted) {
notePt = decrypted->first;
pa = decrypted->second;
isRecovered = false;
} else {
// Try recovering the output
auto recovered = wtx.RecoverSaplingNote(op, ovks);
if (recovered) {
notePt = recovered->first;
pa = recovered->second;
isRecovered = true;
} else {
// Unreadable
continue;
}
}
auto memo = notePt.memo();
UniValue entry(UniValue::VOBJ);
entry.push_back(Pair("type", ADDR_TYPE_SAPLING));
entry.push_back(Pair("output", (int)op.n));
entry.push_back(Pair("recovered", isRecovered));
entry.push_back(Pair("address", EncodePaymentAddress(pa)));
entry.push_back(Pair("value", ValueFromAmount(notePt.value())));
entry.push_back(Pair("valueZat", notePt.value()));
entry.push_back(Pair("memo", HexStr(memo)));
if (memo[0] <= 0xf4) {
auto end = std::find_if(memo.rbegin(), memo.rend(), [](unsigned char v) { return v != 0; });
std::string memoStr(memo.begin(), end.base());
if (utf8::is_valid(memoStr)) {
entry.push_back(Pair("memoStr", memoStr));
}
}
outputs.push_back(entry);
}
entry.push_back(Pair("spends", spends));
entry.push_back(Pair("outputs", outputs));
return entry;
}
UniValue z_getoperationresult(const UniValue& params, bool fHelp)
{
if (!EnsureWalletIsAvailable(fHelp))
@ -7002,7 +7213,7 @@ UniValue faucetfund(const UniValue& params, bool fHelp)
if ( fHelp || params.size() > 1 )
throw runtime_error("faucetfund amount\n");
funds = atof(params[0].get_str().c_str()) * COIN + 0.00000000499999;
if ( (0) && KOMODO_NSPV > 0 )
if ( (0) && KOMODO_NSPV_SUPERLITE )
{
char coinaddr[64]; struct CCcontract_info *cp,C; CTxOut v;
cp = CCinit(&C,EVAL_FAUCET);
@ -8287,6 +8498,7 @@ static const CRPCCommand commands[] =
{ "wallet", "z_importviewingkey", &z_importviewingkey, true },
{ "wallet", "z_exportwallet", &z_exportwallet, true },
{ "wallet", "z_importwallet", &z_importwallet, true },
{ "wallet", "z_viewtransaction", &z_viewtransaction, true },
// TODO: rearrange into another category
{ "disclosure", "z_getpaymentdisclosure", &z_getpaymentdisclosure, true },
{ "disclosure", "z_validatepaymentdisclosure", &z_validatepaymentdisclosure, true }

101
src/wallet/wallet.cpp

@ -2487,6 +2487,107 @@ void CWalletTx::SetSaplingNoteData(mapSaplingNoteData_t &noteData)
}
}
std::pair<SproutNotePlaintext, SproutPaymentAddress> CWalletTx::DecryptSproutNote(
JSOutPoint jsop) const
{
LOCK(pwallet->cs_wallet);
auto nd = this->mapSproutNoteData.at(jsop);
SproutPaymentAddress pa = nd.address;
// Get cached decryptor
ZCNoteDecryption decryptor;
if (!pwallet->GetNoteDecryptor(pa, decryptor)) {
// Note decryptors are created when the wallet is loaded, so it should always exist
throw std::runtime_error(strprintf(
"Could not find note decryptor for payment address %s",
EncodePaymentAddress(pa)));
}
auto hSig = this->vjoinsplit[jsop.js].h_sig(*pzcashParams, this->joinSplitPubKey);
try {
SproutNotePlaintext plaintext = SproutNotePlaintext::decrypt(
decryptor,
this->vjoinsplit[jsop.js].ciphertexts[jsop.n],
this->vjoinsplit[jsop.js].ephemeralKey,
hSig,
(unsigned char) jsop.n);
return std::make_pair(plaintext, pa);
} catch (const note_decryption_failed &err) {
// Couldn't decrypt with this spending key
throw std::runtime_error(strprintf(
"Could not decrypt note for payment address %s",
EncodePaymentAddress(pa)));
} catch (const std::exception &exc) {
// Unexpected failure
throw std::runtime_error(strprintf(
"Error while decrypting note for payment address %s: %s",
EncodePaymentAddress(pa), exc.what()));
}
}
boost::optional<std::pair<
SaplingNotePlaintext,
SaplingPaymentAddress>> CWalletTx::DecryptSaplingNote(SaplingOutPoint op) const
{
// Check whether we can decrypt this SaplingOutPoint
if (this->mapSaplingNoteData.count(op) == 0) {
return boost::none;
}
auto output = this->vShieldedOutput[op.n];
auto nd = this->mapSaplingNoteData.at(op);
auto maybe_pt = SaplingNotePlaintext::decrypt(
output.encCiphertext,
nd.ivk,
output.ephemeralKey,
output.cm);
assert(static_cast<bool>(maybe_pt));
auto notePt = maybe_pt.get();
auto maybe_pa = nd.ivk.address(notePt.d);
assert(static_cast<bool>(maybe_pa));
auto pa = maybe_pa.get();
return std::make_pair(notePt, pa);
}
boost::optional<std::pair<
SaplingNotePlaintext,
SaplingPaymentAddress>> CWalletTx::RecoverSaplingNote(
SaplingOutPoint op, std::set<uint256>& ovks) const
{
auto output = this->vShieldedOutput[op.n];
for (auto ovk : ovks) {
auto outPt = SaplingOutgoingPlaintext::decrypt(
output.outCiphertext,
ovk,
output.cv,
output.cm,
output.ephemeralKey);
if (!outPt) {
continue;
}
auto maybe_pt = SaplingNotePlaintext::decrypt(
output.encCiphertext,
output.ephemeralKey,
outPt->esk,
outPt->pk_d,
output.cm);
assert(static_cast<bool>(maybe_pt));
auto notePt = maybe_pt.get();
return std::make_pair(notePt, SaplingPaymentAddress(notePt.d, outPt->pk_d));
}
// Couldn't recover with any of the provided OutgoingViewingKeys
return boost::none;
}
int64_t CWalletTx::GetTxTime() const
{
int64_t n = nTimeSmart;

10
src/wallet/wallet.h

@ -567,6 +567,16 @@ public:
void SetSproutNoteData(mapSproutNoteData_t &noteData);
void SetSaplingNoteData(mapSaplingNoteData_t &noteData);
std::pair<libzcash::SproutNotePlaintext, libzcash::SproutPaymentAddress> DecryptSproutNote(
JSOutPoint jsop) const;
boost::optional<std::pair<
libzcash::SaplingNotePlaintext,
libzcash::SaplingPaymentAddress>> DecryptSaplingNote(SaplingOutPoint op) const;
boost::optional<std::pair<
libzcash::SaplingNotePlaintext,
libzcash::SaplingPaymentAddress>> RecoverSaplingNote(
SaplingOutPoint op, std::set<uint256>& ovks) const;
//! filter decides which addresses will count towards the debit
CAmount GetDebit(const isminefilter& filter) const;
CAmount GetCredit(const isminefilter& filter) const;

50
src/zcash/Note.cpp

@ -173,15 +173,21 @@ boost::optional<SaplingOutgoingPlaintext> SaplingOutgoingPlaintext::decrypt(
}
// Deserialize from the plaintext
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
try {
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
SaplingOutgoingPlaintext ret;
ss >> ret;
SaplingOutgoingPlaintext ret;
ss >> ret;
assert(ss.size() == 0);
assert(ss.size() == 0);
return ret;
return ret;
} catch (const boost::thread_interrupted&) {
throw;
} catch (...) {
return boost::none;
}
}
boost::optional<SaplingNotePlaintext> SaplingNotePlaintext::decrypt(
@ -197,13 +203,17 @@ boost::optional<SaplingNotePlaintext> SaplingNotePlaintext::decrypt(
}
// Deserialize from the plaintext
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
SaplingNotePlaintext ret;
ss >> ret;
assert(ss.size() == 0);
try {
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
ss >> ret;
assert(ss.size() == 0);
} catch (const boost::thread_interrupted&) {
throw;
} catch (...) {
return boost::none;
}
uint256 pk_d;
if (!librustzcash_ivk_to_pkd(ivk.begin(), ret.d.data(), pk_d.begin())) {
@ -243,11 +253,17 @@ boost::optional<SaplingNotePlaintext> SaplingNotePlaintext::decrypt(
}
// Deserialize from the plaintext
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
SaplingNotePlaintext ret;
ss >> ret;
try {
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
ss << pt.get();
ss >> ret;
assert(ss.size() == 0);
} catch (const boost::thread_interrupted&) {
throw;
} catch (...) {
return boost::none;
}
uint256 cmu_expected;
if (!librustzcash_sapling_compute_cm(
@ -265,8 +281,6 @@ boost::optional<SaplingNotePlaintext> SaplingNotePlaintext::decrypt(
return boost::none;
}
assert(ss.size() == 0);
return ret;
}

432
zcutil/VerusCoin.xml

@ -1,432 +0,0 @@
<project>
<shortName>VerusCoin</shortName>
<fullName>VerusCoin</fullName>
<version>0.3.12</version>
<installerFilename>${product_shortname}-v${product_version}-${platform_name}-installer.${platform_exec_suffix}</installerFilename>
<licenseFile>../COPYING</licenseFile>
<leftImage>../assets/imgs/VRSC_256x256.png</leftImage>
<logoImage>../assets/imgs/VRSC_256x256.png</logoImage>
<splashImage>../assets/imgs/VRSC_256x256.png</splashImage>
<allowLanguageSelection>1</allowLanguageSelection>
<componentList>
<componentGroup>
<name>VerusCoin</name>
<description>VerusCoin CLI</description>
<canBeEdited>1</canBeEdited>
<downloadable>1</downloadable>
<selected>1</selected>
<show>1</show>
<componentList>
<component>
<name>Agama</name>
<description>Verus-Enhanced Agama Wallet</description>
<canBeEdited>1</canBeEdited>
<downloadable>1</downloadable>
<selected>1</selected>
<show>1</show>
<desktopShortcutList>
<shortcut>
<comment>Start Agama App</comment>
<exec></exec>
<icon>../assets/icons/agama_icons/256x256.png</icon>
<name>Agama App</name>
<path></path>
<platforms>all</platforms>
<runAsAdmin>0</runAsAdmin>
<runInTerminal>0</runInTerminal>
<windowsExec>${installdir}/Agama/Agama-win32-x64/Agama.exe</windowsExec>
<windowsExecArgs></windowsExecArgs>
<windowsIcon></windowsIcon>
<windowsPath>${windows_folder_common_programs}/</windowsPath>
</shortcut>
</desktopShortcutList>
<folderList>
<folder>
<description>Verus-Enhanced Agama Wallet</description>
<destination>${installdir}/Agama</destination>
<name>Agama</name>
<platforms>all</platforms>
<distributionFileList>
<distributionDirectory>
<origin>../Agama-win32-x64</origin>
</distributionDirectory>
</distributionFileList>
</folder>
</folderList>
</component>
</componentList>
<folderList>
<folder>
<description>Program Files</description>
<destination>${installdir}</destination>
<name>programfiles</name>
<platforms>all</platforms>
<shortcutList>
<shortcut>
<comment>Uninstall</comment>
<exec>${installdir}/${uninstallerName}</exec>
<icon></icon>
<name>Uninstall ${product_fullname}</name>
<path>${installdir}</path>
<platforms>all</platforms>
<runAsAdmin>0</runAsAdmin>
<runInTerminal>0</runInTerminal>
<windowsExec>${installdir}/${uninstallerName}.exe</windowsExec>
<windowsExecArgs></windowsExecArgs>
<windowsIcon></windowsIcon>
<windowsPath>${installdir}</windowsPath>
</shortcut>
</shortcutList>
</folder>
<folder>
<description>VerusCoin</description>
<destination>${installdir}/</destination>
<name>VerusCoin</name>
<platforms>all</platforms>
<distributionFileList>
<distributionDirectory>
<origin>../verus-cli</origin>
</distributionDirectory>
</distributionFileList>
</folder>
</folderList>
</componentGroup>
</componentList>
<preInstallationActionList>
<registryGetMatch>
<key>HKEY_LOCAL_MACHINE\SOFTWARE\${project.shortname}</key>
<name>uninstaller_path</name>
<variable>uninstaller_path</variable>
</registryGetMatch>
<setInstallerVariable>
<name>previous_installation_exists</name>
<value>1</value>
<ruleList>
<fileTest condition="exists" path="${uninstaller_path}"/>
</ruleList>
</setInstallerVariable>
</preInstallationActionList>
<readyToInstallActionList>
<runProgram>
<program>${uninstaller_path}</program>
<programArguments></programArguments>
<ruleList>
<compareValues>
<logic>equals</logic>
<value1>${previous_installation_exists}</value1>
<value2>1</value2>
</compareValues>
</ruleList>
</runProgram>
<deleteFile>
<explanation>Deleting user data</explanation>
<path>${windows_folder_appdata}/Agama</path>
<progressText>Deleting user data</progressText>
<ruleList>
<compareValues>
<logic>equals</logic>
<value1>${previous_installation_exists}</value1>
<value2>1</value2>
</compareValues>
<compareValues>
<logic>equals</logic>
<value1>${installation_type}</value1>
<value2>uninstall</value2>
</compareValues>
<compareValues>
<logic>equals</logic>
<value1>${delete_user_data}</value1>
<value2>1</value2>
</compareValues>
</ruleList>
</deleteFile>
<deleteFile>
<explanation>Deleting iguana config json</explanation>
<path>${windows_folder_appdata}/Iguana/config.json</path>
<progressText>Deleting iguana config</progressText>
<ruleList>
<compareValues>
<logic>equals</logic>
<value1>${previous_installation_exists}</value1>
<value2>1</value2>
</compareValues>
<compareValues>
<logic>equals</logic>
<value1>${installation_type}</value1>
<value2>uninstall</value2>
</compareValues>
<compareValues>
<logic>equals</logic>
<value1>${delete_config_data}</value1>
<value2>1</value2>
</compareValues>
</ruleList>
</deleteFile>
<exit>
<explanation>Uninstalled</explanation>
<progressText>Uninstalled</progressText>
<ruleList>
<compareValues>
<logic>equals</logic>
<value1>${previous_installation_exists}</value1>
<value2>1</value2>
</compareValues>
<compareValues>
<logic>equals</logic>
<value1>${installation_type}</value1>
<value2>uninstall</value2>
</compareValues>
</ruleList>
</exit>
<showProgressDialog>
<title>Downloading files</title>
<actionList>
<httpGet>
<abortOnError>0</abortOnError>
<explanation>Visual C++ Redistributable for Visual Studio 2015 library files are needed for Agama daemon</explanation>
<filename>${system_temp_directory}/vc_redist.x64.exe</filename>
<progressText>Downloading Visual C++ Redistributable for Visual Studio 2015</progressText>
<showMessageOnError>0</showMessageOnError>
<url>https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe</url>
</httpGet>
</actionList>
<ruleList>
<fileExists>
<negate>1</negate>
<path>${system_temp_directory}/vc_redist.x64.exe</path>
</fileExists>
</ruleList>
</showProgressDialog>
<runProgram>
<abortOnError>0</abortOnError>
<explanation>Visual C++ Redistributable for Visual Studio 2015 library files are needed for Agama daemon</explanation>
<program>${system_temp_directory}/vc_redist.x64.exe</program>
<programArguments>/install /passive</programArguments>
<progressText>Downloading Visual C++ Redistributable for Visual Studio 2015</progressText>
<showMessageOnError>0</showMessageOnError>
</runProgram>
<showProgressDialog>
<title>Downloading files</title>
<actionList>
<httpGet>
<abortOnError>0</abortOnError>
<explanation>Visual C++ Redistributable for Visual Studio 2015 library files are needed for Agama daemon</explanation>
<filename>${system_temp_directory}/vc_redist.x86.exe</filename>
<progressText>Downloading Visual C++ Redistributable for Visual Studio 2015</progressText>
<showMessageOnError>0</showMessageOnError>
<url>https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe</url>
</httpGet>
</actionList>
<ruleList>
<fileExists>
<negate>1</negate>
<path>${system_temp_directory}/vc_redist.x86.exe</path>
</fileExists>
</ruleList>
</showProgressDialog>
<runProgram>
<abortOnError>0</abortOnError>
<explanation>Visual C++ Redistributable for Visual Studio 2015 library files are needed for Agama daemon</explanation>
<program>${system_temp_directory}/vc_redist.x86.exe</program>
<programArguments>/install /passive</programArguments>
<progressText>Downloading Visual C++ Redistributable for Visual Studio 2015</progressText>
<showMessageOnError>0</showMessageOnError>
</runProgram>
<createDirectory>
<abortOnError>0</abortOnError>
<explanation>Creating ZcashParam directory</explanation>
<path>${windows_folder_appdata}/ZcashParams/</path>
<progressText>Creating ZcashParam directory</progressText>
<showMessageOnError>0</showMessageOnError>
</createDirectory>
<showProgressDialog>
<abortOnError>0</abortOnError>
<explanation>Zcash Params file: sprout-proving.key</explanation>
<progressText>Zcash Params file: sprout-proving.key</progressText>
<showMessageOnError>0</showMessageOnError>
<title>Downloading Zcash Params file</title>
<actionList>
<httpGet>
<abortOnError>0</abortOnError>
<explanation>Zcash Params file: sprout-proving.key</explanation>
<filename>${windows_folder_appdata}/ZcashParams/sprout-proving.key</filename>
<progressText>Zcash Params file: sprout-proving.key</progressText>
<showMessageOnError>0</showMessageOnError>
<url>https://z.cash/downloads/sprout-proving.key</url>
</httpGet>
</actionList>
<ruleList>
<fileExists>
<negate>1</negate>
<path>${windows_folder_appdata}/ZcashParams/sprout-proving.key</path>
</fileExists>
</ruleList>
</showProgressDialog>
<showProgressDialog>
<abortOnError>0</abortOnError>
<explanation>Zcash Params file: sprout-verifying.key</explanation>
<progressText>Zcash Params file: sprout-verifying.key</progressText>
<title>Downloading Zcash Params files</title>
<actionList>
<httpGet>
<abortOnError>0</abortOnError>
<explanation>Zcash Params file: sprout-verifying.key</explanation>
<filename>${windows_folder_appdata}/ZcashParams/sprout-verifying.key</filename>
<progressText>Zcash Params file: sprout-verifying.key</progressText>
<showMessageOnError>0</showMessageOnError>
<url>https://z.cash/downloads/sprout-verifying.key</url>
</httpGet>
</actionList>
<ruleList>
<fileExists>
<negate>1</negate>
<path>${windows_folder_appdata}/ZcashParams/sprout-verifying.key</path>
</fileExists>
</ruleList>
</showProgressDialog>
</readyToInstallActionList>
<postInstallationActionList>
<addEnvironmentVariable>
<name>VERUS_HOME</name>
<scope>system</scope>
<value>${installdir}/verus-cli/</value>
</addEnvironmentVariable>
<registrySet>
<key>HKEY_LOCAL_MACHINE\SOFTWARE\${project.shortname}</key>
<name>uninstaller_path</name>
<type>REG_SZ</type>
<value>${installdir}/${uninstallerName}.exe</value>
</registrySet>
<actionGroup>
<actionList>
<copyFile>
<destination>C:\Windows\System32\</destination>
<explanation>Copying ReqCopying Required DLL filesuired DLL files</explanation>
<origin>${installdir}/resources/app/windeps/x86/vcruntime140d.dll</origin>
<progressText>Copying ReqCopying Required DLL filesuired DLL files</progressText>
</copyFile>
</actionList>
<ruleList>
<platformTest type="windows-x86"/>
</ruleList>
</actionGroup>
<actionGroup>
<actionList>
<copyFile>
<destination>C:\Windows\System32\</destination>
<explanation>Copying ReqCopying Required DLL filesuired DLL files</explanation>
<origin>${installdir}/resources/app/windeps/x64/ucrtbased.dll</origin>
<progressText>Copying ReqCopying Required DLL filesuired DLL files</progressText>
</copyFile>
<copyFile>
<destination>C:\Windows\System32\</destination>
<explanation>Copying ReqCopying Required DLL filesuired DLL files</explanation>
<origin>${installdir}/resources/app/windeps/x64/vcruntime140d.dll</origin>
<progressText>Copying ReqCopying Required DLL filesuired DLL files</progressText>
</copyFile>
<copyFile>
<destination>C:\Windows\SysWOW64\</destination>
<explanation>Copying ReqCopying Required DLL filesuired DLL files</explanation>
<origin>${installdir}/resources/app/windeps/x86/ucrtbased.dll</origin>
<progressText>Copying ReqCopying Required DLL filesuired DLL files</progressText>
</copyFile>
<copyFile>
<destination>C:\Windows\SysWOW64\</destination>
<explanation>Copying ReqCopying Required DLL filesuired DLL files</explanation>
<origin>${installdir}/resources/app/windeps/x86/vcruntime140d.dll</origin>
<progressText>Copying ReqCopying Required DLL filesuired DLL files</progressText>
</copyFile>
</actionList>
<ruleList>
<platformTest type="windows-x64"/>
</ruleList>
</actionGroup>
</postInstallationActionList>
<postUninstallationActionList>
<registryDelete>
<key>HKEY_LOCAL_MACHINE\SOFTWARE\${project.shortname}</key>
<name>uninstaller_path</name>
</registryDelete>
</postUninstallationActionList>
<allowAddRemoveComponents>1</allowAddRemoveComponents>
<allowComponentSelection>1</allowComponentSelection>
<enableDebugger>1</enableDebugger>
<enableRollback>1</enableRollback>
<enableTimestamp>1</enableTimestamp>
<outputDirectory>../builds</outputDirectory>
<replaceLockedFilesOnReboot>1</replaceLockedFilesOnReboot>
<rollbackBackupDirectory>${windows_folder_appdata}</rollbackBackupDirectory>
<saveRelativePaths>1</saveRelativePaths>
<singleInstanceCheck>1</singleInstanceCheck>
<vendor>VerusCoin</vendor>
<windows64bitMode>1</windows64bitMode>
<parameterList>
<directoryParameter>
<name>installdir</name>
<description>Installer.Parameter.installdir.description</description>
<explanation>Installer.Parameter.installdir.explanation</explanation>
<value></value>
<default>${platform_install_prefix}/${product_shortname}</default>
<allowEmptyValue>0</allowEmptyValue>
<cliOptionName>prefix</cliOptionName>
<mustBeWritable>1</mustBeWritable>
<mustExist>0</mustExist>
<width>30</width>
<validationActionList>
<throwError>
<text>You don't have enough disk space to install the application,
please select another installation directory</text>
<ruleList>
<checkFreeDiskSpace>
<logic>less</logic>
<path>${installdir}</path>
<size>${required_diskspace}</size>
</checkFreeDiskSpace>
</ruleList>
</throwError>
</validationActionList>
</directoryParameter>
<choiceParameterGroup>
<name>installation_type</name>
<title>Instalation type</title>
<description>Existing instalation is detected</description>
<explanation>Existing instalation is detected</explanation>
<value>uninstall</value>
<default>uninstall</default>
<parameterList>
<parameterGroup>
<name>uninstall</name>
<title>Uninstall</title>
<explanation>Uninstall</explanation>
<value></value>
<default></default>
<parameterList>
<booleanParameter name="delete_user_data" description="Delete user data" displayStyle="checkbox-left">
<explanation></explanation>
<value>0</value>
<default>0</default>
</booleanParameter>
<booleanParameter name="delete_zcash_params" description="Delete Zcash params" displayStyle="checkbox-left">
<explanation></explanation>
<value>0</value>
<default>0</default>
</booleanParameter>
</parameterList>
</parameterGroup>
<labelParameter name="Upgrade" description="Upgrade to current version">
<title>Upgrade</title>
<explanation></explanation>
<image></image>
</labelParameter>
</parameterList>
<ruleList>
<compareValues>
<logic>equals</logic>
<value1>${previous_installation_exists}</value1>
<value2>1</value2>
</compareValues>
</ruleList>
</choiceParameterGroup>
</parameterList>
</project>

97
zcutil/build-debian-package.sh

@ -1,33 +1,49 @@
#!/bin/bash
## Usage:
## ./zcutil/build-debian-package.sh
# Copyright 2019 The Hush Developers
# Usage: ./zcutil/build-debian-package.sh
set -e
set -x
BUILD_PATH="/tmp/verus-cli"
PACKAGE_NAME="verus-cli"
BUILD_PATH="/tmp/hush"
PACKAGE_NAME="hush"
SRC_PATH=`pwd`
SRC_DEB=$SRC_PATH/contrib/debian
SRC_DOC=$SRC_PATH/doc
umask 022
if [ ! -e "./src/komodod" ]; then
echo "No komodod found!"
echo "Make sure to run ./build.sh before running $0"
exit 1
fi
if [ ! -e "./src/komodo-cli" ]; then
echo "No komodo-cli found!"
echo "Make sure to run ./build.sh before running $0"
exit 1
fi
if [ ! -d $BUILD_PATH ]; then
echo "Creating $BUILD_PATH"
mkdir $BUILD_PATH
fi
## PACKAGE_VERSION=$($SRC_PATH/src/zcashd --version | grep version | cut -d' ' -f4 | tr -d v)
## Need version setting from environment
PACKAGE_VERSION=0.3.10-beta
#PACKAGE_VERSION=$($SRC_PATH/src/hushd --version | grep version | cut -d' ' -f4 | tr -d v)
PACKAGE_VERSION=3.1.0
##
## Also, what does the sed end up doing?
DEBVERSION=$(echo $PACKAGE_VERSION | sed 's/-beta/~beta/' | sed 's/-rc/~rc/' | sed 's/-/+/')
BUILD_DIR="$BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64"
if [ -e "$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb "]; then
echo "Backing up previous build"
cp $PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb $PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb.bak
fi
if [ -d $BUILD_DIR ]; then
echo "Removing $BUILD_DIR"
rm -R $BUILD_DIR
fi
@ -35,7 +51,8 @@ DEB_BIN=$BUILD_DIR/usr/bin
DEB_CMP=$BUILD_DIR/usr/share/bash-completion/completions
DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
DEB_MAN=$BUILD_DIR/usr/share/man/man1
mkdir -p $BUILD_DIR/DEBIAN $DEB_CMP $DEB_BIN $DEB_DOC $DEB_MAN
DEB_SHR=$BUILD_DIR/usr/share/hush
mkdir -p $BUILD_DIR/DEBIAN $DEB_CMP $DEB_BIN $DEB_DOC $DEB_MAN $DEB_SHR
chmod 0755 -R $BUILD_DIR/*
# Package maintainer scripts (currently empty)
@ -43,40 +60,56 @@ chmod 0755 -R $BUILD_DIR/*
#cp $SRC_DEB/postrm $BUILD_DIR/DEBIAN
#cp $SRC_DEB/preinst $BUILD_DIR/DEBIAN
#cp $SRC_DEB/prerm $BUILD_DIR/DEBIAN
# Copy binaries
cp $SRC_PATH/src/komodod $DEB_BIN
strip $DEB_BIN/komodod
cp $SRC_PATH/src/verusd $DEB_BIN
cp $SRC_PATH/src/komodo-cli $DEB_BIN
strip $DEB_BIN/komodo-cli
cp $SRC_PATH/src/verus $DEB_BIN
cp $SRC_PATH/zcutil/fetch-params.sh $DEB_BIN/zcash-fetch-params
# Copy docs
cp $SRC_PATH/doc/release-notes/release-notes-1.0.0.md $DEB_DOC/changelog
cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian
cp $SRC_PATH/src/komodod $DEB_BIN/hush-komodod
strip $DEB_BIN/hush-komodod
cp $SRC_PATH/src/komodo-cli $DEB_BIN/hush-komodo-cli
strip $DEB_BIN/hush-komodo-cli
cp $SRC_PATH/src/komodo-tx $DEB_BIN/hush-komodo-tx
strip $DEB_BIN/hush-komodo-tx
cp $SRC_PATH/src/hushd $DEB_BIN
cp $SRC_PATH/src/hush-cli $DEB_BIN
cp $SRC_PATH/src/hush-tx $DEB_BIN
cp $SRC_PATH/sapling-output.params $DEB_SHR
cp $SRC_PATH/sapling-spend.params $DEB_SHR
# Docs
#cp $SRC_PATH/doc/release-notes/release-notes-1.0.0.md $DEB_DOC/changelog
cp $SRC_PATH/contrib/debian/changelog $DEB_DOC
#cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian
cp $SRC_DEB/copyright $DEB_DOC
cp -r $SRC_DEB/examples $DEB_DOC
# Copy manpages
cp $SRC_DOC/man/komodod.1 $DEB_MAN
cp $SRC_DOC/man/komodo-cli.1 $DEB_MAN
cp $SRC_DOC/man/zcash-fetch-params.1 $DEB_MAN
# Manpages
cp $SRC_DOC/man/komodod.1 $DEB_MAN/hushd.1
cp $SRC_DOC/man/komodo-cli.1 $DEB_MAN/hush-cli.1
cp $SRC_DOC/man/komodo-tx.1 $DEB_MAN/hush-tx.1
# prevents warnings about binaries without manpages
cp $SRC_DOC/man/komodod.1 $DEB_MAN/hush-komodod.1
cp $SRC_DOC/man/komodo-cli.1 $DEB_MAN/hush-komodo-cli.1
cp $SRC_DOC/man/komodo-tx.1 $DEB_MAN/hush-komodo-tx.1
# Copy bash completion files
cp $SRC_PATH/contrib/zcashd.bash-completion $DEB_CMP/zcashd
cp $SRC_PATH/contrib/zcash-cli.bash-completion $DEB_CMP/zcash-cli
cp $SRC_PATH/contrib/hushd.bash-completion $DEB_CMP/hushd
cp $SRC_PATH/contrib/hush-cli.bash-completion $DEB_CMP/hush-cli
# Gzip files
gzip --best -n $DEB_DOC/changelog
gzip --best -n $DEB_DOC/changelog.Debian
gzip --best -n $DEB_MAN/komodod.1
gzip --best -n $DEB_MAN/komodo-cli.1
gzip --best -n $DEB_MAN/zcash-fetch-params.1
#gzip --best -n $DEB_DOC/changelog.Debian
gzip --best -n $DEB_MAN/hushd.1
gzip --best -n $DEB_MAN/hush-cli.1
gzip --best -n $DEB_MAN/hush-tx.1
gzip --best -n $DEB_MAN/hush-komodod.1
gzip --best -n $DEB_MAN/hush-komodo-cli.1
gzip --best -n $DEB_MAN/hush-komodo-tx.1
cd $SRC_PATH/contrib
# Create the control file
dpkg-shlibdeps $DEB_BIN/komodod $DEB_BIN/komodo-cli
dpkg-shlibdeps $DEB_BIN/hush-komodod $DEB_BIN/hush-komodo-cli
dpkg-gencontrol -P$BUILD_DIR -v$DEBVERSION
# Create the Debian package
echo "Creating the Debian package"
fakeroot dpkg-deb --build $BUILD_DIR
cp $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64.deb $SRC_PATH
# Analyze with Lintian, reporting bugs and policy violations

Loading…
Cancel
Save