From 9e5ef7c6126f1881611c6d0b7dbeff0546c8aca0 Mon Sep 17 00:00:00 2001 From: furszy Date: Thu, 18 Oct 2018 15:00:57 +0200 Subject: [PATCH] Bip32 test corrected + old protoc file included for compatibility --- .DS_Store | Bin 10244 -> 10244 bytes .gitignore | 4 +- core/.DS_Store | Bin 14340 -> 12292 bytes core/build.gradle | 3 +- .../zerocoinj/protocol/GenWitMessage.class | Bin 3677 -> 4133 bytes .../furszy/zerocoinj/wallet/MultiWallet.class | Bin 22445 -> 22714 bytes .../furszy/zerocoinj/wallet/ZWallet.class | Bin 15411 -> 24339 bytes .../org/pivxj/core/AbstractBlockChain$1.class | Bin 2515 -> 2515 bytes .../org/pivxj/core/AbstractBlockChain$2.class | Bin 1831 -> 1831 bytes .../org/pivxj/core/AbstractBlockChain$3.class | Bin 1704 -> 1704 bytes .../org/pivxj/core/AbstractBlockChain$4.class | Bin 1383 -> 1383 bytes .../AbstractBlockChain$NewBlockType.class | Bin 1197 -> 1197 bytes .../core/AbstractBlockChain$OrphanBlock.class | Bin 1566 -> 1566 bytes .../org/pivxj/core/AbstractBlockChain.class | Bin 40952 -> 40952 bytes ...itcoinSerializer$BitcoinPacketHeader.class | Bin 1688 -> 1688 bytes .../org/pivxj/core/BitcoinSerializer.class | Bin 11997 -> 12246 bytes .../org/pivxj/core/CoinDefinition.class | Bin 6376 -> 6426 bytes .../classes/org/pivxj/core/Context$1.class | Bin 2331 -> 2331 bytes .../classes/org/pivxj/core/Context.class | Bin 7966 -> 8122 bytes .../classes/org/pivxj/core/PeerGroup$1.class | Bin 1292 -> 1292 bytes .../classes/org/pivxj/core/PeerGroup$10.class | Bin 4036 -> 4036 bytes .../classes/org/pivxj/core/PeerGroup$11.class | Bin 1085 -> 1085 bytes .../classes/org/pivxj/core/PeerGroup$12.class | Bin 2500 -> 2500 bytes .../classes/org/pivxj/core/PeerGroup$13.class | Bin 1124 -> 1124 bytes .../classes/org/pivxj/core/PeerGroup$14.class | Bin 1538 -> 1538 bytes .../classes/org/pivxj/core/PeerGroup$15.class | Bin 1527 -> 1527 bytes .../classes/org/pivxj/core/PeerGroup$16.class | Bin 2210 -> 2210 bytes .../classes/org/pivxj/core/PeerGroup$17.class | Bin 870 -> 870 bytes .../classes/org/pivxj/core/PeerGroup$2.class | Bin 1142 -> 1142 bytes .../classes/org/pivxj/core/PeerGroup$3.class | Bin 2248 -> 2248 bytes .../classes/org/pivxj/core/PeerGroup$4.class | Bin 1765 -> 1765 bytes .../classes/org/pivxj/core/PeerGroup$5.class | Bin 907 -> 907 bytes .../classes/org/pivxj/core/PeerGroup$6.class | Bin 5079 -> 5079 bytes .../classes/org/pivxj/core/PeerGroup$7.class | Bin 1062 -> 1062 bytes .../classes/org/pivxj/core/PeerGroup$8.class | Bin 1800 -> 1800 bytes .../classes/org/pivxj/core/PeerGroup$9.class | Bin 2003 -> 2003 bytes ...erGroup$ChainDownloadSpeedCalculator.class | Bin 5753 -> 5753 bytes .../PeerGroup$FilterRecalculateMode.class | Bin 1261 -> 1261 bytes .../core/PeerGroup$LocalhostCheckState.class | Bin 1290 -> 1290 bytes .../pivxj/core/PeerGroup$PeerListener.class | Bin 2552 -> 2552 bytes .../core/PeerGroup$PeerStartupListener.class | Bin 1274 -> 1274 bytes .../classes/org/pivxj/core/PeerGroup.class | Bin 61720 -> 61720 bytes .../org/pivxj/core/PeerSocketHandler.class | Bin 7348 -> 7564 bytes .../classes/org/pivxj/core/Transaction.class | Bin 32598 -> 33510 bytes .../classes/org/pivxj/core/Utils$Pair.class | Bin 851 -> 851 bytes .../classes/org/pivxj/core/Utils.class | Bin 17855 -> 18187 bytes .../pivxj/core/VerificationException.class | Bin 1609 -> 1781 bytes .../classes/org/pivxj/crypto/HDUtils.class | Bin 5980 -> 5648 bytes ...rustStoreLoader$FileTrustStoreLoader.class | Bin 1604 -> 1276 bytes .../classes/org/pivxj/crypto/X509Utils.class | Bin 4952 -> 4620 bytes .../org/pivxj/utils/DaemonThreadFactory.class | Bin 1482 -> 1154 bytes .../classes/org/pivxj/utils/Pair.class | Bin 1962 -> 2353 bytes .../classes/org/pivxj/utils/Threading$2.class | Bin 1062 -> 681 bytes .../wallet/DeterministicKeyChain$1.class | Bin 1376 -> 1173 bytes .../DeterministicKeyChain$Builder.class | Bin 4053 -> 4053 bytes .../DeterministicKeyChain$KeyChainType.class | Bin 1278 -> 1278 bytes .../pivxj/wallet/DeterministicKeyChain.class | Bin 52931 -> 55534 bytes .../org/pivxj/wallet/DeterministicSeed.class | Bin 8453 -> 8453 bytes .../org/pivxj/wallet/KeyChainGroup.class | Bin 29350 -> 29350 bytes .../org/pivxj/wallet/SendRequest.class | Bin 7650 -> 7690 bytes .../classes/org/pivxj/wallet/Wallet$10.class | Bin 1513 -> 1513 bytes .../classes/org/pivxj/wallet/Wallet$11.class | Bin 878 -> 878 bytes .../classes/org/pivxj/wallet/Wallet$2.class | Bin 1767 -> 1767 bytes .../classes/org/pivxj/wallet/Wallet$3.class | Bin 1126 -> 1126 bytes .../classes/org/pivxj/wallet/Wallet$4.class | Bin 937 -> 937 bytes .../classes/org/pivxj/wallet/Wallet$5.class | Bin 1333 -> 1333 bytes .../classes/org/pivxj/wallet/Wallet$6.class | Bin 1325 -> 1325 bytes .../classes/org/pivxj/wallet/Wallet$7.class | Bin 930 -> 930 bytes .../classes/org/pivxj/wallet/Wallet$8.class | Bin 1106 -> 1106 bytes .../classes/org/pivxj/wallet/Wallet$9.class | Bin 1089 -> 1089 bytes .../wallet/Wallet$BalanceFutureRequest.class | Bin 909 -> 909 bytes .../org/pivxj/wallet/Wallet$BalanceType.class | Bin 1238 -> 1238 bytes .../wallet/Wallet$CompletionException.class | Bin 409 -> 409 bytes .../Wallet$CouldNotAdjustDownwards.class | Bin 468 -> 468 bytes .../wallet/Wallet$DustySendRequested.class | Bin 453 -> 453 bytes .../Wallet$ExceededMaxTransactionSize.class | Bin 477 -> 477 bytes .../pivxj/wallet/Wallet$FeeCalculation.class | Bin 694 -> 694 bytes ...Wallet$FreeStandingTransactionOutput.class | Bin 1530 -> 1530 bytes .../pivxj/wallet/Wallet$MissingSigsMode.class | Bin 1192 -> 1192 bytes .../Wallet$MultipleOpReturnRequested.class | Bin 474 -> 474 bytes .../org/pivxj/wallet/Wallet$SendResult.class | Bin 664 -> 664 bytes .../pivxj/wallet/Wallet$TxOffsetPair.class | Bin 975 -> 975 bytes .../classes/org/pivxj/wallet/Wallet.class | Bin 130930 -> 131022 bytes .../org/pivxj/wallet/WalletFiles$1.class | Bin 2162 -> 2162 bytes .../org/pivxj/wallet/WalletFiles.class | Bin 5668 -> 5321 bytes .../wallet/WalletProtobufSerializer$1.class | Bin 927 -> 927 bytes .../wallet/WalletProtobufSerializer$2.class | Bin 5097 -> 5097 bytes .../wallet/WalletProtobufSerializer.class | Bin 46037 -> 47203 bytes .../classes/org/pivxj/crypto/BIP32Test.class | Bin 7988 -> 7988 bytes .../TestWithNetworkConnections$1$1.class | Bin 1294 -> 1298 bytes .../org/pivxj/testing/TestWithWallet.class | Bin 5509 -> 5509 bytes .../org/pivxj/wallet/MultiWalletTest.class | Bin 12702 -> 23737 bytes core/src/.DS_Store | Bin 10244 -> 10244 bytes core/src/main/.DS_Store | Bin 8196 -> 8196 bytes core/src/main/java/.DS_Store | Bin 8196 -> 8196 bytes .../furszy/zerocoinj/MultiWalletFiles.java | 3 +- .../zerocoinj/protocol/GenWitMessage.java | 9 + .../furszy/zerocoinj/wallet/AmountPerDen.java | 58 + .../furszy/zerocoinj/wallet/MultiWallet.java | 72 +- .../furszy/zerocoinj/wallet/PSolution.java | 114 + .../zerocoinj/wallet/SelectSolution.java | 47 + .../zerocoinj/wallet/ZCSpendRequest.java | 59 +- .../zerocoinj/wallet/ZCoinSelection.java | 238 + .../host/furszy/zerocoinj/wallet/ZWallet.java | 322 +- .../org/pivxj/core/AbstractBlockChain.java | 1 + .../org/pivxj/core/BitcoinSerializer.java | 11 +- .../java/org/pivxj/core/CoinDefinition.java | 2 + .../src/main/java/org/pivxj/core/Context.java | 3 + .../main/java/org/pivxj/core/PeerGroup.java | 1 + .../org/pivxj/core/PeerSocketHandler.java | 6 +- .../main/java/org/pivxj/core/Transaction.java | 36 + core/src/main/java/org/pivxj/core/Utils.java | 6 + .../org/pivxj/core/VerificationException.java | 12 + core/src/main/java/org/pivxj/utils/Pair.java | 8 + .../pivxj/wallet/DeterministicKeyChain.java | 75 +- .../org/pivxj/wallet/DeterministicSeed.java | 2 +- .../main/java/org/pivxj/wallet/OldProtos.java | 19363 ++++++++++++++++ .../java/org/pivxj/wallet/SendRequest.java | 5 + .../main/java/org/pivxj/wallet/Wallet.java | 26 +- .../java/org/pivxj/wallet/WalletFiles.java | 1 + .../wallet/WalletProtobufSerializer.java | 45 +- core/src/old_wallet.proto | 417 + .../test/java/org/pivxj/crypto/BIP32Test.java | 48 +- .../org/pivxj/testing/TestWithWallet.java | 2 +- .../org/pivxj/wallet/MultiWalletTest.java | 458 +- .../org/pivxj/zerocoin/CoinSpendTest.java | 17 + .../org/pivxj/zerocoin/ConnectionTest.java | 109 +- .../org/pivxj/tools/BuildCheckpoints.java | 15 +- 128 files changed, 21438 insertions(+), 160 deletions(-) create mode 100644 core/src/main/java/host/furszy/zerocoinj/wallet/AmountPerDen.java create mode 100644 core/src/main/java/host/furszy/zerocoinj/wallet/PSolution.java create mode 100644 core/src/main/java/host/furszy/zerocoinj/wallet/SelectSolution.java create mode 100644 core/src/main/java/host/furszy/zerocoinj/wallet/ZCoinSelection.java create mode 100644 core/src/main/java/org/pivxj/wallet/OldProtos.java create mode 100644 core/src/old_wallet.proto diff --git a/.DS_Store b/.DS_Store index 34662dadc59c6ee363a78d694bc89f498466c8dc..d310cc2d9100d9a3338e8a85e7777524699cf06a 100644 GIT binary patch delta 1343 zcmd^;TWpL$6vxk>Vn0(ld(pkLvaLpy6wB61CEB8uZ7XfHON3~%yZz|L*WISOR!Uew zq;U)R+%IV&A)-QLk+=pAL_7!@5#hm$c#(oW`6mf?M>U8 z_BFzNsp&=z+^K9i8P049(K^ydr*@h~tEroUywgcF9MV0>N@40CmF-&UqA1^sP@G~k zm95HaoPCwzsYT{`n7p3y(t?>jpV4PY=8G{df34qISKlV(x|rIm>cO~{P^*J+HD-Jm zw`$fhEgX%sXdBcvX-R16`o^xf7LCM~s@*YO6{UZyJ-=|`l<8&V6$=J(q}gJ%31Pgp z`XP*Bn`e%ge)XIPDp@EUK8{o@)Krki2r))oH-ru#22jow_1fBZ3bE?bX1FDc}3 zMyCuooUXjGS;8$xFeOvkEuSNV%wmk0XhkJQN6LDR<~dysQ7slKW*k!_nTj&#h>EI8 zGTWax{|NITC7;q8Ci#s9F@h;tm|y{lQ3@X_P=y7kMhzO!gl4oL!2H?}L@3QLl4jV0 zjo5_EOtKd{u^W4^7l#?+ah$+OoWWU~O9Q=vtGI^ixQSc1kH?u;4udhz;k7EP^B`-u zgVwO}HR>eY2*^Ss;RuP5zdFI#Aq#6p{qkAw>udFBIHX5IoKF%B`;oU~Fg?;0#L(NE zJ;asb#yjaYUO28Bcbu)>9Inir!}CW^t!8gX_YJK8I}uDNtLtS}YE;3uEaR?i_W!Eg Io`0s@??vK17ytkO delta 1105 zcmdtgUr5tY6bJD0Eo;9YUGr}HIk(@EStHXBTe@tUv<3^C*q?&CrL!4+@}X7%vAFhz_Gg1ns8Gb)y$b&1zRgNp+P+d@`j>EME`Rhs>;@Dc+Lo zXpA3f6G2N%xGaU@i`ndO23(Xq>dl2kixw|kzQXPG2geJz(PY*b6UABxOvE&ok1f;7 zRo<*bx@3)U6E_yH3RbD|E;Z5~?`X|N^p&hy;jQY{M02z)kqgx@@lw-dktwY)rE-u$ z#Z*cj3Q&Y%l%zDBrhXcx5gMiE^qSt&N1CP?`bOXB2M8)m&`<~q94NsOIN^d9KGb48 z!q|dFM6exEw4eED(2wxq=J(DdVP%X zJjs;H`q#?reBL0lcAIWx>sXy?#6^{p;>=Bg$Qda6HIzSMy`o9_Of#5+qyhO-NtZ%p zsDvAS)FFfhY`{irLlbsjCw57n-H2mP*62XiD2=1&#W5+>hqE|`^SFS14B`r|;u>z@ zHtuA>Mlgzpc!bAzf){ur($-orZEY1FZ1XcL5OO@0u-$Z>P*%D18qp|}|gkE_S jaYm14Jod4?p(8pnhLW#&seiKov-3CpUkl*-`vv$3&@=j^ diff --git a/.gitignore b/.gitignore index 85af96b87..9ff7d0f5a 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,6 @@ checkpoints.txt core/2.0.32_pivx-wallet-backup_org.pivx.production-2017-11-20 *build/ *.DS_Store -*out/ \ No newline at end of file +*out/ +*3.0.0_pivx-wallet-backup* +core/out/* \ No newline at end of file diff --git a/core/.DS_Store b/core/.DS_Store index ae3a14153ae14ebfdd03936265c66b59cdff40ff..3d852b528e6c5c398178eb6c085dcbf91e583a58 100644 GIT binary patch delta 641 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 QwbJ&U@JF2_p9ACn0kr@s%K!iX delta 1431 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 T;y3t9*e~IJO#V*3yU_c8Wi8sQ literal 15411 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 diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$1.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$1.class index 82443d64791d52765686c273b44c7f9b7f010f94..6aca50ad0a0c670f43e9140a600e7608f909e650 100644 GIT binary patch delta 39 vcmcaCd|7zINe;%Q$)`A)McWxzm^v7=nEDxXnYtMCn7SD(nI=q5;w%IJ|B?$# delta 39 vcmcaCd|7zINe;%w$)`A)McWuynA#b%nEDuWnK~Ktn7SA&nffOuaTWpq{}~HK diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$2.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$2.class index 85059556909fd0b0096f903b6eef50ac2362feec..ff5446c6981ffd0e5f16ee83af02a31ec1d77ac0 100644 GIT binary patch delta 39 vcmZ3^x14W-D;wjS$!=_Aq6-+fm=-d~GA(CNU|PhW$h4S2hiS#+i)>*4*^vsM delta 39 vcmZ3^x14W-D;wkN$!=_AqVpNJm=-X|GA(0JU|Pta$h3$-hiUobi)>*4*%%6$ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$3.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$3.class index 38f53b8983ff0b937c5d529d72547907e462c0bd..f842cc4fab7532e8a4c7391bf8f4e799aba15114 100644 GIT binary patch delta 35 rcmZ3%yMlMaRaQpr$=6s*1oauDnT;6am<<@@nGG4Vn2je#v-tu5s-Oqh delta 35 rcmZ3%yMlMaRaQo=$=6s*1oarCnGG4_nDrUtnGG1Un2jb!v-tu5sze9U diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$4.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$4.class index ff2c4ac087325b65eccd2071907f92342d8bbbc5..1ea93fb7b410346dbc22e3b9f7787bf5e670e519 100644 GIT binary patch delta 31 ncmaFP^_*+N3KqsmlUK6D@lIvnW}C(!%r>1thHd6#5!PS;tQH9) delta 31 ncmaFP^_*+N3KqtRlUK6D@lIjjW}C_&%r=cdhHb`V5!PS;tJ4V{ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$NewBlockType.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$NewBlockType.class index 67f6f1ec2a7be9431eeb966a4a334a08f298b100..13ca0745c38a1f20183080e69e6b62469b1069a8 100644 GIT binary patch delta 39 scmZ3>xt4RoQf9`S$;+7af#fx2J0K~_lFOOPz{{M+AjOxt4RoQf9{N$;+7af#fx2J0K~_lFOOHz{{M=AjO diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$OrphanBlock.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$OrphanBlock.class index 49f22e9d30d19ad30a7f0e305cda78592d89a0ad..ebf552a615377b9e6b0bd12fa312a08292feda8d 100644 GIT binary patch delta 37 scmbQoGmmG38>?h711CcXgCs*KgC#>bgB?Q!gEK=VgC|4P?gy11Cc5gB?RTgEK<~gC|4fHdjJ3c diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain.class index 005cd15a8a0e13360170ff7ceaabe54b5f80a689..a5e421d2af73c7f2557825ff67213c65d9351182 100644 GIT binary patch delta 3002 zcmW+%d3aCP7F~OveXb-#L?%C^kr0Woh=xQEH72HpnlsgqsEGR16bTVT2j z@>*iLRa$~-%_=BWBt_F##p`5v6}-lYj@!j!3q4Ol zUc6m^@t9 zfj7CC#0XsbmROqxBU&6V& zQHLD((Z`0Z7C{C>=o56N1L#2q(aXdJ7#v84F@`EIfj-API*$1!zQkYwUBC*e#CvoR z8|e}*(-mB!tEi!C_>r!omTnN}Cb`jVs!LVmN!8?{?Tu-%5&ZIJODb!&Nf3^_Fbr8hvXlXE< z-JQ+XJ7MerhQ=FA=k7Fvd(d3&NrfCs8@Lx0b3fY5{b|Qo z9zc6IjxKOKz2G<&9>m@}n456|hw(6e#b7iK=WaZLV|fh6bE1hP@n}xw@tneMaVjr1 zxQx?zEl=jnoWa|9D(~TGPH4sl95)Aw=faJ%;K$kM%sJ@E^D&z9Fp(D_k8LdBwJ6|q z*v9Lzmp9-b7vU_I;12J=54;n1c^4k?ZpUZZCF*{_xLJYbd=z1P3~l*KW7`P~=93u9 zr;x&@F`3U`j=}kS4)5@JY~V^`;YDNNWhZ!g3wB+H<{M_BoABW(1amby@-0O3Z6|p~ z2hM$D4&*5sa4nkhGqmUDh~*bZ;QwNR0;VfMj#5~t1O-ZCtEz*KRDF~yH|$oP*r&X( zUp2%@<%7%07uS^^{!sozsu9&yF7j7RC|EV64l0l$RWs_PLMc_Xqzu)H@>Clt_E3>j zs=Crv73BoXiey($_^DU~s$OWOdLvBrK^N5*y;XlZZO*me1h5(gt;V3f8jHqioT*Ag zYn6;nDh1uucsqIS5_;3FnOoU$4uVt`+NyczsIm=14ieN7ysqYBq*{nsW<6KsVV+uy zB`V*jTk6zg`I6sqLtlt`Y6ZO2N;FZc5Tf2$QygG7&%WPxEj-jFlPrZxm6^o*hJQ1n z)E4wmA7H53hGFU>ZW-mb(L&uZ{(X;jss<72N5rYSM)^HMeIHrs0dm#PM)fZ!Ru6GNJ;5RM z6vtI9D%CS{j?ZyNy}(`dC!VOkhy`Q`Q@vbKJL9Fs95jru3s2nM<*f zMMGpBO^|HLlpLBR3n))=sZbWuI?1C_SwtVnV%jJ9bU>EUVOdV6rI4=3N~#ju*_l5{ z<*qY&*BiYXjNT&Dla26_VlSzyYpzD%L*P|fqN#VLawbu=(i}t2Ix*;XB*1nXg{b+{vr)=$_0^OKa=|I|~U!rX~ zh{|;^?bjhxty?%Ht7cMQ7(|D|UAKa_ZVi`igJ9hjt#k)O>i$l<)vGyo2$UWQOTT8y zhQU)0M+5yjeDnzT>yf5q6oT|NG6W=~$}YM3J6? zPjm)8)6?*^o{nn$Hh$AH@gF@4wR$#*o=bi@+en*F?eqeQ)C*};yw0O>dJ(;$&Gn}9 zDN8S-9KC{8>y@-tzf13Fn~L-#D$^yjMQ@_Lx|Aw(8J*Fa>07;p?(41eNPkGr^$sV0 zjTZ;+GCKCaPdfO4M*QXg}#jo`g>f}HK@`*;TL_6l)i6d{Y)YH zH)^AQr&#@v60Oe8rF9D^stY`Vp)kFEXuum}B+Fd}{y- ztT=46;!$o5M1?ijUbf+L_YtULjYNHGls&BISi6blEe$?aIs&Z8a9MAmnZXci3c6Yu z=x$}Aw~56Y9BjR1_uRP0dzR^#g9cWX>6l|Wvep!r_$@KPd^EI{;w7s9ZLMXdeYw52 zc(wbx5NnMYw%Cp!QhC zGTUFapKKcIX|8eWni2i2$y~P+OJk_YE-LL$3HF`R73P^)7Gpj&cXhztRTlq0@D$)N delta 3002 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 delta 77 zcmV-T0J8s>4VVqE;{`#b00aT101N@A02=|R0389X05Sot05$=y06_t;080U}08Rn3 j09ygH0A2yM0B!-d0E_{;0Fwc{0HFcB0HguFlOzUo8N(Gt diff --git a/core/out/production/classes/org/pivxj/core/BitcoinSerializer.class b/core/out/production/classes/org/pivxj/core/BitcoinSerializer.class index b66d485b1b1efce3fc92c4979602fdb61e6a26e0..0a93b5ce07ca430297a679f148d8730f53a59813 100644 GIT binary patch delta 5688 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 diff --git a/core/out/production/classes/org/pivxj/core/CoinDefinition.class b/core/out/production/classes/org/pivxj/core/CoinDefinition.class index 1cf740df7fc84a1ff5bcd525022643eead693eaf..02b4703a70172ce10ebbd7d55a96c3a762205626 100644 GIT binary patch delta 1524 zcmY*ZTTok76kYq?LQcXBP}&4i`v|t$0xgwdJ37^NFk~Pq2_+W?b*5<{nE_GCq@d!9 zI)3{-`)bn5Vn04iyN11DTqkCP^7%Ptqb!zmNltpiSM#P?1ResJPa{HUUzoY;V$RrHI3 zUlp8o@{ZqBbS8`aurzO4SNyKkHKXM(sI@<|!iwQZrT!G?{YwRZ3;d(_Uj=6crW8*L z0yB|=3_+%#d4jS8WviS+fl%O7;8KudqPECt4 zT^DSK1R|kutgfml7OfA4t7DNyyS~wmntTS1)Kr!^q?vowd2W~4hXcK6p1a}QoEYVW*@m8A{bYuIiuKbO4IN~iV&mC* zA2-G$&^O>IXy!p^=2>XwF=*y7F#8~H_iSzQ;gt-VaX8qLPmu8#7p-L`=B&~&7za5p zFu|CulNMg(*qSN8Yj~ZN4{zX2&K#4)UeERCYA@5ZUfvJP!&|x|6}_!z;KMt3SMB1} z#oCY8=4TCzvZjnXZf5`EY5zX&!isbLfee3h&flE#e-H2Lu8wWTbNA5CG}#o+u0`XroO^&xiio{xB)e<5e#AqPI@@DqH>Y1RJae5r|% znwFW-`}pj%%5}vgK4bozubBZ7Ch-NUFZnX?6$HMXIR$y3@DNSNZAHa3-B^j6u?DxG z61UtPytoMtgrN$BX>`0sQtO AJ^%m! delta 1544 zcmZ8hX;52L6#mY8C3!Er1R8uv(-kO+P)jXnYh7Anh>%f&CBYe;v5XCw0a3~XP^mLU z$MK&XW$v%8f|S+;buiUxozWl8sI7Hht76@4t^2+eJohG{(I4;o&T`K^-?{g_x2^uz z%JiY>1J3|xpmUt~(uH&Jl@3~en+wNqT!*7;#KZ;o+63W*i8c5}THl&jh3};Gy@Vem z{AhB;Pty9ii1)+dk{K2MMR`|F)IBY8zbX$^dyY!)Hv{S4rSXS>KPCSq;co-~NIq#` zTJnsOU=SIk8KfIDhhtPE!6CsZ!H{6;Xs#=lmMgDd#zn%W1Lw!jnohEANlDJK9B{p^U#=8?e$&^7pf?N9SZIM`_ zD|tiGAU~lbks9h7=pSmiHr10Hh;$k>k6`~N7#d8alD&x`g974NT1NB5396w5!q(!n zP+X^Nphe=KwuBaoct7RE%c^&IUM_3kDb7n|LwnmyQS;eK>lcuZDg zBUcpTyqGHJ-ydHD_wQgIcalUmsv$JhE!QQ!D1d74z(hd2GczHgf<^71SSKU+lCuq@BDa-x1?MUbKRl zn2T!nLz`qn!y!h83R-xHZ7aI~hw(Cd0lb1&IUsi$mP%({kd&4j=!s}%H&n=VGGwB;XMB&PQoT9-e>az ze8^#WDi`r1kCfzb>IJhrpFhqzwPFe%F(2h8d%}b%e9Yb_{Al|$=le%IdvJh81)!L8TBWNv4=7mP0nF&Wi*@oiQR|MZn8Z`Hly3* H)f@!?T96H$ delta 51 zcmbO&G+SuHRyIbp$=le%IkgzL7_}Kh8FeO$v4=A1PtIX)Wi+1riQR|Mda^x7Hly?8 H)f@!?SUwGf diff --git a/core/out/production/classes/org/pivxj/core/Context.class b/core/out/production/classes/org/pivxj/core/Context.class index 21afa8e3680617b2c23662c79c06fc23f85192d2..51ea4fc515a04a9195b06d2532db32e93ce0916e 100644 GIT binary patch delta 3483 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 diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$1.class b/core/out/production/classes/org/pivxj/core/PeerGroup$1.class index 5f53ea49275f6b07cfff2c70daefa83d22556a4a..6d867bb7ad326e10b5b228c10f417261d3bb2e82 100644 GIT binary patch delta 23 fcmeC->fzep%)+>KvI~nZ>v{%mh7FUav6KM-Q>Ofzep%)+>4vI~nZ>pBK*hV_%Dv6KM-Q;G)( diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$10.class b/core/out/production/classes/org/pivxj/core/PeerGroup$10.class index f4078666b7da541d5c7a91c132b59b3315ed55e3..5470632282cf958b0ab9bb150e28e3805e088879 100644 GIT binary patch delta 134 zcmV~$KMMhI0LS6)FFr9`B$*8NE_f3R{*~ww5s5;bIF7<(u-xlV%3CI*RSOnr>+bQgotf&!Om|#8nd`+;Z#;cinFwo>#5Y+s!6Whe15W56WB>pF delta 134 zcmV~$KMMhI0LS6)FFr9`B$*7}1#jX8|4QUUL}EDQ>KvECWU$=pP|904#cH;jSuLI? zF2$wG-ZFM{u$){~Ng7H~Q<}Q+G_PMPFiuMa+A7mgg|2LRa_P%sAfKTEMhY2g%S1b- kIx^FVxz4z{vCy5Ro_KoU>&;3Z0+V2EvTRI|FnVNue@Aj5MgRZ+ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$11.class b/core/out/production/classes/org/pivxj/core/PeerGroup$11.class index 757210a8188c6cb5112f016e0d87448488e11f6f..7cdf89b986e5f2217d3fc8562ab13670de3487ab 100644 GIT binary patch delta 23 fcmdnXv6o}R3TDQd$t#&7S?d|Z*%~IZvzP$@VQmKR delta 23 fcmdnXv6o}R3TDRY$t#&7S?d_Y+3F{=vzP$@VNeF` diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$12.class b/core/out/production/classes/org/pivxj/core/PeerGroup$12.class index b0140f366a318b741b3e48f45c423fa76eb148b3..bb6eadbd5b8a7d1cd74ad78bf12f56c375ae57c8 100644 GIT binary patch delta 75 zcmV-R0JQ(a6T}m+DhL6LlPd_#IgkJh29W?129f|629p3F29y9P29^LS2ABX!2AKe1 h2ATk52B!dN2B-jR2CD#X2B`pW2C4vi2CS1Y36tgw6T1Ka delta 75 zcmV-R0JQ(a6T}m+DhL6KlPd_#IgbDg29N+029W?529f|E29p3O29*FR2A2Rz2ABY0 h2AKe42BrXM2B!dQ2C4vW2B-jV2B`ph2CI`X36ta66RQ9K diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$13.class b/core/out/production/classes/org/pivxj/core/PeerGroup$13.class index 73389a64e47e74d6c64660e7ffa9752055de5bbc..fe581ee2bebe8dde71fcedcda5d4e31a033bb7d0 100644 GIT binary patch delta 23 fcmaFD@q}Z;d1glQ$rqR-S*;kv*{vt*v6uk>WrPOh delta 23 fcmaFD@q}Z;d1gkl$rqR-SuGjF*{vq)v6uk>WoHKB diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$14.class b/core/out/production/classes/org/pivxj/core/PeerGroup$14.class index d35552bb871e989a084dbe4b52661dd8d1d2e07c..746e8e97c50f233516ceb733817089ae5afaf89d 100644 GIT binary patch delta 35 qcmZqTY2w+y&&v2`vH)wY;C}`l4h9BE4n_tg4kiX|4wlJ%tR(=HT?aM* delta 35 qcmZqTY2w+y&&v3FvH)wY;6DZ)_Wul$91ILf9E=Rw9L$sZSW5t;?+7md diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$15.class b/core/out/production/classes/org/pivxj/core/PeerGroup$15.class index 983cf917fdac905600260e74bbd4801260c33a71..e9ba33cb8ec8b7adf53615055f781c4a6225b252 100644 GIT binary patch delta 35 qcmey){hfOQ3oE0>WLDN(L2U*e4jl$b4qXN%4m}2K4ui?ftR(=Dfd>Tu delta 35 qcmey){hfOQ3oE1gWLDN(K`jOz4s8ZW4jl$14qXOq4*ki^tR(=DB?kWh diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$16.class b/core/out/production/classes/org/pivxj/core/PeerGroup$16.class index 02499e5b0a713e5b70f9c75caf0b1e041e003b8e..569d9d102323c348be6fad5d157f39371f06c36b 100644 GIT binary patch delta 63 zcmZ1^xJYor6*k71ldrN(l%2yM$gz+?pJO?LDaR@X3yu{GRvarCTsT%UxO1$T+{`|a Sbt6#4rpb~VUO*iw9CiS2KoW}p delta 63 zcmZ1^xJYor6*k5hldrN(l%35W$gzMypJN$=DaT3%3y$RsRvarBTsT%SxO1$Y+{`|a Sbpuev#>tW#UO*iw9CiS0(h`3F diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$17.class b/core/out/production/classes/org/pivxj/core/PeerGroup$17.class index 081ba845eb0bd62f322d7f69e54af76dc9f1f088..596a0a7918fb9c3db3aeaa3cfa45db8a00d2649b 100644 GIT binary patch delta 13 UcmaFH_KaRXB38x~lNYnL2(Dq^Wn9Z($he-tlyL)tBjd)&7HoMyx#etj04c5wJOBUy delta 41 wcmaFL`;>RXB38!blNYnL2(D(}Wn9Bx$heNdlyNv;w)#tV}}nau!Apaxz5 delta 23 ecmeBX?`Ge?%*=RtG7Ga0>p2E4#`BXynau!Ag9cjw diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$6.class b/core/out/production/classes/org/pivxj/core/PeerGroup$6.class index 2b825652f7b135140f090bbafdb4337e92035b56..936f64843515bf556d6e36579943fda16ceb814e 100644 GIT binary patch delta 261 zcmWNFy(`3V9LL|Em&@I`{PH^k?ut-;oriRhhvLZK3i)~JoQIo;P2FE`2LFHz77wvl z40NSzCYv&-TdYdTCWFa$dOg&FT5y-~>XG8u$)H#Aql(a=C^5x|tC>Xg+#9H?cuLTu zMtu1sm8L}#v}%?%g`~7jr?%7DU**Agx jGLO#!!z?mM=(Oat%$D;mtL(WRu*MPVoKq}a)Mo7;8yzo$ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$7.class b/core/out/production/classes/org/pivxj/core/PeerGroup$7.class index 88d54bc27ded4202ba0aa1361a6a27aa25d1c433..0acc3cb7f2860d61fcbbe3ed7d0bf68d5b39b800 100644 GIT binary patch delta 23 fcmZ3+v5aHGRAxq<$)_ikm6fq#@-)^fjx`KiEVT?GEOiWWEcFZ;ER77NEG-NcEKLlSEX@o~EUgSa nEbR=DEFBD~ES(HFEL{x6EWHe6EZq#{EIkZOEPaz#v&8}cTVNEC delta 83 zcmeC+>)_ikm6fr4@-)^fj@1lYEHw-wEVT@BEOiVTEDa2%EX@oSER777EKLkfEG-N^ nENu*tEbR=bEFBCvES(I+EIkZmEL{xcEZq!EEWMLgv&8}cSfCVt diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$9.class b/core/out/production/classes/org/pivxj/core/PeerGroup$9.class index 2f602f47e0ce4dc081cdf35257cf387a1db55521..cbdf20f0f1573498dc736b066bf26764db059e93 100644 GIT binary patch delta 71 zcmV-N0J#6t57Q5@as~mQlXC{jHKYIv1f~EN1g8Ka1gHQ(1gQW=1gZc^1gij41grpF d1g-#Q1g`*b1hN2h1h4>g1hD{s1hbQJ2VwUJ6sZ6J delta 71 zcmV-N0J#6t57Q5@as~mPlXC{jHKPCu1f>8M1f~EZ1g8K&1gHQ<1gQW@1gZd31gijE d1g!vP1g-#a1hD{g1g`*f1h4>r1hSKI2VwOW6q*14 diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$ChainDownloadSpeedCalculator.class b/core/out/production/classes/org/pivxj/core/PeerGroup$ChainDownloadSpeedCalculator.class index 7f8233e9aa96b6b92c1c5aeb1116ea612a7fb3bd..f20fcb7d78095e6d04f7d9b566573526a1bedd1c 100644 GIT binary patch delta 289 zcmWNJODF_!9LK-Ef9h*CSwr?97o{BRWg>BL*~^qrPR3<7XOHzN<6=Gbve{NUnk}rn zLO2j1inX;~S0xu0wO6j@W=@~a;nT+pd*QQqP_v*hifRr!b}-j8f&fPm;usnkhrtO% zIEg+^VSv+!a>g-gJZ%;Yw9(2rr%li52~=ODjtf-BN_BP z#$y@hiP$`q1TQ7cD{*-(@4S)E4&KTa@8p~JQs#sFvLJtaQ~?&1;j@b+)y*dr;j=RN TqI&tNEWSBC^<}XfBV_&qbVN^Y delta 289 zcmWNJODF_!9LK-Ef9h*CSwr?97o{BRWg>BL*~^qrPQ!t9M!O!xoOY4JdTn+x^4PpW zxX^|uELo4Ul8cMlD_3(fr_bl`>EngH@L4>lS{M7;~x#-8ssAn1t zKAX9MR%T$*K{r>?M;B49V~!h`=O)tJg3Bzj+{QU~@W@>hxQ8F^!{dRJ@lZ@2iRF8g z#}ea-*gTaabF#z>ad|24ypqorUdtD6*8%f#iQ?J0NMt(!guZz{_gEAjN9Qpw4PG`810X05M?;n*aa+ delta 43 wcmaFM`Id9TIc7%F$>*8%f#iQ?J0NMt(!guRz{_gRAjN9Ipw4PK`810X05IMQlmGw# diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$LocalhostCheckState.class b/core/out/production/classes/org/pivxj/core/PeerGroup$LocalhostCheckState.class index 872710a34c8afdb01baf847bbe15964884e87c33..5f044102407e9382b39cc30df80fd72ce180f043 100644 GIT binary patch delta 47 zcmeC;>f+jPg_+TP@>OPiAj!&N2P9osCJTBn@UnO^NU?Y^sIz!8n6S7{e!-#y04kpg A8vpf+jPg_+T9@>OPiAj!&N2P9osCJVYV@UnO?NU?Y_sIz!6n6S7_e!-#y04e(m A6951J diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$PeerListener.class b/core/out/production/classes/org/pivxj/core/PeerGroup$PeerListener.class index 84d84158084ef7fa411b63d13447a0fbf5a3b942..58b4966cac436f47748e7c02e551e2dabff4856b 100644 GIT binary patch delta 57 zcmV-90LK6L6ZjLbRtN>^00{u=lUoQt0q>KX2(2CT01E*102cuE04D(V051Uf06GBr P08Rk=09gS2lV%B$QFasE delta 57 zcmV-90LK6L6ZjLbRtN>@00{u?lLV(|a~-WLfM delta 41 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 BJSzYI delta 4094 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 HB+mCg-X3Kp delta 2938 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 delta 11733 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 diff --git a/core/out/production/classes/org/pivxj/core/Utils$Pair.class b/core/out/production/classes/org/pivxj/core/Utils$Pair.class index 3c46abe91d8c0092e7dfe7a876d46cbba5e8e82f..52ecf8ef201fb60401c0f25ad4b320171ce8f949 100644 GIT binary patch delta 25 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 delta 7110 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 hZDC-o#Ux#dY5F|R*IPJN{tK* diff --git a/core/out/production/classes/org/pivxj/core/VerificationException.class b/core/out/production/classes/org/pivxj/core/VerificationException.class index 025ac3d05bab0770daa24cad1c4b27cb4e5dd870..804467dc735309b02bd8f4035dc6c408f3f1ff36 100644 GIT binary patch delta 561 zcmZvY$w~u35QhKi#I(jJK_OyRmqbnC9^<|o)L;%Spm-2Ohoq567=tqj-g5E*!koPM z3gSWV;9VcWC-CZ3tSl}VDX6acss8%!dUm~coW6WKJ^@Hz&50I_SJOl_O-f8jOiLsP z?zCRg^11BM`gTq?Q%VtBXv_#Elp!(mduYF)^z6ZvM3UgKUWLadFr3?o-khg!a3}BEuo<|rFW)NE%`i~|4vb@al)mh~x z*f2&KuxJC8hK&P|vH0i%Y=3D%b`Yx3`s!of&Sb+GUquXYeoA1JK>}lF_}RYvSe0ZP9QBX-#YUSGq?^^ zRnfMqvaTz-z(T7T2rM#;ZB=Wf%c7#`m6}?p8-??nY$yUtt#%}xVHnzJloVaBTq{Mn zTBpP^!^p8xmW{6vHC@#Wft5Sv39m9pN3vE{w9^Y&&C880{-kn4oofuErfiowd6r{t zFMKX|v2ID+eBirm(|qKyPScj)x0D2fpYF+4H0y3HBldt zB0;@8X-YV0N(TDPf8|K;tTx@8NMUV*j&_vM$ISEVT7f|fai_zBVQN%))temu3A)5@ zRLh)Elf?Cs%a%){P#%riBz{1gS;f9dx~Z6F$^|TPZU|5!uy79?%5>K8f$3fa2kSVK zO)yCem6${$;>%4O}b8KLYnWE(R3Jrf$jMNCJQdqu_533EEHf-6j&8qO-K2S*N1777Fo;Nvj W&*W0EONEL(Jae_vK7ms_A?F(c%}r$h delta 858 zcmY*XOHUI~6#fp6whR?!IzY?IOt38vc?byd5CmUQQ}IznD=G|iXsGQ>olcF>7~E)F zYVOLga_i2Os8Qoa6MumV6BFIKa!Ck!reLUxIrq+Y&-u=GzI&f^f9sXLY`%F9V33+$ zN~`h;K?#S$wvn@JXQq(J@XtO!N%$^dfT{_T({`$mHB3iavTSW?#xhOL(sH`3XAQ@& zwf0E9U9*<7NWM3c*RqAYqnVbYEgG7e=%Zae%=z%zhcv;%99i8VjCRD*`fa^0lhn;r zU)-^m&D8kZHs(TS7Sl%38SgBCwzK>cAXP%1>IiLHByPdUOvXs*nSW}J-ANibXW25n z)F4O>w$J)8Mj?rU)QElzV2C{^LlcH^0FXl%!6+ks@ln=VC*2*0VVm`!K@7jX(n?sfwy7%+#iga>^1h{axFnhtn;e>mOaMcxa?izr9p%iBO3LmOzJ zb%fT%(|RKzOYY0&zC0bjg398JMpUZtyu(nUT&3E0qCzD(o~TqwiLX)pTMAy8e??6n WxWF~&ZZY1&PhKT1U&S;0K;vHz@Sqj| diff --git a/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$FileTrustStoreLoader.class b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$FileTrustStoreLoader.class index d518d20cc588b1af54d3cd3d203cab679d3ed1da..10cbf0dc1f10620f6a8bebdf44541af35a5b0f6e 100644 GIT binary patch delta 212 zcmXYrJr==G6okLL2oi}1A$|*?)Y$=r!an>JN{wY?C0d0_rLiFg;~m9&cjnB@oqG>o ze(-o-Z@`?zC3w0s#zfR{sOmL|X-G7}iI_`E?4)TlM@8c0t5m3ir+-6=|;P zZ8htarzfVA-RaO5j&VLRn+k*C?5&r-U1fE_(Pl%7(|>kkRipM?{Sz_6l&)qVU!;pO F{4ee75xM{X delta 542 zcmYjO%TC)s6g?B?VJsIC^9CV?;0P$ccy8{pe)=JwiuFRU9}~{{P^|Fj2t(ouv^|Uqf{YUoJ#^>pV2m=~9riWfoc_BSc^*%45_LF%v%-6o#KWyW@pfcFC*=5hR9)f(R-)C?boX2rLT-tR`xqF)^azM`vO+u~7?S zGli8E35^x8AX@kX_ywA1jHQVU9kF11cg92;lDX%eIrp4%pYz_&hhBAh8`~d00Vnyk z=6!FtNe5lDD*zb`-5i$f(cdxcM!Vayj#-oAa71=j66~c{enXl-A4m09uae_rYsJnN zECn$8-j5VIOjs*?M4RjYjhv#D)3SqR5{BHhPkcCV@7zwIi4}fOU8&e&l}~x zWtmmJ|Ag8M;nmZ78Rm}#3 zkk`7U=7V@@xL-I!^29BmVd2)il7I}2CNHQ_so#=jNz)Rlrucg?(pyrF|=Qn delta 1002 zcmaJ=OH30{6g{uMDMM*!6G4K6DU^?h6ctoN5#%FPM6_ruEX-iq`kA(*9Z)xRXJTTE zNtZ52Ok9zW7#4y?U7ENutlTJm@QW@?bU{KK&$Pkd0+Y_0JNKS@&bjZs-t@n$m7o89 z_yoW%e7`R*x-tSDzu%vVj3-n2;Dn~}qglXKAKZG{g;#hjqYjG#9bKu|L_Ctvm1r`h zbPgsH34)bzHKoQQdL*UP)uii`WK^k1H`Sz-_(WP)5=mVdizp`0iMLL)J2B-%K)^wc zxT*`Z)n~_C-fV-bw%dh|_#~qYp9QKes*`F!Qxma3P}3qYRa;Zc!xu3tzdBz%>z z3>`lDtKd9bJ%G@<|jG{c4lz_JPnZb0}Oo}S6j9Uw-a zR21PLI$=SXC`1=otk@!)IK;??N?}JgBRi^uh1@N0WH61Z6z`+E8BF3ZlTP%LvxFph zu^`3rs3Sy~^CeJDR4Ynpu8PJwXswsFhG}e+rlPc^(b8pBuF=p9TDna;cW7ja_wd=t55b_e zd!w?1AqgjPEhhnw$8B&U2L8)dvVmAA$1)78qD8`{6nJebg>B7eR6@)&9+MC?SpTGa2haX`^g;p*CXSkwRHve|~;vMA;wle~J-gl12s0drV??YjmcPSLM Zdq0Hc@Z}MfN6tRLx2I++p{9xj@jvUar-J|h diff --git a/core/out/production/classes/org/pivxj/utils/DaemonThreadFactory.class b/core/out/production/classes/org/pivxj/utils/DaemonThreadFactory.class index b9e156fccf7f3820d93f0fb4d7b91bb5ab30863b..d78e5d6bfbd5aef4b9bd9da0b61f98326cd44963 100644 GIT binary patch delta 244 zcmX|*OAf(M7=^#vmg*%$J>uD3q8KrdFt-@1FtUXv_F-yZ0oEkqw8Z3poc}xL-e>(1 z+2{NI0CwzeHuiHD%#5EOgKQg1ZQ`qr2pAJFp`)#jr)ufaQ!l1E4NQIwHiyDv%X>-% zSMs_^t^Rn!fT4)Cw6l7V?{dGAoeFPXE?6idqs3DDiiCBUPT`ls?03E|&|P zP7sP}&vj|>gdu93uD?s-DW2)j@SLGk3EMr-@da-MAum@0-zS)N?9lcc;eS*8dFJB@KQ$^hYYI|k5kum+O~UlhvUyprz6e+Uq$R##|g|q zM#-}1prn|EIeMHFA{2Ezz&vGHC6EMzLG?5giVKKh5piS&UzP0xsge6YY^;%_e(SP= zDRA0L;}NZAssDwt^sqLrp(>Zy9sE(uzVzUu{{Oia%~`yin?eRlq?5iWa@3Hc+QdVw zVHtUf7G=)Cq0V1`0`AaHvFI;3l~wHyGP^C?JIR z4_>?q{XV_<*z1LoQpZmw(zx)PZ1s}wa!detz ztjq9bjKftKuF1jmFg9eqA;ZluHe-lkErPdXep`lH5xgVwyE1Hrv8@pN#H}})3aPCl z`+;33+m(aDo!uj6uX#lwT5=C6cC%G?6v8{3f}}OnaQ3Q|eTB$QNw36KbSrLiU12Fb z>}c4Mxu+1=sP5D6_?BC7Znr+$b?Q6zZkd+UR&~!V-?Qtk>^)C;FMU<(TwEG?qv&PR$zYu>Qt1;$VHs&SO`W*HsS&9OB-Xhn zn<(){6@_@Z<6e6@=z5w;XNEQ5-E^iaa+K(fpBU|3rTq**y`9fncA0{VBz0dwRjF`| z+9-^bn)cqO+jdP$$tGb|hj!!8=pmtWOxqGTX<21JGe_$qng0N zMHDPt!exb-UNalc*IRCR-=P?B3G%gW`ZWvh;e8oOWRj09G;}v>^Nxkr@rFXO=g7PY z1qvp8!TM~J?FLIQIZ#b)low&wYL2{;<^Hzu6znhm06|_Hzezwq)HC84X-CJK z!E86)5?5(tym;5R6AgmdNAUf`g^@a>jk7wGWdL4k5};?1giIP)qH-hM`cJx@{~vDi zbi3SbkuS(vS|py$wGqhX+X(hblF&yBlxUGnazO_%tr72*CEjg~_)u#I$`nXYrZogL z*cyECq$H*K(<5VNb3Y;&IL<#<@s+T@*Tz>^6_gs zQ9SV*fS)#hKY(@u0>=y%&@bQ&I}GfWFqTLw!xVE^M;;&XL)3c-b~jxcFX;z&7B}!R zUx#@KrhI~ubYI~=iD)>X{=$41D~%P*%#cAr!gPt(65_Tdx6Q&t-u<3wuQtVuJG{HBd$8xtp+b5-**9MT@Y R9xJg3tIo$_6<74G_%9!Hj2-|0 literal 1962 zcmb7EO>Y}j6g|%~9>-(Xb{r=u`DoJujXid1AT1w_Ns9`VkWxTO)I~Qiaff7rv4cMf ztoR>nSV1>gfJBYN0x(_m*EXLcr%5!WWFQARtgP;~AZqmnR)fS}Kne?E9T3^qb!a+rbBe z&-a7wp1ju3+i;fjH?=^JBcP2R+7E=zkC$SV}w=?KAg9o8hH7$j@DNUBeEZ)u{ zgKQRg8J4k<#T6O0aaW-R z$d_a-Et2u7L)czzh~&5=IeoN7rq|dc*L4un8kx8(nYcAF6RjaAQy@W^))3VB*5Csn zB`MXP5gFgB{(z)?Qawe^8^R$q=X)frlj`qCJrrF}QIe^~{}40ZBL57oY)%Em6UzWB z+N`qx+6k~v7|hl$UL1=rkRZu%&F_m|CzK*N(}Se*tqhEMNct diff --git a/core/out/production/classes/org/pivxj/utils/Threading$2.class b/core/out/production/classes/org/pivxj/utils/Threading$2.class index c4a7a879e8730758968727d8c2d40c4a4fe14e07..7a069352c7efdfecaefc27b0a12d30e81bc0188c 100644 GIT binary patch delta 170 zcmXYpO%4G;5Jq2DPn*#g<0n=UtZgI?;AjpYVKH}*Sk97#12}-=h_9PX)vGV{zH4<0 z@%4E;fjyfpzFo}@Pk|#Sw07m!$G)hi1WrWFVdlVqkuFEg7^4y&beVR!y&pZ{hu~>cqWMK`i delta 544 zcmZuuyGjE=6g`v8V_l<3R4=ne=4M_0(F! zwka582xgYETT%3(-++bzhPef=(x^&D@jch$^J}i-5SiD6C#q6OkEc`hG2ePbYvwxs(Rusb+F_1%^q5oH7*|udx*grEY9hYTI?Ym9{3p8x^Kjr-C!x%R( zh6#oaONsK~s;F&>k}WYxI|+gzM0?aO-WhKi8^S2BU5l4cOd_kinaz=9Jm}+G(9VW1d2qQ`t5I6i! tBj2wzLf!a1^_hd=M+A$SnYM~SGh-D)X4bkz;Q?dYyEmA81};tlgP&iOac%$r diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$1.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$1.class index 2a6546d1da5fe134378c78dc7fd749fa07e76840..1007a26b6314ed781731920098eebed8f4cc2f6f 100644 GIT binary patch literal 1173 zcmb7ETWb?R6#gccZnJKiSfkdaYOAp(+t^L54?;zdSRt5Jw332vlg*H9vYCy0spfA8 zD)=u1tKx(B?2i)9B*6x>B@XP&nX}*d&UN?auW#Q0Y~fA{v$(3Z6&)$8>bQpMYRhZ5 zq2n^vG~Cos&`@MZ9dbASG7^zsDAhXrkXupcxR&inJMw)YL#y&ftU0nPnokvan_(tw zJ3+q8P^fu+%j!FauRGQ&?z$qh9*R)-Jx4l0=-7|Npwi}!R5tfW7v5($nA+%nf-2S- z5*4pW$)qV*u^06k!hg;iE@>8Op3U7l_Z@W~D-$XS2BRva@GCA40zp@E%8c@xlvCV~ zB<%&|d~QGFc6XQe$MpKX7x}h$aCQ$-o@u z4V-~tAdN*0w+w8+GEl}Q!|HM6ZGX@Yy}v4N;5N3XN5{a^T9hZw%y0@^E?d@po};-ekBt+58jY-mX@w#fje6Xq2ef=JX@VpgF-# zuOAME-FZQy(f3@JAzK&|Pvl6{I=5{R&_tJMruQa8Jgs8e6QgocD#bch=yObgoFJCT zsBQvuQfujxjnR`vhTfhfsY3U-(wOTx>EJwg45@X0=na%|LS+3wbNjkx2>7?}=1{pS4 literal 1376 zcma)6|4tJ@5dN;ej-Cfp{6$d_<$zX&3I#+#q_kJL0EN&}qiD!+z0iZ>uDM=8jPK*$ zVnT>9Jb+K*6BuW&HrUW;liiv5c6Yv=*`3`VzrLLVNFpoX9tOhb#{Do^4;UQeAu%w- z#4r;h0%C}>RS&~tJz{W>S&x|*e(K-0G6b^}hu{72*$Mu?1v8&|PF{hbC?9OxW$Kpi} zfwWzs@$MDF(sQ+g9o;FYJ0^|vtk{}r7FEY!_|ITx-c_}I3fjYzJO?3f*BnjH8qBG$ zW$0sj>Y++|$d+c>Rm0j{)!njP;xW!6DPjuKBCerF#8b?Oc!uXh#9R`lYV9U+cD|;S zvxaV#WXG``5wmRB91|}v!(*ONEQq+uC{kDyk!B);MGi4K+=O?yiTdFtT1F_1a}X8F z(w(%aR;zlIL*ycYwVgd(b2$vRN5(_uz;3m9w)N{#2PV2 z2IwhA=mYRYdRc`5q^VeGgkBS_;|A%Q1pM%m1$;UKcm7@Y3f~E9{!;`3Yo8HV_F#x$ z@B;D#Ll>}vAn(C5ggp}B1k|paLTr!_>?GJAA=pK*PVxmj!W7dj1ksB@43i$g1U-)+ zrs-*9Nayed??}H#8T+J79N{BrKY0NHe3a@aRq#(@Ad`BO`VhKa^XS8BvnV!0BDw83 i-N9Yb0rZnhQ17FeZqkT!&>uO0$%QEWhW&WC5d96hpIVXt diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$Builder.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$Builder.class index 39c8b86bc99dbbe71d4d5747e947f214f2cafede..77df3132fffffb173f8c2506f40aa8b1322def8e 100644 GIT binary patch delta 178 zcmcaAe^q`%I2Y$J1{Q|>4BQOICns=uGoGHjhAW!&3Ii*{)yamu;**uR{aEh;dH2A) zUhZJdmq6Yt1}=uzlV5V@vwj8gzJcXRc>Gv@0eQc{yn8&pYz+SySQ#0B+*DRJAd4L= zv5EJ;E;oZ3BM*ZeBR_*HqaZ^9qYy(nqcB4qqXGxZ0(t+yyn8&pY>Z3{tc=V+ZYnD$ki`X- z*u?u^mybb>k)OeiQHa5nQG_9ZQIsK_QH-IEQJkTbQG#Itqa?$8Mrnpsj4}*68RaM6 NJh_TL8UUC4EpPw; diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$KeyChainType.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$KeyChainType.class index b6eb60443bc603e06abaf60d3a83a980ffa47106..280f544b7900d67cea5fbc97825be3d89d91dc66 100644 GIT binary patch delta 35 ocmeyz`HyqMb7sb^lV33F14#)MJ0Ka((!jcnL7idi7{{R30 delta 35 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

7B?%PExfT4mQ>8elkC8T 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 -gQ3f~^sfzT7f`yd1R4D|}zh2h{ndZ>dQURA`! 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 delta 23 ccmZp5YIWKW&d9{jusM>^LJUMt7BAui09JPf&Hw-a diff --git a/core/out/production/classes/org/pivxj/wallet/KeyChainGroup.class b/core/out/production/classes/org/pivxj/wallet/KeyChainGroup.class index 45d8abe580e29468a2bf2b910eff1d0a1d4cc2fc..b8bd5b8f59112409f237b72a2aae1c2dc1f1aa07 100644 GIT binary patch delta 42 zcmV+_0M-AdTk&pHJe1-=jvv(0PS1}wl0 AJpcdz diff --git a/core/out/production/classes/org/pivxj/wallet/SendRequest.class b/core/out/production/classes/org/pivxj/wallet/SendRequest.class index 83e03618eb05ffe7a54d800afddaeca598dfe8ac..5cbbadee7ed8cf33e071baf3e76331c39c9ea715 100644 GIT binary patch delta 2829 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 delta 43 vcmaFK{gQjbZWcy^$$MCQS&bREMNK9ru!>JsWi?~90P-w>JTIW^YF0Y{6|f6I diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$11.class b/core/out/production/classes/org/pivxj/wallet/Wallet$11.class index 7dbd22a7d4e2099df2ce87987dc779c02ca86f6e..92bfd3f2abbe2d79bf376397245e756ec91088cf 100644 GIT binary patch delta 13 UcmaFI_Kt0XEHmSk$#TpA03|d8k^lez delta 13 UcmaFI_Kt0XEHmSc$#TpA03}ESmH+?% diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$2.class b/core/out/production/classes/org/pivxj/wallet/Wallet$2.class index 23d8e2bc97b7ff2976547045698d648b9f0fe405..cdb75f5ffc017181064661105bb9495549f447cf 100644 GIT binary patch delta 55 zcmaFP`f8dgTX$!l2`sfIJKGe$57GDa~-GDb6~GR83IGR88PFvc_3F(xoL0_gz8 Jq{$_0#Q=wr3{e08 delta 55 zcmaFP`f8dgT%$!l2`sfIDIGlnw=GDb2;GDb0|GDb7#GR82NFvc<1F~&1E0_gz8 J#K|RW#Q=tV3`PI| diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$3.class b/core/out/production/classes/org/pivxj/wallet/Wallet$3.class index def9a54647241395f4cf2aaa2a095b6eb4a3dac6..8ffdc60973ddad42cc99b3ce346a0f47fc6c696e 100644 GIT binary patch delta 23 fcmaFH@r+}`MP^2q$(NWTS=|}LxjiNuu$Tb=XR!ww delta 23 fcmaFH@r+}`MP^2i$(NWTS-ly=xqT)Zu$Tb=Xe9?G diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$4.class b/core/out/production/classes/org/pivxj/wallet/Wallet$4.class index ad39562a3f31f99830e924f70d0abb77c6f203c4..e7669b89c5c2b7a1684b425620ea115372c98e89 100644 GIT binary patch delta 23 ecmZ3L=3$un6JSyLF~xlL=J$un6JSu+^qxicsKXE6f+Ux^2f diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$6.class b/core/out/production/classes/org/pivxj/wallet/Wallet$6.class index 76ea28046d573beba6b4fcc67999bf25e7101dc4..fc3760a5368995c89f675ff985c3cfd0e3b03e8c 100644 GIT binary patch delta 23 fcmZ3>wU%qc1Qy2J$rD);Sqm8CxeF(MXE6f+UI7Pw delta 23 fcmZ3>wU%qc1Qy1^$rD);SxXq?xl1R1XE6f+UUdhG diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$7.class b/core/out/production/classes/org/pivxj/wallet/Wallet$7.class index 35fa68feffb91cbb0b3c484fdc88392b04d770e6..054d95a6f264f5676f73c17bc1fd07d2aa7362cd 100644 GIT binary patch delta 23 ecmZ3)zKDH;ATwjtWFh8I)>;N(?z+i2%w_;f9|h$A delta 23 ecmZ3)zKDH;ATwj#WFh8I)$;?$;{X=nTy#5NV+q-0RS@{1m*w$ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceType.class b/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceType.class index 577683b75dd5669f794ed019aac48524d03bcea9..f70b211d879ae23d1ca445771122cde4fa8a9f3a 100644 GIT binary patch delta 47 zcmcb{d5v?!0%k_7$qSkFf#gMIJ0K~*GFeccftSymL5k0cL7mTr!Guq1@)i~)06Fms A761SM delta 47 zcmcb{d5v?!0%k_N$qSkFf#gMIJ0K~*GFi}=ftSykL5k0gL7mTm!Guq5@)i~)06c*U AHUIzs diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$CompletionException.class b/core/out/production/classes/org/pivxj/wallet/Wallet$CompletionException.class index 608d2bc6af46c01afe5b0f731e125e034ec36ede..9d42fd94f9fc14f6d8f94876aaf0202efe486eb9 100644 GIT binary patch delta 13 UcmbQqJd=4t4kP3J$+?U=03culV*mgE delta 13 UcmbQqJd=4t4kP2^$+?U=03dV(X8-^I diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$CouldNotAdjustDownwards.class b/core/out/production/classes/org/pivxj/wallet/Wallet$CouldNotAdjustDownwards.class index 5f8d7be3f91457352c4e3c9f496f0912de916270..da17c5643cd2ecbe165536da066abc289c830dc5 100644 GIT binary patch delta 13 Vcmcb@e1&<#d`8B%lNT_W001aw1yuk5 delta 13 Vcmcb@e1&<#d`8BPlNT_W001a^1z7+9 diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$DustySendRequested.class b/core/out/production/classes/org/pivxj/wallet/Wallet$DustySendRequested.class index 0bd1398a127cf76c80e792c0d4902c8867c80b81..e22f42a5e8875ff5cfc686bc4ba5f80e6b3589a6 100644 GIT binary patch delta 13 VcmX@ge3W^^1V+ZklP5Bo001T^1rGoK delta 13 VcmX@ge3W^^1V+Z^lP5Bo001UD1rq=O diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$ExceededMaxTransactionSize.class b/core/out/production/classes/org/pivxj/wallet/Wallet$ExceededMaxTransactionSize.class index 5cf0ad41c90041753f4f474e4048b190e1f4d10a..fc494386fb02c0d1c1b89ec742a98b5d5bed1186 100644 GIT binary patch delta 13 Vcmcc1e3yB{3P#3{lUFjD001er1$_Vj delta 13 Vcmcc1e3yB{3P#4SlUFjD001e<1%Utn diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$FeeCalculation.class b/core/out/production/classes/org/pivxj/wallet/Wallet$FeeCalculation.class index d0841753d0edccadd6037dcd28cd91fa3f1be96c..9be7b68301ce82c450b1eff6a5b28c4322f49e42 100644 GIT binary patch delta 19 ZcmdnSx{Y;%6%*sW$<|CZK(d0#4gf(|1~>o! delta 19 ZcmdnSx{Y;%6%*r*$<|CZK(d0#4gf&-1}p#o diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$FreeStandingTransactionOutput.class b/core/out/production/classes/org/pivxj/wallet/Wallet$FreeStandingTransactionOutput.class index 19f932487fac33f7339a347f2cb9ed4ecb301f21..218882b376b9b4bfe87aa3bab35c3e88ca3a942b 100644 GIT binary patch delta 53 zcmV-50LuUR3;GMNngkKn00j}(02UG002>k603i|DldA+;0pXJd1x5kulT8Ic0q~QK L1wR4xlgk003i|7ldA+;0o#)X1x5kolT8Ic0qT>E L1wR4rlg^Txx diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$MissingSigsMode.class b/core/out/production/classes/org/pivxj/wallet/Wallet$MissingSigsMode.class index 2150034082d7d1ff8083c9ed0c431a6da36af59b..82ae798e35102d1f7107a28c521a7272104f3b46 100644 GIT binary patch delta 43 wcmZ3%xq@>;Co`k$5Q0JGO+{U5=00YYkH2?qr delta 43 wcmZ3%xq@>;Co`ks6Q0G^i+{U5=00q|yQ2+n{ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$MultipleOpReturnRequested.class b/core/out/production/classes/org/pivxj/wallet/Wallet$MultipleOpReturnRequested.class index 6349fcb521e76735bcc4191a65d542154a2b7f13..281d58e9d752dac83f794396528b8dce63879f1e 100644 GIT binary patch delta 13 Vcmcb`e2aO*Qbxw-lb11?001c)1!n*N delta 13 Vcmcb`e2aO*Qbxwtlb11?001d31#18R diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$SendResult.class b/core/out/production/classes/org/pivxj/wallet/Wallet$SendResult.class index df59f8dbc60d7633ba30e893254a2afb892d45a8..158b47849a15582eba18d94fd1fea98be213f718 100644 GIT binary patch delta 13 UcmbQiI)imXHWQ=ZT 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 WZ?ydrEAq!xC39PgUir^fCI26W;QQ17 literal 130930 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 delta 841 zcmah{OHUJF6g{`E8HZ{g)2e{TfK+H}#8;GuU?GBO6j(H3iw_)4I~J$YI-Mde6cdfF z9e#hol`aemBhmQS7=t@^{u=d8!E|Y6a=*EA&pG#=JF}U5bx8T~`@?4d$0@$9bcR+5 zk-ok@yI8B*&TPXpIXOb`4P=w^LGqGML5BQ<@d?{#REn0Pm8!OunXOtDgSDD&>y@HY zw6*?3ymD8M=&bG8PE|)~M(XVR%3o!Gl5#M)N@m z(oO{??IQFp>C5_{sawWi)-;QTZvN{&wQ{pqbIMgqqA(#oaG{0FId<7HMtN-HDXLI} zRP>-MlA!{%iASNAVkSJYdYP>sLy+TX_%MzRoIyV_7{mllVUn-2n86hCn8sC{Lm62t zqX5DpuET=`W?tme!)Gl09g=s00;%){qF>Sd4%#}u_u>l2-CGz|xyBizq2p2~3%MgG zT;x?iWzk!ldqJ}J6<(TaF(u}$0$iQy$C8%Qwq1W!1`&tq6(2e+GI!|?n; z8XgH5u@-5kjCd1S6Has_*K%*M`zk`HVGr)03pRRDM+y#3qJdHNJdL|Jj}^@0UQ@N* zRZYRqsuCI!;?28TY(}$5cj_Qd2;TUXU$;|~djR**h6h|-g@%V>RGkyA)qQEV-hlwe z$L#0{;&_g|c#3vB<4ImLJ4*26C5(xmYEM_IgP)b$jk*efX3vxe#gdc~!!hkYxaHVT zCLLDX|C*WZw>%1eQzN009QcF-1+Pjwas{7CO0M8nsV%obp^p?6x delta 19 acmbQwKA(L97c*nrWNv0h#>C0K%s~J%>;&Qf diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$2.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$2.class index 4e69d34db9a8a490554393c653341a3c2203e1ec..426391a796ddbabeaac6389eb46a8bb2ba00c614 100644 GIT binary patch delta 46 zcmaE<{!)EImXP8$1~caM3^~k|3>TQ)7)_Yv7*{a%G2UZrWfEb`WQt^T-rOw|#|QvU CR}9Vo delta 46 zcmaE<{!)EImXKmEgBf!hLk@EQ!v$tpMiZv5j4K#>81FGQGl?*!Get5wZtfO}V*~(8 C+6?#r diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer.class index 791bbd5de9fb18e5a862b3ed741ba439517500de..babd784d8976c83c1405bb1c905c8cb62c63bb1c 100644 GIT binary patch delta 16630 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 D8R7g( delta 15783 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 MQcUP9R9f2qKhm9BSO5S3 diff --git a/core/out/test/classes/org/pivxj/crypto/BIP32Test.class b/core/out/test/classes/org/pivxj/crypto/BIP32Test.class index cad24f638421ca779e86314fec057f29342b47c1..2d40396ab933e46a73646481d407c4d0cd0f0904 100644 GIT binary patch delta 2875 zcmZYBNzUy?6$kM5Xa+$+B!ehZL?%cK9_6m=NsxQX9qv0Zao@?!b?=&di}*HzL{`BX zGC@KNSOqtVZiHX~R{2-wod2oszWwgozyAFfZ=SF*Vt5FoM|uR&uxSo5T{;GZtQzCO zJPOsm#t*9yCToAY0mgzrXq3)sOOoeQdQ4X6Y0)r|>y4F4Bk}H;67}_%HBMtpF-i9n zfIB)H*2d2HC%w^@&j4+&n1yqRLN8VkeCDbBqX%Pn&n4%aQs5`@UWPb0-Dyg9`N6`4-^xOF zZYtR4t=eoOD3}HhjL$#(<-@-}e)!xg*A4u3`1D8R6ZqjbekgVJX7uuTOfl97NyYWD z+{pb>c|DWt0ksV$y=KGOPSxbx`8`cWC(*vMwN~(mCIN%F$1yiQ$w5mZYD1fj2HL?l zdYb^Xs+MNXN57Bs66f+u-pO8?cJrop=0T)%>K#T<4xu`1s*B|Be2H zDKB?%W18Pr;{FyF&U`<@l`7%VWVh-%ed!N!4HZlP*W(GtW^}LtnV73voH4-+Zj{4= zkCUqB4!CbR)fFeGwV2T+$xbRvEF?r#cWh9T0JxWXSi6z78XPr|toCe=G29J~w_z4q zl=BnIda z8jjT6lYH@Vkveg%)g>;y`}s8SNhvAX6{;@UA7xqgspj4c$uRh08pz*Y@)^>35|*NG zhWaRMu42ebM3FlVI?~}wobaQY;<}Y!W%~&Y`ty(>eSoXzGeZI?3 zXj^pT9;wOo5hSpxud(!z5QWr=GlLOuf?aT(S5w_PJ9(v7g`%|tiHR8dZbZIz>?W9i zLqM^6F(30zNpLf=tZ!Bt=<$32R;0*A&TvA-1gG<&gsEK&^8>-cH7{AXq3b1e72TSy zd*3}W4CEkns2dQG&3A(qF4BOO-e_1;eOwkUmt*3p#rr>h_5S}^Erf^b0K8KyFK5_w z%ufZ4Nfvr)(;11OF<5OaL^bDA6-y*{lMdgQ3Ll%gqxRaScO0GvWaV+iIV7&%9J89r z*`Ve)bFuD=`O50IXI9&dB2_7#rEXq$gy)u=5gxEWF-s&CuV{{sKc{1p`zcT|kG~^+ zAYt5Vn6fFXx!&>X|`R1t?A=hORQo=%J#`wly9+R(FMsri( zdFu*v1GNUCzL!MI9_*?qL#VByzl9r?c6KceWrad$kh#5JIu6Q%tc9#Y# zW@s^$x6l|!C*G1B%S^}%n!x8*gK@lf=pLty7uE_lPw={!*DY4pw=AbS8e8g8U)Ygo ze7CW;tz}%^?N`N18ZvsOysA>@xw_W%>V2nzjwr+D+vUh?&IGv_7E}(Go!FWrPfawh z!Q`1u(gL!7>J#98PTd2o70wSntl;3hPXkW6&bD znz|^|-Qj#B^Dpcqc9vZlQV1avSjY#bC3?6{d)VOPQzGqYT>{34BorC-zAp_4&6v(| zsqYFx&h!e%0vBv)Y>y(8%t>akLNk0==9tyBx)lnV;+I`Lt4igP6EVcFMpL*+JN;=jx)? zymFr{@W~sig1uaDAmkNcJnFp1U(7ih^hYvanc`St#Th*a59e9+g;GzEU4g6 zJRa=>w6{BKSyS^OvI(@NIkgQ}cmBQ`Dl{eK47{}>v|hx!qSbA~@PI3=Hd`oF2f(#S z>^bYE+`PUF=eVT=f#{chFjHZtnYf0PgD;W7u+t>bkp?-;LhL*l>Bm`wu^+{oY{zlk5h|l_NV10`&y1MPXJD~ZZl}TuFeXwz1sEF?_r7L5!A)pM}dL5xgp^s zum)i%?Kx1bDkz#1YW;fmO|r(jO|y^F?wr$x1NA^W7@4P5rNb3lNqD$iMd?liWK{65 zF~}^wxBJ;=kh7r5bJ=t3IGo_!noe$& z5_qDlb_Nrqf!;_h8I<^@CreE_S2W=$DNk94GG}xx3`3rf(Z+G(y2E;X`OSZ$Kce!} zePiRW;y$~+t#Hk4Hz)%O4l=SPEt;H?e~XioQXG9Ir+UFmyhD~B*8sYtcx=Kgf%$4> ztXr?qa+u<<8$)jy!(GS9#GvN3088sW4oR=kpKcywc{4Ln$;C<1-?JLn)WN@XP8J8Z zb?dqZff=MQ*nMS=4=cia&!{F*F?Agn1DcDxD7njdjuO5pHQAHJxMAzu%^`V`{7|{L zw-aTi1^DaB7ysk_i2fvJP=zm4&M}O*yNHc_s4k>X=w)&th&MO4Of)R(O;!8DQtj7^V|DC6dBijn=x%0f|_%El=N(nBg9+ zB^R4Ov(g~T0#|y4%xmh_u(G){*?<50XTSSlq!|pk$$O}L|2Tc8%2iM1FT_z{p5g$Q zEq{{=VGz(KHV51Vk~Gw#Osa#jlSyL$TP&z5?Xud+Yzkx+op~F)ruJf6FdYrho{)Hh-a2#vzFNP8we==Mli^NKC zP%ja)a~tI*>gEBX9qN*j#oa?8Vtq4#wGNuv+&J5`R*l6a!O%-N;z&usF88@t<2D>T2>H7&?lFy1G8u^(;lWyorwk9hvt09$ zPhYBEHX)l~uM1^wN+Y)k zud^N&_jFBZvC*>}eqqV$%U2KVSO3A@Vjplsjb@JqLWjYKeOr~A%}Ry35=E-0EJO<2 zS(O^YSvG4T*AAT=#XZ6Fw_*|LYp4ixl^AQ4+c0^oC3$Ld@)kIRON9(7a4N&+2PTwH zEH6@9UFXSstv3*ZoT1!ZboQO8soVr81@wppo{?gQ1+# z5F{SWb3skf+R&CU4#>kTw_Z&)j1(RpaV@Ju|N8Rv1N-$8%OLh>GXNBbVv$YR^-1T7 zV`YRU4A5wY^`u#m4(Ap-l`ssVkvAQ1-ekj^J@v?+zLorI8cT-?^V ztW=A7edHzq^;0p(o>;+V#kKCo^$Q(Q^ppo=g@lOOBX%u4pBtGz8PtCU?+w)n9mWPwg2jtHoac diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1$1.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1$1.class index c344ab16f1dfbee019a3adcc468ee7f39eaf8b2e..a223509608b08ca148908e557024205700d578ae 100644 GIT binary patch delta 27 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 Gx#z!Xdr4FP diff --git a/core/src/.DS_Store b/core/src/.DS_Store index 7962231735898597e50341f3cd5dd6a19b8548ac..05d8b2aa851d628f6da6662a46b74927978f1a71 100644 GIT binary patch delta 1360 zcmdUuO>9h26vxk>()(U&dS}|+cGP2HG%W`G7_HFKs>VX;M86}{Oy5gAUf<9+ol(_{ zg^2h_Brm>qVj~h?4GU~+gpG~H*QOzCEG%p!Hr$yZVIk4P#$CMk&N=tobKd`V?$OB6 z$e9lKZbu#z!siz74S4Fd^CR=i#>c~}*MtJKb=4E0z<5JLbtn+7tDl%q+-qfF*YBsgOjrPeU6E8SK!W>`5_SgmJ#i_)9S^^$Y?)U{0M z8;lPR8+O9U7H@14VppbYyF2MCmOb=mj22zbbijhmRk>eKIEay-7E_oSDMJ0EQ;JT} zSvp5o=sMk_hxC}9(Q|r1FXz-g{4@I5Nfa%>(GSt zXhl1=q63i-dN6?9h+z=>kiaOCNaHxp<03BMGOpqVZsHbh<31j^V@2&At*uzC{EbiB zjQJ?93o;zMzM|rig~6&&P5ruNx3jo6-7OV14tA$ZJ+Y@h>I@pTZrVe=Nz*Z7mcjGA z2q|pJUs@)#fVP<^uUKvfx-HlB$JXezZad5fXswkX(A@fHr*XRyCl1$#vv?TG7K1&uPSrkA> z4gmzQ1Ql3`Rgy$4!dVi{X!${78zR-{#}4eoF3DsM_QJw2Y@{%TaU8}3j!7~na1y6* z7UwdI-06}HC7j}9$?+JF0}_>A78#Uqqhh`XrE-`qe9JB(w_GeOnk_ev&`>Pp?2lRT wn2i6$&8+>Imh2p{t++iT(=gd0&alb+z}LL=Om+UpGVh+L&i|9lZi_hm9Rj&RKmY&$ delta 1127 zcmcJM%TE(g6voeoC^HkZw@}()Ktz#Oc?!r&l((8tYz?m(h*&zKPJ|X{DX(ZTvN2Hv z$A!kYF($qih7dMtV&X;?CQ2mnu`nh^UAS?piP2lyKY)ea#l5-byXT&BzTd2C)-~^h zY0>q>1e1}->ak)t*o%MLKT8Vf+PHH# zsQZ0^Zf!KcPs3?$65YDj@9WT~G-JV>9LHchH@AehZZk2fO_tqb1Nz9A9-L%Zg0L2e zrlreLpXv!}?S551scR}*7Q}TWGhLQ@BTDnA#&LZPYX_79{99^NCbcY_%GCiXg z^palDYg(lb^qIcUSNcXj=r{cV0gzyY4Kj8j2YJYc9p$J-E%u=ft!P6#j=%{wPGA6D zs2D;BY2%o{dCcP~3|zx4+{HcI#{(?ksWFx8P?Q!+>qa428N~OA5j)ID$(EFitlWaq zy|wj5ucas46Ve0vz@XMOuB*Y*$235 zrEEnMIm@V)t=I*D#YL4Or9|ZL*rupfCRGR=6WbhBtE3u{gJkiMYdBS@lMV=+7uyn* z)1)T;F9}%(qm5H4ZWj}oWOVP{!i|F0?g~qry(5~$mQj}eR_h_g6{8BXH@F5xofIF$wCQ%b$jZ_R=*GDBt!uP diff --git a/core/src/main/.DS_Store b/core/src/main/.DS_Store index 48700441833426e43df8e48fdc13f9f42ba6bf59..f0a7b4f3e0801bedce270a281bb146c0c0006838 100644 GIT binary patch delta 1149 zcmb`^O-vI(6bJD4N0iwOAJbA68eD8B4XCS9s6hBIRUpQQN>l_w1PZ&+l~U9#MJTl% zh%xG|5hLD=7h|F*(Sv&NV)Ww0#;*&}=*5Ev4|;Xl#Y7JtB<^8f-kY5_^Y%9voC_}Q z<#>_m;^+31#p8kPO`4~!zBZwG;*E{9nkP`-kVr_Z)aP&8Gdw;$6Q50-y++vwupXDprBBKwqTiHF!>OB`=kHp!aAE$Q%>8PT&9Wt;40T$g&np%Ei&mjZGF<9nsv zn0*(!=#-n8)HgaYK5j&!R`&4LHboiC9NU#za=OGF`ZLK+UC-Qrd4o0f2oeV|a#JM* zsFk{@pLCj{%XEe2=?2}VhxCM=(Mx(oujviFr4RIxKGA3TNSN}Ju8q0}!+J0f>ehxs z{50IACefq&gMkixLNn$}87U0LGgC`+{f3Rqk}b=g5uZLZqKC(sO%Rr2QERR&9aFtw ztv#sfCv{C_3xXI|@^fXmH>NZXYkXIe3ES+l)EVOcGjH-?kwcO?&*%Y_g~UW^S-B*4 z^?Q9C*Xr0Dh3dNbrfSb zkIT3M16OeqcW@W?a3Aw{VoYSX6s0Azb)}Fj4C1?WF*{7=jLfV&TS0Nf&W624Z)Q)l zC!&XRU%%Ehs;lACN4+7x7EtxTsV;7}HYS)*BC_;ljy6ZhSGEe=C?>?Ol3fu+&N89d z6^9_Ol!Q{Ml#3i5Ta(Z#rD}m=Vrvs>tyC{^kSsNJjpitg(jI~HVrdE4DmC$cNw7H! z6985~;ubxi$DG1zdP^TTfp6UXU)=e0nBvY`k&8SOaQ7W3Mk#7gi+WC=8MQ4O!2uk` z5p_j4Ll&!h6)uZAQGTb1Y)8nMENKof`z`sN-0WPK15On zVvMrAfB`q-VoU@jI;e|@@ndnZ@pCX5T^t--m`uEFSsWakT)e}3Ip^e^bKdWlyWm~$ zuCE#KLSHvt*lC@ctJ~Y)DygZh)*DSKR&<}K7_0h>sobD+80CY$;OIp7c<`L2x8xsi z4|5)iXvegWKN_6U+Wk>2GR#d=L2bJ0Of)zVj`V4h5%IQrt0{H#!n}5s8*+0Li(+Hk z&U~?v;MrI(I-AHbY``b3}U3w@>Uw22I4A`1*gs3<})oY;*DxZp-3n&82Hw4oD6(1mUn`Y?=>7{MsU z5Je1Ah~pBjVg;+Xh8wtzHLT+f9^j$=!F8)$D+p^dx+l*X=UGO$B$lvQtcqHqmNNdF@pLFVRH5h|<49K>Y6W9_TSBo| zZF?$JnQs^Vq*Pc_E315mP{mT=z6M$58Ny|{+Uyb4Okr)SZ-Lw_Ha2g?u vBaCUxVh-mqZ^A{P;WDmZ5ldK33ej6E&o;8Gn;H5~v-7`)t;_IFJUsaYelQk% literal 8196 zcmeHMPiz!b82`R)p)&*6S1fe8t+-k%rL@q0P@tgOe*!_IvZXCh-R|xT?ZnxcvNOAF zsUY&aq0Z5jT+HW-W zzx_b#$D-0_B4nGf zi$#7VP-4()p*my}%-6o!VdVgc4^Pb3~3~ldfS~&XAsQNXA*Y zL-abFvaNxP?%9V^wwX;^PMlSw5@srECS1MSG-Jj&-5GK9Y1bQ_a_o%T>pPAZ6zl2Y zjAb4DxK05^PVb{IhoO9Z{ig7Pbq&pJon6se8}2J-6&n@h6yagH#u-D;oR~5+cj9Ei zN$HkmSmVPv!!eSkK4>MxX)N#ktRaA#PZB>CE!T2&d=+I(WLO5<~RFuKz=!3x=k!r_IMLl6AlDf$>ndfQm zP}JcZM~od2$~_wubtGk{)AT5g(Ct5Kn(uZIabeM!0xCocvWw-)Y;X}9qpTXzwC42>6!#D5)`~*M4 zFYqh;4u8TOB&wi-o3RR2d?8hT`6raLlID%uC#1v|n#vD%J zG`@hZ;A{9gzJYJ!d-y(H!w>Ky{Ddznl>eX~;`4lupVH_q1;vXjbbL7qhWje}SBZk( zujjnGzjD)-x~FWDMy?Ns*4 z#9UU&t^1Y7BqAtV%dIs^58W327SrB=>+mtL>|3}EKN7=!BX<2k%qqhQpIJ3ni(7Cj zv8xfcV>9l?PTWfj>%~4|*g+h?r!j_uID~P*G94|n@hoQ0#W_5W^Tf6bcoAR1OT@ZY z@iM+!#Iu8WhH;5k@A9nZKq+)w)maJ8u6p%<|H{Aruj(3u!BR^ zQ?odoS8GS;8l%f=p5Hu|eh77bIZo0q$4M^yVMyZ$xq2~CA?LXy4YmLNhk)Sx*ZJ8S Kod5Um`TrL 0) keyChainGroup.setLookaheadSize(lookaheadSize); this.pivWallet = new Wallet(params,keyChainGroup); - this.zWallet = new ZWallet(params, zContext, seed, lookaheadSize); + this.zWallet = new ZWallet(params, zContext, this, seed, lookaheadSize); } public MultiWallet(DeterministicSeed seed, List wallets) { - this.lock = Threading.lock("MultiWallet_1"); + if(wallets.isEmpty()) throw new IllegalArgumentException("Empty wallets list"); ZerocoinContext zContext = Context.get().zerocoinContext; + this.params = wallets.get(0).getParams(); this.seed = seed; for (Wallet wallet : wallets) { if (wallet.getActiveKeyChain().isZerocoinPath()){ if (zWallet != null) throw new IllegalStateException("zWallet not null"); - zWallet = new ZWallet(zContext,wallet); + zWallet = new ZWallet(zContext,this, wallet); }else { if (pivWallet != null) throw new IllegalStateException("pivWallet not null"); pivWallet = wallet; @@ -80,8 +80,11 @@ public MultiWallet(DeterministicSeed seed, List wallets) { } public MultiWallet(Wallet pivWallet) { - this.lock = Threading.lock("MultiWallet_1"); + this.params = pivWallet.getParams(); this.pivWallet = pivWallet; + this.seed = pivWallet.getKeyChainSeed(); + ZerocoinContext zContext = Context.get().zerocoinContext; + this.zWallet = new ZWallet(params, zContext, this, seed, -1); } ////////////////////////// Basic ///////////////////////////////// @@ -96,17 +99,17 @@ public NetworkParameters getParams(){ public void addPeergroup(PeerGroup peerGroup){ peerGroup.addWallet(pivWallet); - zWallet.addPeergroup(peerGroup); + if (zWallet != null) zWallet.addPeergroup(peerGroup); } public void removePeergroup(PeerGroup peerGroup){ peerGroup.removeWallet(pivWallet); - zWallet.removePeergroup(peerGroup); + if (zWallet != null) zWallet.removePeergroup(peerGroup); } public void addWalletFrom(BlockChain blockChain) { blockChain.addWallet(pivWallet); - zWallet.addWalletFrom(blockChain); + if (zWallet != null) zWallet.addWalletFrom(blockChain); } public boolean isEveryOutputSpent(Transaction tx, WalletType walletType){ @@ -122,6 +125,7 @@ public boolean isEveryOutputSpent(Transaction tx, WalletType walletType){ } public void commitTx(Transaction tx) { + // No commit boolean isZcMint = false; for (TransactionOutput output : tx.getOutputs()) { if(output.isZcMint()){ @@ -350,6 +354,10 @@ public boolean addTx(Transaction tx, WalletType walletType){ return false; } + public List listAmountPerDen(){ + return zWallet.listAmountPerDen(); + } + /** * TODO: Add fee here... * @param amount @@ -357,18 +365,25 @@ public boolean addTx(Transaction tx, WalletType walletType){ * @throws InsufficientMoneyException */ public SendRequest createMintRequest(Coin amount) throws InsufficientMoneyException { - Transaction tx = zWallet.createMint(amount); + Transaction tx = new Transaction(params); + tx = zWallet.createMint(tx, amount); SendRequest request = SendRequest.forTx(tx); pivWallet.completeTx(request); return request; } public SendRequest createSpendRequest(Address to, Coin amount) throws InsufficientMoneyException { - Transaction tx = zWallet.createSpend(amount); + return createSpendRequest(to, amount, false); + } + + public SendRequest createSpendRequest(Address to, Coin amount, boolean mintChange) throws InsufficientMoneyException { + Transaction tx = new Transaction(params); tx.addOutput(amount, to); + tx = zWallet.createSpend(tx, amount, mintChange); SendRequest sendRequest = SendRequest.forTx(tx); // TODO: check if change this for a new zpiv mint is a good idea.. sendRequest.changeAddress = pivWallet.freshReceiveAddress(); + tx.verify(); return sendRequest; } @@ -402,11 +417,6 @@ public Sha256Hash getLastBlockSeenHash() { /** Saves the wallet first to the given temp file, then renames to the dest file. */ public void saveToFile(File temp, File destFile) throws IOException { FileOutputStream stream = null; - if (!lock.isHeldByCurrentThread() && lock.isLocked()) { - log.info("MultiWallet, lock is held? " + lock.toString()); - } - lock.lock(); - log.info("MultiWallet saveToFile lock"); try { stream = new FileOutputStream(temp); saveToFileStream(stream); @@ -434,8 +444,6 @@ public void saveToFile(File temp, File destFile) throws IOException { log.error("Failed whilst saving wallet", e); throw e; }finally { - lock.unlock(); - log.info("MultiWallet saveToFile unlock"); if (stream != null) { stream.close(); } @@ -461,16 +469,10 @@ public void saveToFile(File f) throws IOException { * {@link WalletProtobufSerializer}. */ public void saveToFileStream(OutputStream f) throws IOException { - if (!lock.isHeldByCurrentThread()) { - log.info("MultiWallet, saveToFileStream lock is held? " + lock.toString()); - } - lock.lock(); - log.info("MultiWallet saveToFileStream lock"); try { new WalletProtobufSerializer().writeMultiWallet(this, f); } finally { - lock.unlock(); - log.info("MultiWallet saveToFileStream unlock"); + //log.info("MultiWallet saveToFileStream unlock"); } } @@ -498,7 +500,6 @@ public void saveToFileStream(OutputStream f) throws IOException { */ public MultiWalletFiles autosaveToFile(File f, long delayTime, TimeUnit timeUnit, @Nullable Listener eventListener) { - lock.lock(); try { checkState(vFileManager == null, "Already auto saving this wallet."); MultiWalletFiles manager = new MultiWalletFiles(this, f, delayTime, timeUnit); @@ -511,7 +512,7 @@ public MultiWalletFiles autosaveToFile(File f, long delayTime, TimeUnit timeUnit zWallet.autosaveToFile(vFileManager, eventListener); return manager; } finally { - lock.unlock(); + //lock.unlock(); } } @@ -523,17 +524,20 @@ public MultiWalletFiles autosaveToFile(File f, long delayTime, TimeUnit timeUnit *

*/ public void shutdownAutosaveAndWait() { - lock.lock(); + //lock.lock(); try { WalletFilesInterface files = vFileManager; vFileManager = null; checkState(files != null, "Auto saving not enabled."); files.shutdownAndWait(); } finally { - lock.unlock(); + //lock.unlock(); } } + public boolean isAutosaveEnabled(){ + return vFileManager != null; + } public DeterministicSeed getSeed() { return seed; } @@ -566,4 +570,12 @@ public void decrypt(KeyParameter keyParameter) { public boolean isEncrypted(){ return pivWallet.isEncrypted() && zWallet.getWallet().isEncrypted(); } + + @Override + public String toString() { + return "MultiWallet{" + + "pivWallet=" + pivWallet + + ", zWallet=" + zWallet + + '}'; + } } diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/PSolution.java b/core/src/main/java/host/furszy/zerocoinj/wallet/PSolution.java new file mode 100644 index 000000000..ed3f6284d --- /dev/null +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/PSolution.java @@ -0,0 +1,114 @@ +package host.furszy.zerocoinj.wallet; + +import com.google.common.collect.Lists; +import com.zerocoinj.core.CoinDenomination; + +import java.util.*; + +public class PSolution { + int number; + List selection = new ArrayList<>(); + + public PSolution(int number) { + this.number = number; + } + + public PSolution(int number, List selection) { + this.number = number; + this.selection = selection; + } + + public int getValue() { + int value = 0; + for (CoinDenomination coinDenomination : selection) { + value += coinDenomination.getDenomination(); + } + return value; + } + + public void add(CoinDenomination coinDenomination, int amount) { + if (amount > 7) + throw new IllegalArgumentException("Invalid amount, it's greater than the max denominations, amount: " + amount); + for (int i = 0; i < amount; i++) { + selection.add(coinDenomination); + } + } + + public String parseSelectionToString() { + Map amountPerDenom = new HashMap<>(); + for (CoinDenomination coinDenomination : selection) { + if (amountPerDenom.containsKey(coinDenomination)) { + int currentAmount = amountPerDenom.remove(coinDenomination); + currentAmount++; + amountPerDenom.put(coinDenomination, currentAmount); + } else { + amountPerDenom.put(coinDenomination, 1); + } + } + StringBuilder stringBuilder = new StringBuilder(); + Set> entries = amountPerDenom.entrySet(); + Iterator> it = entries.iterator(); + int totalAmount = 0; + while (it.hasNext()) { + Map.Entry entry = it.next(); + stringBuilder.append( + entry.getValue() + "x" + entry.getKey().getDenomination() + ); + if (it.hasNext()) { + stringBuilder.append(" + "); + } + totalAmount += entry.getValue() * entry.getKey().getDenomination(); + } + stringBuilder.append(" = " + totalAmount); + return stringBuilder.toString(); + } + + @Override + public String toString() { + return "Num of denom: " + selection.size() + " , " + parseSelectionToString(); + } + + /** + * Returns the amount of free space denominations that this solution has + * + * @return + */ + public int denomSpace() { + return 7 - selection.size(); + } + + public boolean isValid() { + int space = denomSpace(); + return getValue() >= number && space <= 7 && space >= 0; + } + + public PSolution copy() { + List list = Lists.newArrayList(selection); + list = Lists.reverse(list); + return new PSolution( + number, + list + ); + } + + /** + * Calculates the quantity that is needed for each denomination + * + * @return + */ + public Map getNeededDenominations() { + Map map = new HashMap<>(); + for (CoinDenomination coinDenomination : selection) { + if (map.containsKey(coinDenomination)){ + map.put( + coinDenomination, + map.remove(coinDenomination) + 1 + ); + }else { + map.put(coinDenomination, 1); + } + } + return map; + } + +} \ No newline at end of file diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/SelectSolution.java b/core/src/main/java/host/furszy/zerocoinj/wallet/SelectSolution.java new file mode 100644 index 000000000..67905934a --- /dev/null +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/SelectSolution.java @@ -0,0 +1,47 @@ +package host.furszy.zerocoinj.wallet; + +import org.pivxj.core.TransactionOutput; + +import java.util.HashSet; +import java.util.Set; + +public class SelectSolution { + + private PSolution pSolution; + private long scoring; + private Set outpus = new HashSet<>(); + + public SelectSolution(PSolution pSolution) { + this.pSolution = pSolution; + } + + private void addScoring(int score){ + this.scoring+=score; + } + + public void addOutput(TransactionOutput output){ + this.outpus.add(output); + this.addScoring(output.getParentTransactionDepthInBlocks()); + } + + public PSolution getpSolution() { + return pSolution; + } + + public long getScoring() { + return scoring; + } + + public Set getOutpus() { + return outpus; + } + + @Override + public String toString() { + return "SelectSolution{" + + "pSolution=" + pSolution + + ", scoring=" + scoring + + ", outpus=" + outpus + + '}'; + } +} diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/ZCSpendRequest.java b/core/src/main/java/host/furszy/zerocoinj/wallet/ZCSpendRequest.java index 8d87ac1b9..8e15a8848 100644 --- a/core/src/main/java/host/furszy/zerocoinj/wallet/ZCSpendRequest.java +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/ZCSpendRequest.java @@ -24,10 +24,7 @@ import org.spongycastle.util.encoders.Hex; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.*; import static com.google.common.primitives.Ints.min; @@ -72,6 +69,7 @@ public void addWaitingRequest(GenWitMessage genWitMessage, ZCoin zCoin){ @Override public Transaction call() throws Exception { + log.info("Starting the zc spend.."); if (this.peerGroup.getConnectedPeers().isEmpty()) throw new IllegalStateException("No peers online"); Map,GenWitMessage>> genWitByDenomination = new HashMap<>(); @@ -98,11 +96,19 @@ public Transaction call() throws Exception { for (Map.Entry, GenWitMessage>> entry : genWitByDenomination.entrySet()) { requests.put(entry.getValue().getSecond().getRequestNum(), entry.getValue()); } + + log.info("Requests created --> " + Arrays.toString(requests.entrySet().toArray()) ); + // TODO: send this to several peers and not just one - Peer peer0 = this.peerGroup.getConnectedPeers().get(0); + List peers = this.peerGroup.getConnectedPeers(); + Peer peer0 = peers.get(new Random().nextInt(peers.size())); peer0.addOnGetDataResponseEventListener(this); + + log.info("Sending genWit to peer --> " + peer0); for (Map.Entry, GenWitMessage>> entry : genWitByDenomination.entrySet()) { - peer0.sendMessage(entry.getValue().getSecond()); + GenWitMessage w = entry.getValue().getSecond(); + log.info("Sending message num --> " + w.getRequestNum() + "\n denom: " + entry.getKey() + ", merged amount of coins " + entry.getValue().getFirst().size() + ", starting height: " + w.getStartHeight()); + peer0.sendMessage(w); } log.info("Waiting for node response.."); @@ -114,6 +120,7 @@ public Transaction call() throws Exception { } PubcoinsMessage message = messagesQueue.take(); + log.info("pubcoins message received -->" + message.getRequestNum()); onPubcoinReceived(message); requests.remove((int) message.getRequestNum()); } @@ -138,17 +145,46 @@ public void onPubcoinReceived(PubcoinsMessage pubcoinsMessage) throws InvalidSpe try { if (pubcoinsMessage.isHasRequestFailed()) { + // This most likely is a early spend, users will have to wait more to spend their coins. log.info("Request have failed for {}", pair); - throw new RequestFailedException(); + throw new RequestFailedException("Message doesn't contains the filtered coins"); } List list = pubcoinsMessage.getList(); - System.out.println("amount of data received: " + list.size()); + log.info("amount of data received: " + list.size()); // Create accumulator: // First check that my commitment is in the filtered list if (!list.contains(coinToSpend.getCommitment().getCommitmentValue())) { // TODO: Notify fail here.. - log.error("Pubcoins response list doesn't contains our commitment value.."); + List hexNotAddedCoinList = new ArrayList<>(); + for (BigInteger bigInteger : list) { + hexNotAddedCoinList.add(bigInteger.toString(16)); + } + + log.error("-----------------" + + "\nPubcoins response list doesn't contains our commitment value.., for commitment value: \n" + + coinToSpend.toJsonString()); + + log.error("\n\n Waiting coins:\n " + Arrays.toString(coins.toArray()) + "\n\n"); + log.error("GenWitMessage: " + request + + "\n\nList of not added coins: " + Arrays.toString(hexNotAddedCoinList.toArray()) + +"\n -------------------" + ); + + // Checking if the coin is on the filter or not.. + boolean containsCommitmentValue = request.contains(coinToSpend.getCommitment().getCommitmentValue()); + + log.error("------> containsCommitmentValue: " + containsCommitmentValue); + + log.error("\n\n ############## Waiting coins of other denom: \n"); + for (Map.Entry, GenWitMessage>> entry : requests.entrySet()) { + for (ZCoin zCoin : entry.getValue().getFirst()) { + log.error(zCoin.toJsonString()); + } + } + + log.error("\n\n ############## end Waiting coins of other denom: \n"); + throw new InvalidSpendException("Pubcoins response list doesn't contains our commitment value.., check core sources"); } @@ -183,9 +219,6 @@ public void onPubcoinReceived(PubcoinsMessage pubcoinsMessage) throws InvalidSpe } log.info("Valid accumulator"); - log.info("accumulator: " + acc.getValue()); - log.info("witness: " + witness.getValue()); - // 3) Complete the tx @@ -213,7 +246,7 @@ public void onPubcoinReceived(PubcoinsMessage pubcoinsMessage) throws InvalidSpe if (!coinSpend.hasValidSignature()) { log.error(String.format("CoinSpend signature invalid, coinSpend: %s", coinSpend)); - //throw new InvalidSpendException("CoinSpend signature invalid"); + throw new InvalidSpendException("CoinSpend signature invalid"); } System.out.println("coin randomness: " + coinToSpend); diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/ZCoinSelection.java b/core/src/main/java/host/furszy/zerocoinj/wallet/ZCoinSelection.java new file mode 100644 index 000000000..dfa4e0230 --- /dev/null +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/ZCoinSelection.java @@ -0,0 +1,238 @@ +package host.furszy.zerocoinj.wallet; + +import com.zerocoinj.core.CoinDenomination; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ZCoinSelection { + + public static CoinDenomination nextDenomInDecreasingOrder(CoinDenomination coinDenomination) { + return CoinDenomination.values()[coinDenomination.ordinal() - 1]; + } + + public static List decoupleNumberInExactDenominations(int number, CoinDenomination denom){ + List usedDenom = new ArrayList<>(); + + // This is for the coinDenomination that are greater than the actual number + if (denom.getDenomination() > number) { + usedDenom.add(denom); + return usedDenom; + } + + // This is for the coinDenomination that multiplied by a factor of X are greater than the actual number + int num = number / denom.getDenomination(); + if (denom.getDenomination() * (num + 1) > number) { + int numToAdd = num + 1; + if (numToAdd <= 7) { + for (int i = 0; i < numToAdd; i++) { + usedDenom.add(denom); + } + return usedDenom; + } + } + return usedDenom; + } + + /** + * + * @param number + * @param denom + * @param maxAmountOfDenom + * @return + */ + public static Set> decoupleNumberInDenominations(int number, CoinDenomination denom, int maxAmountOfDenom) { + + Set> set = new HashSet<>(); + + PSolution pSolution = new PSolution(number); + + if (number > denom.getDenomination()){ + int num = number / denom.getDenomination(); + int mod = num % denom.getDenomination(); + if (mod != 0){ + int numToAdd = num + 1; + PSolution temp1 = pSolution.copy(); + if (numToAdd <= maxAmountOfDenom) { + pSolution.add(denom, numToAdd); + set.add(pSolution.selection); + } + // this maybe need more rounds.. + try { + + temp1.add(denom, num); + CoinDenomination nextDenom = nextDenomInDecreasingOrder(denom); + + while (nextDenom != CoinDenomination.ZQ_ERROR){ + int modDen = mod % nextDenom.getDenomination(); + + if (temp1.getValue() + nextDenom.getDenomination() > temp1.number){ + // + PSolution temp = temp1.copy(); + temp.selection.add(nextDenom); + if (temp.isValid()) { + set.add(temp.selection); + } + } + + if (temp1.denomSpace() >= modDen) { + Set> set2 = decoupleNumberInDenominations(mod, nextDenom, temp1.denomSpace()); + for (List coinDenominations : set2) { + PSolution temp = temp1.copy(); + temp.selection.addAll(coinDenominations); + if (temp.isValid()) { + set.add(temp.selection); + } + } + } + + nextDenom = nextDenomInDecreasingOrder(nextDenom); + } + }catch (IllegalArgumentException e){ + // nothing.. + } + return set; + }else { + if (num > maxAmountOfDenom) return set; // invalid num + + pSolution.add(denom, num); + if (pSolution.getValue() >= number && pSolution.denomSpace() <= maxAmountOfDenom){ + set.add(pSolution.selection); + return set; + } + } + + + }else { + int num = number % denom.getDenomination(); + PSolution temp1 = pSolution.copy(); + if (num < denom.getDenomination()){ + pSolution.selection.add(denom); + set.add(pSolution.selection); + } + + try { + + CoinDenomination nextDenom = nextDenomInDecreasingOrder(denom); + + while (nextDenom != CoinDenomination.ZQ_ERROR){ + if (temp1.denomSpace() >= (num % nextDenom.getDenomination())) { + Set> set2 = decoupleNumberInDenominations(num, nextDenom, temp1.denomSpace()); + for (List coinDenominations : set2) { + PSolution temp = temp1.copy(); + temp.selection.addAll(coinDenominations); + if (temp.isValid()) { + set.add(temp.selection); + } + } + } + + nextDenom = nextDenomInDecreasingOrder(nextDenom); + } + return set; + }catch (IllegalArgumentException e){ + // nothing.. + } + } + set.add(pSolution.selection); + return set; + } + + public static List calculateAllPossibleSolutionsFor(int numberToDecouple){ + List listOfPossibleSolutions = new ArrayList<>(); + // Start the loop for each denom + for (CoinDenomination coinDenomination : CoinDenomination.invertedValues()) { + if (CoinDenomination.ZQ_ERROR == coinDenomination) continue; + + PSolution pSolution = new PSolution(numberToDecouple); + pSolution.selection = decoupleNumberInExactDenominations(pSolution.number, coinDenomination); + + if (!pSolution.selection.isEmpty()){ + listOfPossibleSolutions.add(pSolution); + } + + // Now add the remaining if the denomination value is lower than the number and add all of the possibilities that start with that denomination and are not included + // on the list of possibilities + if (coinDenomination.getDenomination() <= pSolution.number){ + // Here i have to decouple it in lower denom. + + // First need to get the max amount of this denom that enters on the number and start decreasing the amount on every loop + increasing the + // lower denom numbers + int numberOfDenom = pSolution.number / coinDenomination.getDenomination(); + + if (numberOfDenom < 7){ + // loop until this denom value gets to den 0 + // to have the: + // 3x100 + 1x50 + // 3x100 + 4x10 + // 3x100 + 3x10 + 1x5 + // 2x100 + 5x50 + // 1x100 + 5x50 + for (int j = numberOfDenom; j != 0; j--) { + + PSolution internalSol = new PSolution(pSolution.number); + // First add the amount of coinDenom that work as the base (3x100) + internalSol.add(coinDenomination, j); + + // Now we have the minimum here, let's start getting deeper until we get all of the results + // Now the number to decouple + int number = internalSol.number - internalSol.getValue(); + int internalDenomSpace = internalSol.denomSpace(); + + CoinDenomination secondLevelDeno = nextDenomInDecreasingOrder(coinDenomination); + while (secondLevelDeno != CoinDenomination.ZQ_ERROR) { + + // Temp + PSolution secondLevelSolution = internalSol.copy(); + + // Now the loop on the internal numbers + CoinDenomination nextDenom = secondLevelDeno; + while (nextDenom != CoinDenomination.ZQ_ERROR) { + // First need to get the max amount of this denom that enters on the number and start decreasing the amount on every loop + increasing the + // lower denom numbers + int numberOfDenomInternal = numberOfDenom / nextDenom.getDenomination(); + if (numberOfDenomInternal <= internalDenomSpace && !secondLevelSolution.isValid()) { + // Now decouple + + Set> set = decoupleNumberInDenominations(number, nextDenom, internalDenomSpace); + + for (List denom : set) { + PSolution temp = secondLevelSolution.copy(); + temp.selection.addAll(denom); + + if (temp.isValid()) { + secondLevelSolution.selection.addAll(denom); + + if (secondLevelSolution.isValid()) { + listOfPossibleSolutions.add(secondLevelSolution); + // Reset values + secondLevelSolution = internalSol.copy(); + number = internalSol.number - internalSol.getValue(); + internalDenomSpace = internalSol.denomSpace(); + } else { + number = number - secondLevelSolution.getValue(); + internalDenomSpace = secondLevelSolution.denomSpace(); + } + } + } + }else { + if (secondLevelSolution.isValid()){ + listOfPossibleSolutions.add(secondLevelSolution); + } + } + nextDenom = nextDenomInDecreasingOrder(nextDenom); + } + secondLevelDeno = nextDenomInDecreasingOrder(secondLevelDeno); + + } + } + } + } + } + return listOfPossibleSolutions; + } + + +} diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java b/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java index 903dbdbc4..a299c2d08 100644 --- a/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java @@ -14,16 +14,16 @@ import org.pivxj.script.Script; import org.pivxj.script.ScriptBuilder; import org.pivxj.script.ScriptOpCodes; +import org.pivxj.utils.Pair; import org.pivxj.wallet.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import static org.pivxj.wallet.DeterministicKeyChain.KeyChainType.BIP44_ZPIV; @@ -31,11 +31,15 @@ public class ZWallet { private Logger logger = LoggerFactory.getLogger(ZWallet.class); + private final static int SPEND_THRESHOLD_LIMIT = 60 * 24 * 30; // 30 days threshold + private ZerocoinContext zContext; private NetworkParameters params; + private MultiWallet parent; private Wallet zPivWallet; - public ZWallet(NetworkParameters params, ZerocoinContext zContext, DeterministicSeed seed, int lookaheadSize) { + public ZWallet(NetworkParameters params, ZerocoinContext zContext, MultiWallet parent , DeterministicSeed seed, int lookaheadSize) { + this.parent = parent; this.params = params; this.zContext = zContext; KeyChainGroup keyChainGroupZpiv = new KeyChainGroup(params, seed, BIP44_ZPIV); @@ -44,7 +48,8 @@ public ZWallet(NetworkParameters params, ZerocoinContext zContext, Deterministic zPivWallet = new Wallet(params,keyChainGroupZpiv); } - public ZWallet(ZerocoinContext zContext, Wallet zPivWallet) { + public ZWallet(ZerocoinContext zContext, MultiWallet parent, Wallet zPivWallet) { + this.parent = parent; this.zContext = zContext; this.zPivWallet = zPivWallet; this.params = zPivWallet.getParams(); @@ -62,8 +67,7 @@ public void commitTx(Transaction tx) { zPivWallet.commitTx(tx); } - public Transaction createMint(Coin amount) throws InsufficientMoneyException { - Transaction tx = new Transaction(params); + public Transaction createMint(Transaction tx, Coin amount) throws InsufficientMoneyException { List denominations = new ArrayList<>(); Coin temp = Coin.valueOf(amount.value); // Easy algo, we start with the maximum amount and decreasing.. @@ -86,6 +90,11 @@ public Transaction createMint(Coin amount) throws InsufficientMoneyException { for (int i = 0; i < denominations.size(); i++) { ZCoin zCoin = coinsToUse.get(i); zCoin.setCoinDenomination(denominations.get(i)); + // Double check just for in case + if (!zCoin.validate()){ + throw new Error("##### ERROR Invalid zCoin, \n " + zCoin.toJsonString()); + } + System.out.println("### Minting using zCoin: " + zCoin.toJsonString()); completeMint(tx, zCoin); } return tx; @@ -103,52 +112,260 @@ private void completeMint(Transaction tx, ZCoin zCoin){ tx.addOutput(mintOutput); } - public Transaction createSpend(Coin amount) throws InsufficientMoneyException { - Transaction tx = new Transaction(params); - // First order the unspents - Map> orderedUnspents = orderUnspents(zPivWallet.getUnspents()); + public Transaction createSpend(Transaction tx, Coin amount, boolean mintChange) throws InsufficientMoneyException { + + try { + /** + * First calculate all of the possibilities + * + */ + int amountExact = (int) (amount.longValue() / 100000000); + List solutions = ZCoinSelection.calculateAllPossibleSolutionsFor(amountExact); + + /** + * Now get all of the possible solutions based on the denominations that are in the wallet + */ + // Get all of the denom in the wallet + Pair>, Map> pair = + orderUnspents(zPivWallet.getUnspents(), true); + + Map walletAvailableDenominations = pair.getSecond(); + // Now check all of the possibilities against the coins that the wallet has + List possibleSolutions = new ArrayList<>(); + for (PSolution solution : solutions) { + boolean ok = true; + for (Map.Entry entry : solution.getNeededDenominations().entrySet()) { + if (walletAvailableDenominations.containsKey(entry.getKey())) { + int availableQuantity = walletAvailableDenominations.get(entry.getKey()); + if (availableQuantity < entry.getValue()) { + ok = false; + break; + } + }else { + ok = false; + break; + } + } + if (ok) { + possibleSolutions.add(solution); + } + } + + // Outputs ordered by age + Map> orderedUnspents = pair.getFirst(); + Map> orderedUnspentsByAge = pair.getFirst(); + // order outputs by age now + for (Map.Entry> coinDenominationSetEntry : orderedUnspents.entrySet()) { + Set set = coinDenominationSetEntry.getValue(); + List list = new ArrayList<>(set); + Collections.sort(list, new Comparator() { + @Override + public int compare(TransactionOutput o1, TransactionOutput o2) { + return Integer.compare( + o2.getParentTransactionDepthInBlocks(), + o1.getParentTransactionDepthInBlocks() + ); + } + }); + orderedUnspentsByAge.put(coinDenominationSetEntry.getKey(), new HashSet<>(list)); + } + + + // Now the wallet should choose the best solution of all of them.. based on oldest criteria and some randomness + // So, for each possible solution the wallet will fill it up with coins + + // Necesito formar un score por cada grupo de elementos basado en cuan viejo es la suma de sus zCoins + List scoringPerSolution = new ArrayList<>(); + for (PSolution possibleSolution : possibleSolutions) { + SelectSolution selectSolution = new SelectSolution(possibleSolution); + + // now start adding outputs + Map neededDen = possibleSolution.getNeededDenominations(); + for (Map.Entry entry : neededDen.entrySet()) { + HashSet outputs = orderedUnspentsByAge.get(entry.getKey()); + // add as many as are needed + Iterator it = outputs.iterator(); + for (int i = 0; i < entry.getValue(); i++) { + selectSolution.addOutput(it.next()); + } + } + scoringPerSolution.add(selectSolution); + } + + // Now that we have all of the solutions with a scoring, let's select the best option! + SelectSolution bestSolution = null; + for (SelectSolution selectSolution : scoringPerSolution) { + if (bestSolution == null) { + bestSolution = selectSolution; + } else { + if (bestSolution.getScoring() < selectSolution.getScoring()) { + bestSolution = selectSolution; + } + } + } + + if (bestSolution == null){ + throw new InsufficientMoneyException(amount); + } + + // Now use the best solution + tx = completeSpendOutput(tx, bestSolution.getOutpus(), amount, mintChange); + Coin sumTotal = tx.getInputSum(); + if (sumTotal.equals(amount) || sumTotal.isGreaterThan(amount)) { + tx.verify(); + return tx; + } else { + logger.error("€€€€€€€€€€€€ FAIL "); + } + + // TODO: Remove what comes after this.. if this fails it's because there is no money.. + + /** + * The spend flow is: + * 1) Order unspent by depth. + * 2) Use the older unspents + * 3) Use the remaining spends in decreasing order. + */ + // First order the unspents + // Now get the older zPIV and add it to this tx first + Set oldZpiv = new HashSet<>(); + for (Set set : orderedUnspents.values()) { + for (TransactionOutput output : set) { + if (output.getParentTransactionDepthInBlocks() >= SPEND_THRESHOLD_LIMIT) { + oldZpiv.add(output); + } + } + } + + if (!oldZpiv.isEmpty()) { + // Now add them and check if the tx is completed + tx = completeSpendOutput(tx, oldZpiv, amount, mintChange); + } + + Coin sum = tx.getInputSum(); + if (sum.equals(amount) || sum.isGreaterThan(amount)) { + tx.verify(); + return tx; + } + + Coin coinsToAdd = amount.subtract(sum); + + // If not means that we need to add more.. + for (Map.Entry> entry : orderedUnspents.entrySet()) { + // Now add them and check if the tx is completed + tx = completeSpendOutput(tx, entry.getValue(), coinsToAdd, mintChange); + + sum = tx.getInputSum(); + if (sum.equals(amount) || sum.isGreaterThan(amount)) { + // Verify + tx.verify(); + return tx; + } + } + + sum = tx.getInputSum(); + // Check if we are good now or throw exception + if (sum.isZero() || (!sum.equals(amount) && sum.isLessThan(amount))) + throw new InsufficientMoneyException(amount.subtract(sum)); + + // Verify + tx.verify(); + + return tx; + + }catch (Exception e){ + e.printStackTrace(); + throw e; + } + } + + private Transaction completeSpendOutput(Transaction tx, Set outputs, Coin amount, boolean mintChange) { + // order by depth first + outputs = new HashSet<>(orderByDepth(outputs)); // Now start, start from the bigger den and decrease it until the value is completed Coin temp = Coin.valueOf(amount.value); - for (CoinDenomination coinDenomination : CoinDenomination.invertedValues()) { - if (!orderedUnspents.containsKey(coinDenomination)) continue; - List outputs = orderedUnspents.get(coinDenomination); - if (temp.isZero()) break; - Coin denValue = Coin.valueOf(coinDenomination.getDenomination(),0); - if (denValue.isZero()) continue; - if (temp.value < denValue.value) continue; - long mod = temp.value % denValue.value; - Coin divisibleForDenomination = temp.minus(Coin.valueOf(mod)); - long amountOfThisDenom = divisibleForDenomination.divide(denValue); - for (int i = 0; i < amountOfThisDenom; i++) { - // todo: I should get the old one here.. - TransactionOutput out = outputs.get(i); - if (out.getParentTransaction().getConfidence().getDepthInBlocks() >= CoinDefinition.MINT_REQUIRED_CONFIRMATIONS) - tx.addInput(outputs.get(i)); + for (TransactionOutput out : outputs) { + if (temp.isZero() || temp.isNegative()) break; + // Check if this output is already included in the tx + if (isSelectable(tx, out)) { + tx.addInput(out); + temp = temp.subtract(out.getValue()); } - temp = Coin.valueOf(mod); } - if (!temp.isZero()){ - throw new InsufficientMoneyException(); + + // Now complete the change address + Coin finalAmount = tx.getInputSum(); + if (!finalAmount.equals(amount) && finalAmount.isGreaterThan(amount)){ + Coin change = finalAmount.subtract(amount); + if (!mintChange || change.compareTo(Coin.COIN) == 0) { + tx.addOutput(change, parent.getCurrentReceiveAddress()); + }else { + try { + logger.info("Minting change.."); + Coin coinMinusMintFee = change.minus(Coin.COIN); + tx = createMint(tx, coinMinusMintFee); + Coin changeToRegularAddress = Coin.COIN.minus( + CoinDefinition.MIN_ZEROCOIN_MINT_FEE.multiply(tx.getAmountOfMints() + ) + ); + tx.addOutput(changeToRegularAddress, parent.freshReceiveAddress()); + } catch (InsufficientMoneyException e){ + logger.error("InsufficientMoneyException on mint change --- this should not happen", e); + throw new IllegalStateException(e); + } + } } return tx; } - private Map> orderUnspents(List unspents) { - Map> orderedUnspents = new HashMap<>(); - for (TransactionOutput output : zPivWallet.getUnspents()) { + private boolean isSelectable(Transaction tx, TransactionOutput out) { + boolean found = false; + for (TransactionInput transactionInput : tx.getInputs()) { + if (transactionInput.getOutpoint().equals(out.getOutPointFor())){ + found = true; + } + } + return !found; + } + + private Pair>, Map> orderUnspents(List unspents, boolean filterSpendable) { + Map> orderedUnspents = new HashMap<>(); + Map quatityOfEachDenom = new HashMap<>(); + int lastSeenBlockHeight = zPivWallet.getLastBlockSeenHeight(); + for (TransactionOutput output : unspents) { if (output.isZcMint()){ - CoinDenomination den = CoinDenomination.fromValue((int) output.getValue().value / 100000000); + if (filterSpendable){ + if (!isSpendable(output, lastSeenBlockHeight)) continue; + } + CoinDenomination den = Utils.toDenomination(output.getValue().value); if (orderedUnspents.containsKey(den)){ orderedUnspents.get(den).add(output); + // Quantity + quatityOfEachDenom.put( + den, + quatityOfEachDenom.remove(den) + 1 + ); }else { + HashSet outSet = new HashSet<>(); + outSet.add(output); orderedUnspents.put( den, - Lists.newArrayList(output) + outSet ); + // Quantity + quatityOfEachDenom.put(den, 1); } } } - Map> treeMap = new TreeMap<>( + // Now order by depth + Map> finalOrderedMap = new HashMap<>(); + for (Map.Entry> entry : orderedUnspents.entrySet()) { + // order it by depth, older first + finalOrderedMap.put(entry.getKey(), new HashSet<>(orderByDepth(entry.getValue()))); + } + + // Now by denomination + Map> treeMap = new TreeMap<>( new Comparator() { @Override @@ -157,14 +374,43 @@ public int compare(CoinDenomination o1, CoinDenomination o2) { } }); - treeMap.putAll(orderedUnspents); - return treeMap; + treeMap.putAll(finalOrderedMap); + return new Pair<>(treeMap, quatityOfEachDenom); + } + + private List orderByDepth(Collection list){ + List set = new ArrayList(list); + Collections.sort(set, new Comparator() { + @Override + public int compare(TransactionOutput o1, TransactionOutput o2) { + return Integer.compare(o1.getParentTransactionDepthInBlocks(), o2.getParentTransactionDepthInBlocks()); + } + }); + return set; + } + + private boolean isSpendable(TransactionOutput out, int lastSeenBlockHeight){ + // TODO: this should be improved thinking on the checkpoint block time + return out.getParentTransaction().getConfidence().getDepthInBlocks() >= CoinDefinition.MINT_REQUIRED_CONFIRMATIONS; } public void completeTx(SendRequest request) throws InsufficientMoneyException { zPivWallet.completeTx(request); } + public List listAmountPerDen(){ + Map> orderedUnspents = orderUnspents(zPivWallet.getUnspents(), true).getFirst(); + Map map = new HashMap<>(); + for (Map.Entry> entry : orderedUnspents.entrySet()) { + AmountPerDen amountPerDen = new AmountPerDen(entry.getKey()); + for (TransactionOutput output : entry.getValue()) { + amountPerDen.increment(output.getValue()); + } + map.put(entry.getKey(), amountPerDen); + } + return new ArrayList<>(map.values()); + } + public void cleanup() { zPivWallet.cleanup();; } @@ -183,7 +429,7 @@ public Transaction completeSendRequestAndWaitSync(JniBridgeWrapper jniBridgeWrap if (request.tx.getOutputs().isEmpty()) throw new IllegalArgumentException("SendRequest transactions outputs cannot be null, add the outputs values before call this method"); ZCSpendRequest spendRequest = new ZCSpendRequest(request, peerGroup); zPivWallet.completeSendRequest(spendRequest); - Transaction tx = executor.submit(spendRequest).get(15, TimeUnit.MINUTES); + Transaction tx = executor.submit(spendRequest).get(5, TimeUnit.MINUTES); logger.info("Tx created!, " + tx); tx = peerGroup.broadcastTransaction(tx,1,false).broadcast().get(1, TimeUnit.MINUTES); logger.info("Tx broadcasted!, " + tx); @@ -262,4 +508,6 @@ public ZCoin getZcoinAssociatedToSerial(BigInteger serial) { public List freshZcoins(int n) { return zPivWallet.freshZcoins(KeyChain.KeyPurpose.RECEIVE_FUNDS,n); } + + } diff --git a/core/src/main/java/org/pivxj/core/AbstractBlockChain.java b/core/src/main/java/org/pivxj/core/AbstractBlockChain.java index 79ca1c18a..4f97e5dfe 100644 --- a/core/src/main/java/org/pivxj/core/AbstractBlockChain.java +++ b/core/src/main/java/org/pivxj/core/AbstractBlockChain.java @@ -1,6 +1,7 @@ /* * Copyright 2012 Google Inc. * Copyright 2014 Andreas Schildbach + * Copyright 2017-2018 Matias Furszyfer * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/core/src/main/java/org/pivxj/core/BitcoinSerializer.java b/core/src/main/java/org/pivxj/core/BitcoinSerializer.java index 20910c551..ff571a61e 100644 --- a/core/src/main/java/org/pivxj/core/BitcoinSerializer.java +++ b/core/src/main/java/org/pivxj/core/BitcoinSerializer.java @@ -138,7 +138,11 @@ public void serialize(Message message, OutputStream out) throws IOException { if (name == null) { throw new Error("BitcoinSerializer doesn't currently know how to serialize " + message.getClass()); } - serialize(name, message.bitcoinSerialize(), out); + byte[] msg = message.bitcoinSerialize(); + if ((msg == null || msg.length == 0) && message.getClass() != VersionAck.class && message.getClass() != MemoryPoolMessage.class){ + throw new IllegalArgumentException("Trying to send an empty message, " + message); + } + serialize(name, msg, out); } /** @@ -272,9 +276,12 @@ private Message makeMessage(String command, int length, byte[] payloadBytes, byt return new MasternodeBroadcast(params, payloadBytes); } else if( command.equals("mnp")) { return new MasternodePing(params, payloadBytes); - } else if (command.equals("mnget")){ + } else if (command.equals("mnget")) { log.warn("mnget message arrived"); return null; + } else if (command.equals("mnvs")){ //Masternode vote sync + log.warn("mnvs message arrived"); + return null; } else if (command.equals("spork")) { return new SporkMessage(params, payloadBytes, 0); } else if(command.equals("ssc")) { diff --git a/core/src/main/java/org/pivxj/core/CoinDefinition.java b/core/src/main/java/org/pivxj/core/CoinDefinition.java index 70a4b10b2..f015a1682 100644 --- a/core/src/main/java/org/pivxj/core/CoinDefinition.java +++ b/core/src/main/java/org/pivxj/core/CoinDefinition.java @@ -101,6 +101,8 @@ public static final int getTargetTimespan(int height, boolean testNet) { public static final int MINT_REQUIRED_CONFIRMATIONS = 20; //The required confirmations for a zpiv to be stakable public static final int ZEROCOIN_REQUIRED_STAKE_DEPTH = 200; + // + public static final int ZEROCOIN_MAX_SPEND_OUTPUTS = 7; // // Production diff --git a/core/src/main/java/org/pivxj/core/Context.java b/core/src/main/java/org/pivxj/core/Context.java index fafea8263..77a1d3250 100644 --- a/core/src/main/java/org/pivxj/core/Context.java +++ b/core/src/main/java/org/pivxj/core/Context.java @@ -26,6 +26,7 @@ import javax.annotation.Nullable; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import static com.google.common.base.Preconditions.*; @@ -75,6 +76,8 @@ public class Context { //public HashStore hashStore; public MasternodeDB masternodeDB; + public AtomicInteger walletNum = new AtomicInteger(0); + /** * Creates a new context object. For now, this will be done for you by the framework. Eventually you will be * expected to do this yourself in the same manner as fetching a NetworkParameters object (at the start of your app). diff --git a/core/src/main/java/org/pivxj/core/PeerGroup.java b/core/src/main/java/org/pivxj/core/PeerGroup.java index 0135464af..652241ede 100644 --- a/core/src/main/java/org/pivxj/core/PeerGroup.java +++ b/core/src/main/java/org/pivxj/core/PeerGroup.java @@ -1,6 +1,7 @@ /* * Copyright 2013 Google Inc. * Copyright 2014 Andreas Schildbach + * Copyright 2017-2018 Matias Furszyfer * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/core/src/main/java/org/pivxj/core/PeerSocketHandler.java b/core/src/main/java/org/pivxj/core/PeerSocketHandler.java index 5f8281883..fcc63ff9f 100644 --- a/core/src/main/java/org/pivxj/core/PeerSocketHandler.java +++ b/core/src/main/java/org/pivxj/core/PeerSocketHandler.java @@ -103,7 +103,11 @@ public void sendMessage(Message message) throws NotYetConnectedException { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { serializer.serialize(message, out); - writeTarget.writeBytes(out.toByteArray()); + byte[] msg = out.toByteArray(); + if (msg.length == 0){ + throw new IllegalArgumentException("Trying to send an empty message, " + message); + } + writeTarget.writeBytes(msg); } catch (IOException e) { exceptionCaught(e); } diff --git a/core/src/main/java/org/pivxj/core/Transaction.java b/core/src/main/java/org/pivxj/core/Transaction.java index f780314a2..46894a77a 100644 --- a/core/src/main/java/org/pivxj/core/Transaction.java +++ b/core/src/main/java/org/pivxj/core/Transaction.java @@ -1200,6 +1200,19 @@ public int getSigOpCount() throws ScriptException { return sigOps; } + + /** + * Return the amount of mints + */ + public int getAmountOfMints() { + int mints = 0; + for (TransactionOutput output : outputs) { + if (output.isZcMint()){ + mints++; + } + } + return mints; + } /** * Check block height is in coinbase input script, for use after BIP 34 * enforcement is enabled. @@ -1249,12 +1262,14 @@ public void verify() throws VerificationException { Coin valueOut = Coin.ZERO; HashSet outpoints = new HashSet(); + int amountOfZcSpends = 0; for (TransactionInput input : inputs) { if (input.isZcspend()){ // If it's a zc_spend then the connected output parentTx hash will be 000.. as they are new minted coins. // for now i can remove the verifications as there is no wallet mixing zc_spends and regular piv spend // but this needs to be checked again in the future. //log.warn("Duplicated output in zc transaction " + toString()); + amountOfZcSpends++; }else { if (outpoints.contains(input.getOutpoint())) { log.error("Duplicated output in a transaction " + toString()); @@ -1263,6 +1278,13 @@ public void verify() throws VerificationException { } outpoints.add(input.getOutpoint()); } + + // Spends checks + if (amountOfZcSpends > CoinDefinition.ZEROCOIN_MAX_SPEND_OUTPUTS) + throw new VerificationException.InvalidZCSpendTx("Max amount of spends outputs in a tx is " + CoinDefinition.ZEROCOIN_MAX_SPEND_OUTPUTS); + + // Check mint fee amount + int amountOfZcMints = 0; try { for (TransactionOutput output : outputs) { if (output.getValue().signum() < 0) // getValue() can throw IllegalStateException @@ -1270,6 +1292,8 @@ public void verify() throws VerificationException { valueOut = valueOut.add(output.getValue()); if (params.hasMaxMoney() && valueOut.compareTo(params.getMaxMoney()) > 0) throw new IllegalArgumentException(); + if (output.isZcMint()) + amountOfZcMints++; } } catch (IllegalStateException e) { throw new VerificationException.ExcessiveValue(); @@ -1277,6 +1301,18 @@ public void verify() throws VerificationException { throw new VerificationException.ExcessiveValue(); } + if (amountOfZcMints > 0){ + Coin fee = getFee(); + if (fee != null){ + Coin expectedFee = CoinDefinition.MIN_ZEROCOIN_MINT_FEE.multiply(amountOfZcMints); + if (fee.isLessThan(expectedFee)){ + throw new VerificationException.InvalidZCMintFee("Expected fee " + expectedFee.toFriendlyString() + ", tx fee " + fee.toFriendlyString()); + } + }else { + log.warn("#### Verfiy transaction null fee"); + } + } + if (isCoinBase()) { byte[] scriptBytes = inputs.get(0).getScriptBytes(); if (scriptBytes.length < 2 || scriptBytes.length > 100) { diff --git a/core/src/main/java/org/pivxj/core/Utils.java b/core/src/main/java/org/pivxj/core/Utils.java index bb4e6b0cb..37ff3eebb 100644 --- a/core/src/main/java/org/pivxj/core/Utils.java +++ b/core/src/main/java/org/pivxj/core/Utils.java @@ -25,6 +25,7 @@ import com.google.common.io.Resources; import com.google.common.primitives.Ints; import com.google.common.primitives.UnsignedLongs; +import com.zerocoinj.core.CoinDenomination; import org.spongycastle.crypto.digests.RIPEMD160Digest; import org.spongycastle.util.encoders.Hex; @@ -33,6 +34,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; import java.math.BigInteger; import java.net.URL; @@ -749,4 +751,8 @@ public static long getTotalCoinEstimate(int nHeight) // TODO: this should include the 7.1% decline too return nTotalCoins; } + + public static CoinDenomination toDenomination(long value){ + return CoinDenomination.fromValue(new BigDecimal(value).movePointLeft(8).intValue()); + } } diff --git a/core/src/main/java/org/pivxj/core/VerificationException.java b/core/src/main/java/org/pivxj/core/VerificationException.java index 4d28f2df4..f413557e1 100644 --- a/core/src/main/java/org/pivxj/core/VerificationException.java +++ b/core/src/main/java/org/pivxj/core/VerificationException.java @@ -86,4 +86,16 @@ public CoinbaseHeightMismatch(final String message) { super(message); } } + + public static class InvalidZCSpendTx extends VerificationException{ + public InvalidZCSpendTx(String s) { + super(s); + } + } + + public static class InvalidZCMintFee extends VerificationException{ + public InvalidZCMintFee(String msg) { + super(msg); + } + } } diff --git a/core/src/main/java/org/pivxj/utils/Pair.java b/core/src/main/java/org/pivxj/utils/Pair.java index 844882697..c58b0cfcb 100644 --- a/core/src/main/java/org/pivxj/utils/Pair.java +++ b/core/src/main/java/org/pivxj/utils/Pair.java @@ -52,4 +52,12 @@ public int hashCode() { result = 31 * result + (second != null ? second.hashCode() : 0); return result; } + + @Override + public String toString() { + return "Pair{" + + "first=" + first + + ",\n second=" + second + + '}'; + } } \ No newline at end of file diff --git a/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java b/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java index a0bb9595f..964ae2c81 100644 --- a/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java +++ b/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java @@ -44,10 +44,7 @@ import java.math.BigInteger; import java.security.SecureRandom; import java.util.*; -import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; import static com.google.common.base.Preconditions.*; @@ -1394,13 +1391,26 @@ private List maybeLookAhead(DeterministicKey parent, int issue final int needed = issued + lookaheadSize + lookaheadThreshold - numChildren; if (needed <= lookaheadThreshold) - return new ArrayList(); + return new ArrayList<>(); ImmutableList path = ImmutableList.of(BIP44_MASTER_KEY, ZPIVX_PATH, ChildNumber.ZERO_HARDENED,ChildNumber.ZERO); - boolean createZcoins = parent.getPath().equals(path); + final boolean createZcoins = parent.getPath().equals(path); log.info("{} keys needed for {} = {} issued + {} lookahead size + {} lookahead threshold - {} num children - Zcoins flag {} ", needed, parent.getPathAsString(), issued, lookaheadSize, lookaheadThreshold, numChildren, createZcoins); + + final ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>();; + ExecutorService taskExecutor = null; + if (createZcoins) { + int numberOfProcessors = 2; + try { + numberOfProcessors = Runtime.getRuntime().availableProcessors(); + } catch (Exception e) { + log.error("Exception trying to get the number of processors", e); + } + taskExecutor = Executors.newFixedThreadPool(numberOfProcessors); + } + List result = new ArrayList<>(needed); final Stopwatch watch = Stopwatch.createStarted(); int nextChild = numChildren; @@ -1410,16 +1420,56 @@ private List maybeLookAhead(DeterministicKey parent, int issue hierarchy.putKey(key); result.add(key); nextChild = key.getChildNumber().num() + 1; - if (createZcoins){ - generateZcoin(key); - //log.info("Valid coin created, pubkey: " + key.getPublicKeyAsHex()); + + if (createZcoins) { + queue.add(key); + taskExecutor.submit(new Runnable() { + @Override + public void run() { + if (!queue.isEmpty()) + generateZcoin(queue.poll()); + } + }); + } + } + if (createZcoins) { + // Wait until every task is finished. + taskExecutor.shutdown(); + while (!queue.isEmpty()) { + generateZcoin(queue.poll()); + } + try { + taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + } catch (InterruptedException e) { + log.error("Timeout trying to calculate the commitments", e); + throw new RuntimeException(e); } } watch.stop(); log.info("Took {}", watch); + + // Sort zcoins by path now.. + sortZcoinsByPath(); + return result; } + private void sortZcoinsByPath() { + List keys = new ArrayList<>(zcoins.keySet()); + Collections.sort(keys, new Comparator() { + @Override + public int compare(DeterministicKey o1, DeterministicKey o2) { + return o1.getPathAsString().compareTo(o2.getPathAsString()); + } + }); + Map zcoinsTemp = new HashMap<>(); + for (DeterministicKey key : keys) { + zcoinsTemp.put(key, zcoins.get(key)); + } + zcoins.clear(); + zcoins.putAll(zcoinsTemp); + } + private void generateZcoin(DeterministicKey key){ if (zcoins.get(key) != null) return; ZerocoinContext context = Context.get().zerocoinContext; @@ -1634,8 +1684,11 @@ public ZCoin getZcoinsAssociatedRealKey(ECKey key) { public List getZcoins(int amount) { List createdZCoins = new ArrayList<>(); - for (ZCoin zCoin : zcoins.values()) { - createdZCoins.add(zCoin); + int i = 0; + for (Map.Entry entry : zcoins.entrySet()) { + createdZCoins.add(entry.getValue()); + i++; + if (i == amount) break; } return createdZCoins; } diff --git a/core/src/main/java/org/pivxj/wallet/DeterministicSeed.java b/core/src/main/java/org/pivxj/wallet/DeterministicSeed.java index b371d81ce..85cfd8dfb 100644 --- a/core/src/main/java/org/pivxj/wallet/DeterministicSeed.java +++ b/core/src/main/java/org/pivxj/wallet/DeterministicSeed.java @@ -42,7 +42,7 @@ */ public class DeterministicSeed implements EncryptableItem { // It would take more than 10^12 years to brute-force a 128 bit seed using $1B worth of computing equipment. - public static final int DEFAULT_SEED_ENTROPY_BITS = 128; + public static final int DEFAULT_SEED_ENTROPY_BITS = 256; public static final int MAX_SEED_ENTROPY_BITS = 512; @Nullable private final byte[] seed; diff --git a/core/src/main/java/org/pivxj/wallet/OldProtos.java b/core/src/main/java/org/pivxj/wallet/OldProtos.java new file mode 100644 index 000000000..5336dec4a --- /dev/null +++ b/core/src/main/java/org/pivxj/wallet/OldProtos.java @@ -0,0 +1,19363 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: old_wallet.proto + +package org.pivxj.wallet; + +public final class OldProtos { + private OldProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface PeerAddressOrBuilder extends + // @@protoc_insertion_point(interface_extends:wallet.PeerAddress) + com.google.protobuf.MessageOrBuilder { + + /** + * required bytes ip_address = 1; + */ + boolean hasIpAddress(); + /** + * required bytes ip_address = 1; + */ + com.google.protobuf.ByteString getIpAddress(); + + /** + * required uint32 port = 2; + */ + boolean hasPort(); + /** + * required uint32 port = 2; + */ + int getPort(); + + /** + * required uint64 services = 3; + */ + boolean hasServices(); + /** + * required uint64 services = 3; + */ + long getServices(); + } + /** + * Protobuf type {@code wallet.PeerAddress} + */ + public static final class PeerAddress extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:wallet.PeerAddress) + PeerAddressOrBuilder { + // Use PeerAddress.newBuilder() to construct. + private PeerAddress(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private PeerAddress(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final PeerAddress defaultInstance; + public static PeerAddress getDefaultInstance() { + return defaultInstance; + } + + public PeerAddress getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private PeerAddress( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + ipAddress_ = input.readBytes(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + port_ = input.readUInt32(); + break; + } + case 24: { + bitField0_ |= 0x00000004; + services_ = input.readUInt64(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_PeerAddress_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_PeerAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.PeerAddress.class, org.pivxj.wallet.OldProtos.PeerAddress.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public PeerAddress parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new PeerAddress(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int IP_ADDRESS_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString ipAddress_; + /** + * required bytes ip_address = 1; + */ + public boolean hasIpAddress() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes ip_address = 1; + */ + public com.google.protobuf.ByteString getIpAddress() { + return ipAddress_; + } + + public static final int PORT_FIELD_NUMBER = 2; + private int port_; + /** + * required uint32 port = 2; + */ + public boolean hasPort() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required uint32 port = 2; + */ + public int getPort() { + return port_; + } + + public static final int SERVICES_FIELD_NUMBER = 3; + private long services_; + /** + * required uint64 services = 3; + */ + public boolean hasServices() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * required uint64 services = 3; + */ + public long getServices() { + return services_; + } + + private void initFields() { + ipAddress_ = com.google.protobuf.ByteString.EMPTY; + port_ = 0; + services_ = 0L; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasIpAddress()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasPort()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasServices()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, ipAddress_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeUInt32(2, port_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeUInt64(3, services_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, ipAddress_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, port_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(3, services_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.PeerAddress parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.pivxj.wallet.OldProtos.PeerAddress prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code wallet.PeerAddress} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:wallet.PeerAddress) + org.pivxj.wallet.OldProtos.PeerAddressOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_PeerAddress_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_PeerAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.PeerAddress.class, org.pivxj.wallet.OldProtos.PeerAddress.Builder.class); + } + + // Construct using org.pivxj.wallet.OldProtos.PeerAddress.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + ipAddress_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + port_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); + services_ = 0L; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_PeerAddress_descriptor; + } + + public org.pivxj.wallet.OldProtos.PeerAddress getDefaultInstanceForType() { + return org.pivxj.wallet.OldProtos.PeerAddress.getDefaultInstance(); + } + + public org.pivxj.wallet.OldProtos.PeerAddress build() { + org.pivxj.wallet.OldProtos.PeerAddress result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.pivxj.wallet.OldProtos.PeerAddress buildPartial() { + org.pivxj.wallet.OldProtos.PeerAddress result = new org.pivxj.wallet.OldProtos.PeerAddress(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.ipAddress_ = ipAddress_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.port_ = port_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.services_ = services_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.pivxj.wallet.OldProtos.PeerAddress) { + return mergeFrom((org.pivxj.wallet.OldProtos.PeerAddress)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.pivxj.wallet.OldProtos.PeerAddress other) { + if (other == org.pivxj.wallet.OldProtos.PeerAddress.getDefaultInstance()) return this; + if (other.hasIpAddress()) { + setIpAddress(other.getIpAddress()); + } + if (other.hasPort()) { + setPort(other.getPort()); + } + if (other.hasServices()) { + setServices(other.getServices()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasIpAddress()) { + + return false; + } + if (!hasPort()) { + + return false; + } + if (!hasServices()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.pivxj.wallet.OldProtos.PeerAddress parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.pivxj.wallet.OldProtos.PeerAddress) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private com.google.protobuf.ByteString ipAddress_ = com.google.protobuf.ByteString.EMPTY; + /** + * required bytes ip_address = 1; + */ + public boolean hasIpAddress() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes ip_address = 1; + */ + public com.google.protobuf.ByteString getIpAddress() { + return ipAddress_; + } + /** + * required bytes ip_address = 1; + */ + public Builder setIpAddress(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + ipAddress_ = value; + onChanged(); + return this; + } + /** + * required bytes ip_address = 1; + */ + public Builder clearIpAddress() { + bitField0_ = (bitField0_ & ~0x00000001); + ipAddress_ = getDefaultInstance().getIpAddress(); + onChanged(); + return this; + } + + private int port_ ; + /** + * required uint32 port = 2; + */ + public boolean hasPort() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required uint32 port = 2; + */ + public int getPort() { + return port_; + } + /** + * required uint32 port = 2; + */ + public Builder setPort(int value) { + bitField0_ |= 0x00000002; + port_ = value; + onChanged(); + return this; + } + /** + * required uint32 port = 2; + */ + public Builder clearPort() { + bitField0_ = (bitField0_ & ~0x00000002); + port_ = 0; + onChanged(); + return this; + } + + private long services_ ; + /** + * required uint64 services = 3; + */ + public boolean hasServices() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * required uint64 services = 3; + */ + public long getServices() { + return services_; + } + /** + * required uint64 services = 3; + */ + public Builder setServices(long value) { + bitField0_ |= 0x00000004; + services_ = value; + onChanged(); + return this; + } + /** + * required uint64 services = 3; + */ + public Builder clearServices() { + bitField0_ = (bitField0_ & ~0x00000004); + services_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:wallet.PeerAddress) + } + + static { + defaultInstance = new PeerAddress(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:wallet.PeerAddress) + } + + public interface EncryptedDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:wallet.EncryptedData) + com.google.protobuf.MessageOrBuilder { + + /** + * required bytes initialisation_vector = 1; + * + *
+     * The initialisation vector for the AES encryption (16 bytes)
+     * 
+ */ + boolean hasInitialisationVector(); + /** + * required bytes initialisation_vector = 1; + * + *
+     * The initialisation vector for the AES encryption (16 bytes)
+     * 
+ */ + com.google.protobuf.ByteString getInitialisationVector(); + + /** + * required bytes encrypted_private_key = 2; + * + *
+     * The encrypted private key
+     * 
+ */ + boolean hasEncryptedPrivateKey(); + /** + * required bytes encrypted_private_key = 2; + * + *
+     * The encrypted private key
+     * 
+ */ + com.google.protobuf.ByteString getEncryptedPrivateKey(); + } + /** + * Protobuf type {@code wallet.EncryptedData} + */ + public static final class EncryptedData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:wallet.EncryptedData) + EncryptedDataOrBuilder { + // Use EncryptedData.newBuilder() to construct. + private EncryptedData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private EncryptedData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final EncryptedData defaultInstance; + public static EncryptedData getDefaultInstance() { + return defaultInstance; + } + + public EncryptedData getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private EncryptedData( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + initialisationVector_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + encryptedPrivateKey_ = input.readBytes(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_EncryptedData_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_EncryptedData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.EncryptedData.class, org.pivxj.wallet.OldProtos.EncryptedData.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public EncryptedData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new EncryptedData(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int INITIALISATION_VECTOR_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString initialisationVector_; + /** + * required bytes initialisation_vector = 1; + * + *
+     * The initialisation vector for the AES encryption (16 bytes)
+     * 
+ */ + public boolean hasInitialisationVector() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes initialisation_vector = 1; + * + *
+     * The initialisation vector for the AES encryption (16 bytes)
+     * 
+ */ + public com.google.protobuf.ByteString getInitialisationVector() { + return initialisationVector_; + } + + public static final int ENCRYPTED_PRIVATE_KEY_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString encryptedPrivateKey_; + /** + * required bytes encrypted_private_key = 2; + * + *
+     * The encrypted private key
+     * 
+ */ + public boolean hasEncryptedPrivateKey() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required bytes encrypted_private_key = 2; + * + *
+     * The encrypted private key
+     * 
+ */ + public com.google.protobuf.ByteString getEncryptedPrivateKey() { + return encryptedPrivateKey_; + } + + private void initFields() { + initialisationVector_ = com.google.protobuf.ByteString.EMPTY; + encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasInitialisationVector()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasEncryptedPrivateKey()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, initialisationVector_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, encryptedPrivateKey_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, initialisationVector_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, encryptedPrivateKey_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.EncryptedData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.pivxj.wallet.OldProtos.EncryptedData prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code wallet.EncryptedData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:wallet.EncryptedData) + org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_EncryptedData_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_EncryptedData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.EncryptedData.class, org.pivxj.wallet.OldProtos.EncryptedData.Builder.class); + } + + // Construct using org.pivxj.wallet.OldProtos.EncryptedData.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + initialisationVector_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_EncryptedData_descriptor; + } + + public org.pivxj.wallet.OldProtos.EncryptedData getDefaultInstanceForType() { + return org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + } + + public org.pivxj.wallet.OldProtos.EncryptedData build() { + org.pivxj.wallet.OldProtos.EncryptedData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.pivxj.wallet.OldProtos.EncryptedData buildPartial() { + org.pivxj.wallet.OldProtos.EncryptedData result = new org.pivxj.wallet.OldProtos.EncryptedData(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.initialisationVector_ = initialisationVector_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.encryptedPrivateKey_ = encryptedPrivateKey_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.pivxj.wallet.OldProtos.EncryptedData) { + return mergeFrom((org.pivxj.wallet.OldProtos.EncryptedData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.pivxj.wallet.OldProtos.EncryptedData other) { + if (other == org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance()) return this; + if (other.hasInitialisationVector()) { + setInitialisationVector(other.getInitialisationVector()); + } + if (other.hasEncryptedPrivateKey()) { + setEncryptedPrivateKey(other.getEncryptedPrivateKey()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasInitialisationVector()) { + + return false; + } + if (!hasEncryptedPrivateKey()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.pivxj.wallet.OldProtos.EncryptedData parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.pivxj.wallet.OldProtos.EncryptedData) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private com.google.protobuf.ByteString initialisationVector_ = com.google.protobuf.ByteString.EMPTY; + /** + * required bytes initialisation_vector = 1; + * + *
+       * The initialisation vector for the AES encryption (16 bytes)
+       * 
+ */ + public boolean hasInitialisationVector() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes initialisation_vector = 1; + * + *
+       * The initialisation vector for the AES encryption (16 bytes)
+       * 
+ */ + public com.google.protobuf.ByteString getInitialisationVector() { + return initialisationVector_; + } + /** + * required bytes initialisation_vector = 1; + * + *
+       * The initialisation vector for the AES encryption (16 bytes)
+       * 
+ */ + public Builder setInitialisationVector(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + initialisationVector_ = value; + onChanged(); + return this; + } + /** + * required bytes initialisation_vector = 1; + * + *
+       * The initialisation vector for the AES encryption (16 bytes)
+       * 
+ */ + public Builder clearInitialisationVector() { + bitField0_ = (bitField0_ & ~0x00000001); + initialisationVector_ = getDefaultInstance().getInitialisationVector(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY; + /** + * required bytes encrypted_private_key = 2; + * + *
+       * The encrypted private key
+       * 
+ */ + public boolean hasEncryptedPrivateKey() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required bytes encrypted_private_key = 2; + * + *
+       * The encrypted private key
+       * 
+ */ + public com.google.protobuf.ByteString getEncryptedPrivateKey() { + return encryptedPrivateKey_; + } + /** + * required bytes encrypted_private_key = 2; + * + *
+       * The encrypted private key
+       * 
+ */ + public Builder setEncryptedPrivateKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + encryptedPrivateKey_ = value; + onChanged(); + return this; + } + /** + * required bytes encrypted_private_key = 2; + * + *
+       * The encrypted private key
+       * 
+ */ + public Builder clearEncryptedPrivateKey() { + bitField0_ = (bitField0_ & ~0x00000002); + encryptedPrivateKey_ = getDefaultInstance().getEncryptedPrivateKey(); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:wallet.EncryptedData) + } + + static { + defaultInstance = new EncryptedData(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:wallet.EncryptedData) + } + + public interface DeterministicKeyOrBuilder extends + // @@protoc_insertion_point(interface_extends:wallet.DeterministicKey) + com.google.protobuf.MessageOrBuilder { + + /** + * required bytes chain_code = 1; + * + *
+     * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+     * should just treat it as a regular ORIGINAL type key.
+     * 
+ */ + boolean hasChainCode(); + /** + * required bytes chain_code = 1; + * + *
+     * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+     * should just treat it as a regular ORIGINAL type key.
+     * 
+ */ + com.google.protobuf.ByteString getChainCode(); + + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + java.util.List getPathList(); + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + int getPathCount(); + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + int getPath(int index); + + /** + * optional uint32 issued_subkeys = 3; + * + *
+     * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+     * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+     * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+     * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+     * If this field is missing it means we're not issuing subkeys of this key to users.
+     * 
+ */ + boolean hasIssuedSubkeys(); + /** + * optional uint32 issued_subkeys = 3; + * + *
+     * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+     * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+     * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+     * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+     * If this field is missing it means we're not issuing subkeys of this key to users.
+     * 
+ */ + int getIssuedSubkeys(); + + /** + * optional uint32 lookahead_size = 4; + */ + boolean hasLookaheadSize(); + /** + * optional uint32 lookahead_size = 4; + */ + int getLookaheadSize(); + + /** + * optional bool isFollowing = 5; + * + *
+     **
+     * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+     * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+     * a single P2SH multisignature address
+     * 
+ */ + boolean hasIsFollowing(); + /** + * optional bool isFollowing = 5; + * + *
+     **
+     * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+     * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+     * a single P2SH multisignature address
+     * 
+ */ + boolean getIsFollowing(); + + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+     * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+     * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+     * 
+ */ + boolean hasSigsRequiredToSpend(); + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+     * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+     * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+     * 
+ */ + int getSigsRequiredToSpend(); + } + /** + * Protobuf type {@code wallet.DeterministicKey} + * + *
+   **
+   * Data attached to a Key message that defines the data needed by the BIP32 deterministic key hierarchy algorithm.
+   * 
+ */ + public static final class DeterministicKey extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:wallet.DeterministicKey) + DeterministicKeyOrBuilder { + // Use DeterministicKey.newBuilder() to construct. + private DeterministicKey(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private DeterministicKey(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final DeterministicKey defaultInstance; + public static DeterministicKey getDefaultInstance() { + return defaultInstance; + } + + public DeterministicKey getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DeterministicKey( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + chainCode_ = input.readBytes(); + break; + } + case 16: { + if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + path_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + path_.add(input.readUInt32()); + break; + } + case 18: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) { + path_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + while (input.getBytesUntilLimit() > 0) { + path_.add(input.readUInt32()); + } + input.popLimit(limit); + break; + } + case 24: { + bitField0_ |= 0x00000002; + issuedSubkeys_ = input.readUInt32(); + break; + } + case 32: { + bitField0_ |= 0x00000004; + lookaheadSize_ = input.readUInt32(); + break; + } + case 40: { + bitField0_ |= 0x00000008; + isFollowing_ = input.readBool(); + break; + } + case 48: { + bitField0_ |= 0x00000010; + sigsRequiredToSpend_ = input.readUInt32(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { + path_ = java.util.Collections.unmodifiableList(path_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_DeterministicKey_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_DeterministicKey_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.DeterministicKey.class, org.pivxj.wallet.OldProtos.DeterministicKey.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public DeterministicKey parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DeterministicKey(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int CHAIN_CODE_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString chainCode_; + /** + * required bytes chain_code = 1; + * + *
+     * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+     * should just treat it as a regular ORIGINAL type key.
+     * 
+ */ + public boolean hasChainCode() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes chain_code = 1; + * + *
+     * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+     * should just treat it as a regular ORIGINAL type key.
+     * 
+ */ + public com.google.protobuf.ByteString getChainCode() { + return chainCode_; + } + + public static final int PATH_FIELD_NUMBER = 2; + private java.util.List path_; + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + public java.util.List + getPathList() { + return path_; + } + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + public int getPathCount() { + return path_.size(); + } + /** + * repeated uint32 path = 2; + * + *
+     * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+     * and high bit unset for public derivation.
+     * 
+ */ + public int getPath(int index) { + return path_.get(index); + } + + public static final int ISSUED_SUBKEYS_FIELD_NUMBER = 3; + private int issuedSubkeys_; + /** + * optional uint32 issued_subkeys = 3; + * + *
+     * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+     * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+     * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+     * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+     * If this field is missing it means we're not issuing subkeys of this key to users.
+     * 
+ */ + public boolean hasIssuedSubkeys() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional uint32 issued_subkeys = 3; + * + *
+     * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+     * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+     * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+     * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+     * If this field is missing it means we're not issuing subkeys of this key to users.
+     * 
+ */ + public int getIssuedSubkeys() { + return issuedSubkeys_; + } + + public static final int LOOKAHEAD_SIZE_FIELD_NUMBER = 4; + private int lookaheadSize_; + /** + * optional uint32 lookahead_size = 4; + */ + public boolean hasLookaheadSize() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional uint32 lookahead_size = 4; + */ + public int getLookaheadSize() { + return lookaheadSize_; + } + + public static final int ISFOLLOWING_FIELD_NUMBER = 5; + private boolean isFollowing_; + /** + * optional bool isFollowing = 5; + * + *
+     **
+     * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+     * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+     * a single P2SH multisignature address
+     * 
+ */ + public boolean hasIsFollowing() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional bool isFollowing = 5; + * + *
+     **
+     * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+     * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+     * a single P2SH multisignature address
+     * 
+ */ + public boolean getIsFollowing() { + return isFollowing_; + } + + public static final int SIGSREQUIREDTOSPEND_FIELD_NUMBER = 6; + private int sigsRequiredToSpend_; + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+     * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+     * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+     * 
+ */ + public boolean hasSigsRequiredToSpend() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+     * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+     * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+     * 
+ */ + public int getSigsRequiredToSpend() { + return sigsRequiredToSpend_; + } + + private void initFields() { + chainCode_ = com.google.protobuf.ByteString.EMPTY; + path_ = java.util.Collections.emptyList(); + issuedSubkeys_ = 0; + lookaheadSize_ = 0; + isFollowing_ = false; + sigsRequiredToSpend_ = 1; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasChainCode()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, chainCode_); + } + for (int i = 0; i < path_.size(); i++) { + output.writeUInt32(2, path_.get(i)); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeUInt32(3, issuedSubkeys_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeUInt32(4, lookaheadSize_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBool(5, isFollowing_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeUInt32(6, sigsRequiredToSpend_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, chainCode_); + } + { + int dataSize = 0; + for (int i = 0; i < path_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(path_.get(i)); + } + size += dataSize; + size += 1 * getPathList().size(); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, issuedSubkeys_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, lookaheadSize_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(5, isFollowing_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(6, sigsRequiredToSpend_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.DeterministicKey parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.pivxj.wallet.OldProtos.DeterministicKey prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code wallet.DeterministicKey} + * + *
+     **
+     * Data attached to a Key message that defines the data needed by the BIP32 deterministic key hierarchy algorithm.
+     * 
+ */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:wallet.DeterministicKey) + org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_DeterministicKey_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_DeterministicKey_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.DeterministicKey.class, org.pivxj.wallet.OldProtos.DeterministicKey.Builder.class); + } + + // Construct using org.pivxj.wallet.OldProtos.DeterministicKey.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + chainCode_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + path_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + issuedSubkeys_ = 0; + bitField0_ = (bitField0_ & ~0x00000004); + lookaheadSize_ = 0; + bitField0_ = (bitField0_ & ~0x00000008); + isFollowing_ = false; + bitField0_ = (bitField0_ & ~0x00000010); + sigsRequiredToSpend_ = 1; + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_DeterministicKey_descriptor; + } + + public org.pivxj.wallet.OldProtos.DeterministicKey getDefaultInstanceForType() { + return org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance(); + } + + public org.pivxj.wallet.OldProtos.DeterministicKey build() { + org.pivxj.wallet.OldProtos.DeterministicKey result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.pivxj.wallet.OldProtos.DeterministicKey buildPartial() { + org.pivxj.wallet.OldProtos.DeterministicKey result = new org.pivxj.wallet.OldProtos.DeterministicKey(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.chainCode_ = chainCode_; + if (((bitField0_ & 0x00000002) == 0x00000002)) { + path_ = java.util.Collections.unmodifiableList(path_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.path_ = path_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000002; + } + result.issuedSubkeys_ = issuedSubkeys_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000004; + } + result.lookaheadSize_ = lookaheadSize_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000008; + } + result.isFollowing_ = isFollowing_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000010; + } + result.sigsRequiredToSpend_ = sigsRequiredToSpend_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.pivxj.wallet.OldProtos.DeterministicKey) { + return mergeFrom((org.pivxj.wallet.OldProtos.DeterministicKey)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.pivxj.wallet.OldProtos.DeterministicKey other) { + if (other == org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance()) return this; + if (other.hasChainCode()) { + setChainCode(other.getChainCode()); + } + if (!other.path_.isEmpty()) { + if (path_.isEmpty()) { + path_ = other.path_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensurePathIsMutable(); + path_.addAll(other.path_); + } + onChanged(); + } + if (other.hasIssuedSubkeys()) { + setIssuedSubkeys(other.getIssuedSubkeys()); + } + if (other.hasLookaheadSize()) { + setLookaheadSize(other.getLookaheadSize()); + } + if (other.hasIsFollowing()) { + setIsFollowing(other.getIsFollowing()); + } + if (other.hasSigsRequiredToSpend()) { + setSigsRequiredToSpend(other.getSigsRequiredToSpend()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasChainCode()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.pivxj.wallet.OldProtos.DeterministicKey parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.pivxj.wallet.OldProtos.DeterministicKey) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private com.google.protobuf.ByteString chainCode_ = com.google.protobuf.ByteString.EMPTY; + /** + * required bytes chain_code = 1; + * + *
+       * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+       * should just treat it as a regular ORIGINAL type key.
+       * 
+ */ + public boolean hasChainCode() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required bytes chain_code = 1; + * + *
+       * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+       * should just treat it as a regular ORIGINAL type key.
+       * 
+ */ + public com.google.protobuf.ByteString getChainCode() { + return chainCode_; + } + /** + * required bytes chain_code = 1; + * + *
+       * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+       * should just treat it as a regular ORIGINAL type key.
+       * 
+ */ + public Builder setChainCode(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + chainCode_ = value; + onChanged(); + return this; + } + /** + * required bytes chain_code = 1; + * + *
+       * Random data that allows us to extend a key. Without this, we can't figure out the next key in the chain and
+       * should just treat it as a regular ORIGINAL type key.
+       * 
+ */ + public Builder clearChainCode() { + bitField0_ = (bitField0_ & ~0x00000001); + chainCode_ = getDefaultInstance().getChainCode(); + onChanged(); + return this; + } + + private java.util.List path_ = java.util.Collections.emptyList(); + private void ensurePathIsMutable() { + if (!((bitField0_ & 0x00000002) == 0x00000002)) { + path_ = new java.util.ArrayList(path_); + bitField0_ |= 0x00000002; + } + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public java.util.List + getPathList() { + return java.util.Collections.unmodifiableList(path_); + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public int getPathCount() { + return path_.size(); + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public int getPath(int index) { + return path_.get(index); + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public Builder setPath( + int index, int value) { + ensurePathIsMutable(); + path_.set(index, value); + onChanged(); + return this; + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public Builder addPath(int value) { + ensurePathIsMutable(); + path_.add(value); + onChanged(); + return this; + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public Builder addAllPath( + java.lang.Iterable values) { + ensurePathIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, path_); + onChanged(); + return this; + } + /** + * repeated uint32 path = 2; + * + *
+       * The path through the key tree. Each number is encoded in the standard form: high bit set for private derivation
+       * and high bit unset for public derivation.
+       * 
+ */ + public Builder clearPath() { + path_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + private int issuedSubkeys_ ; + /** + * optional uint32 issued_subkeys = 3; + * + *
+       * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+       * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+       * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+       * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+       * If this field is missing it means we're not issuing subkeys of this key to users.
+       * 
+ */ + public boolean hasIssuedSubkeys() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional uint32 issued_subkeys = 3; + * + *
+       * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+       * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+       * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+       * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+       * If this field is missing it means we're not issuing subkeys of this key to users.
+       * 
+ */ + public int getIssuedSubkeys() { + return issuedSubkeys_; + } + /** + * optional uint32 issued_subkeys = 3; + * + *
+       * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+       * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+       * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+       * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+       * If this field is missing it means we're not issuing subkeys of this key to users.
+       * 
+ */ + public Builder setIssuedSubkeys(int value) { + bitField0_ |= 0x00000004; + issuedSubkeys_ = value; + onChanged(); + return this; + } + /** + * optional uint32 issued_subkeys = 3; + * + *
+       * How many children of this key have been issued, that is, given to the user when they requested a fresh key?
+       * For the parents of keys being handed out, this is always less than the true number of children: the difference is
+       * called the lookahead zone. These keys are put into Bloom filters so we can spot transactions made by clones of
+       * this wallet - for instance when restoring from backup or if the seed was shared between devices.
+       * If this field is missing it means we're not issuing subkeys of this key to users.
+       * 
+ */ + public Builder clearIssuedSubkeys() { + bitField0_ = (bitField0_ & ~0x00000004); + issuedSubkeys_ = 0; + onChanged(); + return this; + } + + private int lookaheadSize_ ; + /** + * optional uint32 lookahead_size = 4; + */ + public boolean hasLookaheadSize() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional uint32 lookahead_size = 4; + */ + public int getLookaheadSize() { + return lookaheadSize_; + } + /** + * optional uint32 lookahead_size = 4; + */ + public Builder setLookaheadSize(int value) { + bitField0_ |= 0x00000008; + lookaheadSize_ = value; + onChanged(); + return this; + } + /** + * optional uint32 lookahead_size = 4; + */ + public Builder clearLookaheadSize() { + bitField0_ = (bitField0_ & ~0x00000008); + lookaheadSize_ = 0; + onChanged(); + return this; + } + + private boolean isFollowing_ ; + /** + * optional bool isFollowing = 5; + * + *
+       **
+       * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+       * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+       * a single P2SH multisignature address
+       * 
+ */ + public boolean hasIsFollowing() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional bool isFollowing = 5; + * + *
+       **
+       * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+       * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+       * a single P2SH multisignature address
+       * 
+ */ + public boolean getIsFollowing() { + return isFollowing_; + } + /** + * optional bool isFollowing = 5; + * + *
+       **
+       * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+       * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+       * a single P2SH multisignature address
+       * 
+ */ + public Builder setIsFollowing(boolean value) { + bitField0_ |= 0x00000010; + isFollowing_ = value; + onChanged(); + return this; + } + /** + * optional bool isFollowing = 5; + * + *
+       **
+       * Flag indicating that this key is a root of a following chain. This chain is following the next non-following chain.
+       * Following/followed chains concept is used for married keychains, where the set of keys combined together to produce
+       * a single P2SH multisignature address
+       * 
+ */ + public Builder clearIsFollowing() { + bitField0_ = (bitField0_ & ~0x00000010); + isFollowing_ = false; + onChanged(); + return this; + } + + private int sigsRequiredToSpend_ = 1; + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+       * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+       * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+       * 
+ */ + public boolean hasSigsRequiredToSpend() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+       * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+       * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+       * 
+ */ + public int getSigsRequiredToSpend() { + return sigsRequiredToSpend_; + } + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+       * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+       * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+       * 
+ */ + public Builder setSigsRequiredToSpend(int value) { + bitField0_ |= 0x00000020; + sigsRequiredToSpend_ = value; + onChanged(); + return this; + } + /** + * optional uint32 sigsRequiredToSpend = 6 [default = 1]; + * + *
+       * Number of signatures required to spend. This field is needed only for married keychains to reconstruct KeyChain
+       * and represents the N value from N-of-M CHECKMULTISIG script. For regular single keychains it will always be 1.
+       * 
+ */ + public Builder clearSigsRequiredToSpend() { + bitField0_ = (bitField0_ & ~0x00000020); + sigsRequiredToSpend_ = 1; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:wallet.DeterministicKey) + } + + static { + defaultInstance = new DeterministicKey(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:wallet.DeterministicKey) + } + + public interface KeyOrBuilder extends + // @@protoc_insertion_point(interface_extends:wallet.Key) + com.google.protobuf.MessageOrBuilder { + + /** + * required .wallet.Key.Type type = 1; + */ + boolean hasType(); + /** + * required .wallet.Key.Type type = 1; + */ + org.pivxj.wallet.OldProtos.Key.Type getType(); + + /** + * optional bytes secret_bytes = 2; + * + *
+     * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+     * If the secret is encrypted, or this is a "watching entry" then this is missing.
+     * 
+ */ + boolean hasSecretBytes(); + /** + * optional bytes secret_bytes = 2; + * + *
+     * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+     * If the secret is encrypted, or this is a "watching entry" then this is missing.
+     * 
+ */ + com.google.protobuf.ByteString getSecretBytes(); + + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + boolean hasEncryptedData(); + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + org.pivxj.wallet.OldProtos.EncryptedData getEncryptedData(); + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDataOrBuilder(); + + /** + * optional bytes public_key = 3; + * + *
+     * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+     * 
+ */ + boolean hasPublicKey(); + /** + * optional bytes public_key = 3; + * + *
+     * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+     * 
+ */ + com.google.protobuf.ByteString getPublicKey(); + + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + boolean hasLabel(); + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + java.lang.String getLabel(); + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + com.google.protobuf.ByteString + getLabelBytes(); + + /** + * optional int64 creation_timestamp = 5; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+     * optional is that keys derived from a parent don't have this data.
+     * 
+ */ + boolean hasCreationTimestamp(); + /** + * optional int64 creation_timestamp = 5; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+     * optional is that keys derived from a parent don't have this data.
+     * 
+ */ + long getCreationTimestamp(); + + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + boolean hasDeterministicKey(); + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + org.pivxj.wallet.OldProtos.DeterministicKey getDeterministicKey(); + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder getDeterministicKeyOrBuilder(); + + /** + * optional bytes deterministic_seed = 8; + * + *
+     * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+     * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+     * 
+ */ + boolean hasDeterministicSeed(); + /** + * optional bytes deterministic_seed = 8; + * + *
+     * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+     * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+     * 
+ */ + com.google.protobuf.ByteString getDeterministicSeed(); + + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + boolean hasEncryptedDeterministicSeed(); + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + org.pivxj.wallet.OldProtos.EncryptedData getEncryptedDeterministicSeed(); + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDeterministicSeedOrBuilder(); + } + /** + * Protobuf type {@code wallet.Key} + * + *
+   **
+   * A key used to control Bitcoin spending.
+   * Either the private key, the public key or both may be present.  It is recommended that
+   * if the private key is provided that the public key is provided too because deriving it is slow.
+   * If only the public key is provided, the key can only be used to watch the blockchain and verify
+   * transactions, and not for spending.
+   * 
+ */ + public static final class Key extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:wallet.Key) + KeyOrBuilder { + // Use Key.newBuilder() to construct. + private Key(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Key(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Key defaultInstance; + public static Key getDefaultInstance() { + return defaultInstance; + } + + public Key getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Key( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + int rawValue = input.readEnum(); + org.pivxj.wallet.OldProtos.Key.Type value = org.pivxj.wallet.OldProtos.Key.Type.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + type_ = value; + } + break; + } + case 18: { + bitField0_ |= 0x00000002; + secretBytes_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000008; + publicKey_ = input.readBytes(); + break; + } + case 34: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000010; + label_ = bs; + break; + } + case 40: { + bitField0_ |= 0x00000020; + creationTimestamp_ = input.readInt64(); + break; + } + case 50: { + org.pivxj.wallet.OldProtos.EncryptedData.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + subBuilder = encryptedData_.toBuilder(); + } + encryptedData_ = input.readMessage(org.pivxj.wallet.OldProtos.EncryptedData.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(encryptedData_); + encryptedData_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + case 58: { + org.pivxj.wallet.OldProtos.DeterministicKey.Builder subBuilder = null; + if (((bitField0_ & 0x00000040) == 0x00000040)) { + subBuilder = deterministicKey_.toBuilder(); + } + deterministicKey_ = input.readMessage(org.pivxj.wallet.OldProtos.DeterministicKey.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(deterministicKey_); + deterministicKey_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000040; + break; + } + case 66: { + bitField0_ |= 0x00000080; + deterministicSeed_ = input.readBytes(); + break; + } + case 74: { + org.pivxj.wallet.OldProtos.EncryptedData.Builder subBuilder = null; + if (((bitField0_ & 0x00000100) == 0x00000100)) { + subBuilder = encryptedDeterministicSeed_.toBuilder(); + } + encryptedDeterministicSeed_ = input.readMessage(org.pivxj.wallet.OldProtos.EncryptedData.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(encryptedDeterministicSeed_); + encryptedDeterministicSeed_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000100; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Key_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Key_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.Key.class, org.pivxj.wallet.OldProtos.Key.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Key parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Key(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + /** + * Protobuf enum {@code wallet.Key.Type} + */ + public enum Type + implements com.google.protobuf.ProtocolMessageEnum { + /** + * ORIGINAL = 1; + * + *
+       ** Unencrypted - Original bitcoin secp256k1 curve 
+       * 
+ */ + ORIGINAL(0, 1), + /** + * ENCRYPTED_SCRYPT_AES = 2; + * + *
+       ** Encrypted with Scrypt and AES - Original bitcoin secp256k1 curve 
+       * 
+ */ + ENCRYPTED_SCRYPT_AES(1, 2), + /** + * DETERMINISTIC_MNEMONIC = 3; + * + *
+       **
+       * Not really a key, but rather contains the mnemonic phrase for a deterministic key hierarchy in the private_key field.
+       * The label and public_key fields are missing. Creation timestamp will exist.
+       * 
+ */ + DETERMINISTIC_MNEMONIC(2, 3), + /** + * DETERMINISTIC_KEY = 4; + * + *
+       **
+       * A key that was derived deterministically. Note that the root seed that created it may NOT be present in the
+       * wallet, for the case of watching wallets. A deterministic key may or may not have the private key bytes present.
+       * However the public key bytes and the deterministic_key field are guaranteed to exist. In a wallet where there
+       * is a path from this key up to a key that has (possibly encrypted) private bytes, it's expected that the private
+       * key can be rederived on the fly.
+       * 
+ */ + DETERMINISTIC_KEY(3, 4), + ; + + /** + * ORIGINAL = 1; + * + *
+       ** Unencrypted - Original bitcoin secp256k1 curve 
+       * 
+ */ + public static final int ORIGINAL_VALUE = 1; + /** + * ENCRYPTED_SCRYPT_AES = 2; + * + *
+       ** Encrypted with Scrypt and AES - Original bitcoin secp256k1 curve 
+       * 
+ */ + public static final int ENCRYPTED_SCRYPT_AES_VALUE = 2; + /** + * DETERMINISTIC_MNEMONIC = 3; + * + *
+       **
+       * Not really a key, but rather contains the mnemonic phrase for a deterministic key hierarchy in the private_key field.
+       * The label and public_key fields are missing. Creation timestamp will exist.
+       * 
+ */ + public static final int DETERMINISTIC_MNEMONIC_VALUE = 3; + /** + * DETERMINISTIC_KEY = 4; + * + *
+       **
+       * A key that was derived deterministically. Note that the root seed that created it may NOT be present in the
+       * wallet, for the case of watching wallets. A deterministic key may or may not have the private key bytes present.
+       * However the public key bytes and the deterministic_key field are guaranteed to exist. In a wallet where there
+       * is a path from this key up to a key that has (possibly encrypted) private bytes, it's expected that the private
+       * key can be rederived on the fly.
+       * 
+ */ + public static final int DETERMINISTIC_KEY_VALUE = 4; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return ORIGINAL; + case 2: return ENCRYPTED_SCRYPT_AES; + case 3: return DETERMINISTIC_MNEMONIC; + case 4: return DETERMINISTIC_KEY; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.Key.getDescriptor().getEnumTypes().get(0); + } + + private static final Type[] VALUES = values(); + + public static Type valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:wallet.Key.Type) + } + + private int bitField0_; + public static final int TYPE_FIELD_NUMBER = 1; + private org.pivxj.wallet.OldProtos.Key.Type type_; + /** + * required .wallet.Key.Type type = 1; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required .wallet.Key.Type type = 1; + */ + public org.pivxj.wallet.OldProtos.Key.Type getType() { + return type_; + } + + public static final int SECRET_BYTES_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString secretBytes_; + /** + * optional bytes secret_bytes = 2; + * + *
+     * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+     * If the secret is encrypted, or this is a "watching entry" then this is missing.
+     * 
+ */ + public boolean hasSecretBytes() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional bytes secret_bytes = 2; + * + *
+     * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+     * If the secret is encrypted, or this is a "watching entry" then this is missing.
+     * 
+ */ + public com.google.protobuf.ByteString getSecretBytes() { + return secretBytes_; + } + + public static final int ENCRYPTED_DATA_FIELD_NUMBER = 6; + private org.pivxj.wallet.OldProtos.EncryptedData encryptedData_; + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + public boolean hasEncryptedData() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData getEncryptedData() { + return encryptedData_; + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+     * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+     * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDataOrBuilder() { + return encryptedData_; + } + + public static final int PUBLIC_KEY_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString publicKey_; + /** + * optional bytes public_key = 3; + * + *
+     * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+     * 
+ */ + public boolean hasPublicKey() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional bytes public_key = 3; + * + *
+     * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+     * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+     * 
+ */ + public com.google.protobuf.ByteString getPublicKey() { + return publicKey_; + } + + public static final int LABEL_FIELD_NUMBER = 4; + private java.lang.Object label_; + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + public boolean hasLabel() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + public java.lang.String getLabel() { + java.lang.Object ref = label_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + label_ = s; + } + return s; + } + } + /** + * optional string label = 4; + * + *
+     * User-provided label associated with the key.
+     * 
+ */ + public com.google.protobuf.ByteString + getLabelBytes() { + java.lang.Object ref = label_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + label_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CREATION_TIMESTAMP_FIELD_NUMBER = 5; + private long creationTimestamp_; + /** + * optional int64 creation_timestamp = 5; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+     * optional is that keys derived from a parent don't have this data.
+     * 
+ */ + public boolean hasCreationTimestamp() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * optional int64 creation_timestamp = 5; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+     * optional is that keys derived from a parent don't have this data.
+     * 
+ */ + public long getCreationTimestamp() { + return creationTimestamp_; + } + + public static final int DETERMINISTIC_KEY_FIELD_NUMBER = 7; + private org.pivxj.wallet.OldProtos.DeterministicKey deterministicKey_; + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public boolean hasDeterministicKey() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public org.pivxj.wallet.OldProtos.DeterministicKey getDeterministicKey() { + return deterministicKey_; + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder getDeterministicKeyOrBuilder() { + return deterministicKey_; + } + + public static final int DETERMINISTIC_SEED_FIELD_NUMBER = 8; + private com.google.protobuf.ByteString deterministicSeed_; + /** + * optional bytes deterministic_seed = 8; + * + *
+     * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+     * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+     * 
+ */ + public boolean hasDeterministicSeed() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + /** + * optional bytes deterministic_seed = 8; + * + *
+     * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+     * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+     * 
+ */ + public com.google.protobuf.ByteString getDeterministicSeed() { + return deterministicSeed_; + } + + public static final int ENCRYPTED_DETERMINISTIC_SEED_FIELD_NUMBER = 9; + private org.pivxj.wallet.OldProtos.EncryptedData encryptedDeterministicSeed_; + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + public boolean hasEncryptedDeterministicSeed() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData getEncryptedDeterministicSeed() { + return encryptedDeterministicSeed_; + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+     * Encrypted version of the seed
+     * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDeterministicSeedOrBuilder() { + return encryptedDeterministicSeed_; + } + + private void initFields() { + type_ = org.pivxj.wallet.OldProtos.Key.Type.ORIGINAL; + secretBytes_ = com.google.protobuf.ByteString.EMPTY; + encryptedData_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + publicKey_ = com.google.protobuf.ByteString.EMPTY; + label_ = ""; + creationTimestamp_ = 0L; + deterministicKey_ = org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance(); + deterministicSeed_ = com.google.protobuf.ByteString.EMPTY; + encryptedDeterministicSeed_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasType()) { + memoizedIsInitialized = 0; + return false; + } + if (hasEncryptedData()) { + if (!getEncryptedData().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasDeterministicKey()) { + if (!getDeterministicKey().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasEncryptedDeterministicSeed()) { + if (!getEncryptedDeterministicSeed().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeEnum(1, type_.getNumber()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, secretBytes_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBytes(3, publicKey_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBytes(4, getLabelBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeInt64(5, creationTimestamp_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(6, encryptedData_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeMessage(7, deterministicKey_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + output.writeBytes(8, deterministicSeed_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeMessage(9, encryptedDeterministicSeed_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_.getNumber()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, secretBytes_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, publicKey_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, getLabelBytes()); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(5, creationTimestamp_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, encryptedData_); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, deterministicKey_); + } + if (((bitField0_ & 0x00000080) == 0x00000080)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(8, deterministicSeed_); + } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, encryptedDeterministicSeed_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.pivxj.wallet.OldProtos.Key parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.Key parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.pivxj.wallet.OldProtos.Key parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.pivxj.wallet.OldProtos.Key parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.pivxj.wallet.OldProtos.Key prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code wallet.Key} + * + *
+     **
+     * A key used to control Bitcoin spending.
+     * Either the private key, the public key or both may be present.  It is recommended that
+     * if the private key is provided that the public key is provided too because deriving it is slow.
+     * If only the public key is provided, the key can only be used to watch the blockchain and verify
+     * transactions, and not for spending.
+     * 
+ */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:wallet.Key) + org.pivxj.wallet.OldProtos.KeyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Key_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Key_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.Key.class, org.pivxj.wallet.OldProtos.Key.Builder.class); + } + + // Construct using org.pivxj.wallet.OldProtos.Key.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getEncryptedDataFieldBuilder(); + getDeterministicKeyFieldBuilder(); + getEncryptedDeterministicSeedFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + type_ = org.pivxj.wallet.OldProtos.Key.Type.ORIGINAL; + bitField0_ = (bitField0_ & ~0x00000001); + secretBytes_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000002); + if (encryptedDataBuilder_ == null) { + encryptedData_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + } else { + encryptedDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + publicKey_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000008); + label_ = ""; + bitField0_ = (bitField0_ & ~0x00000010); + creationTimestamp_ = 0L; + bitField0_ = (bitField0_ & ~0x00000020); + if (deterministicKeyBuilder_ == null) { + deterministicKey_ = org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance(); + } else { + deterministicKeyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + deterministicSeed_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000080); + if (encryptedDeterministicSeedBuilder_ == null) { + encryptedDeterministicSeed_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + } else { + encryptedDeterministicSeedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Key_descriptor; + } + + public org.pivxj.wallet.OldProtos.Key getDefaultInstanceForType() { + return org.pivxj.wallet.OldProtos.Key.getDefaultInstance(); + } + + public org.pivxj.wallet.OldProtos.Key build() { + org.pivxj.wallet.OldProtos.Key result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.pivxj.wallet.OldProtos.Key buildPartial() { + org.pivxj.wallet.OldProtos.Key result = new org.pivxj.wallet.OldProtos.Key(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.type_ = type_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.secretBytes_ = secretBytes_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + if (encryptedDataBuilder_ == null) { + result.encryptedData_ = encryptedData_; + } else { + result.encryptedData_ = encryptedDataBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.publicKey_ = publicKey_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.label_ = label_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.creationTimestamp_ = creationTimestamp_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + if (deterministicKeyBuilder_ == null) { + result.deterministicKey_ = deterministicKey_; + } else { + result.deterministicKey_ = deterministicKeyBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { + to_bitField0_ |= 0x00000080; + } + result.deterministicSeed_ = deterministicSeed_; + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + if (encryptedDeterministicSeedBuilder_ == null) { + result.encryptedDeterministicSeed_ = encryptedDeterministicSeed_; + } else { + result.encryptedDeterministicSeed_ = encryptedDeterministicSeedBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.pivxj.wallet.OldProtos.Key) { + return mergeFrom((org.pivxj.wallet.OldProtos.Key)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.pivxj.wallet.OldProtos.Key other) { + if (other == org.pivxj.wallet.OldProtos.Key.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasSecretBytes()) { + setSecretBytes(other.getSecretBytes()); + } + if (other.hasEncryptedData()) { + mergeEncryptedData(other.getEncryptedData()); + } + if (other.hasPublicKey()) { + setPublicKey(other.getPublicKey()); + } + if (other.hasLabel()) { + bitField0_ |= 0x00000010; + label_ = other.label_; + onChanged(); + } + if (other.hasCreationTimestamp()) { + setCreationTimestamp(other.getCreationTimestamp()); + } + if (other.hasDeterministicKey()) { + mergeDeterministicKey(other.getDeterministicKey()); + } + if (other.hasDeterministicSeed()) { + setDeterministicSeed(other.getDeterministicSeed()); + } + if (other.hasEncryptedDeterministicSeed()) { + mergeEncryptedDeterministicSeed(other.getEncryptedDeterministicSeed()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasType()) { + + return false; + } + if (hasEncryptedData()) { + if (!getEncryptedData().isInitialized()) { + + return false; + } + } + if (hasDeterministicKey()) { + if (!getDeterministicKey().isInitialized()) { + + return false; + } + } + if (hasEncryptedDeterministicSeed()) { + if (!getEncryptedDeterministicSeed().isInitialized()) { + + return false; + } + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.pivxj.wallet.OldProtos.Key parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.pivxj.wallet.OldProtos.Key) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private org.pivxj.wallet.OldProtos.Key.Type type_ = org.pivxj.wallet.OldProtos.Key.Type.ORIGINAL; + /** + * required .wallet.Key.Type type = 1; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required .wallet.Key.Type type = 1; + */ + public org.pivxj.wallet.OldProtos.Key.Type getType() { + return type_; + } + /** + * required .wallet.Key.Type type = 1; + */ + public Builder setType(org.pivxj.wallet.OldProtos.Key.Type value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value; + onChanged(); + return this; + } + /** + * required .wallet.Key.Type type = 1; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = org.pivxj.wallet.OldProtos.Key.Type.ORIGINAL; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString secretBytes_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes secret_bytes = 2; + * + *
+       * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+       * If the secret is encrypted, or this is a "watching entry" then this is missing.
+       * 
+ */ + public boolean hasSecretBytes() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional bytes secret_bytes = 2; + * + *
+       * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+       * If the secret is encrypted, or this is a "watching entry" then this is missing.
+       * 
+ */ + public com.google.protobuf.ByteString getSecretBytes() { + return secretBytes_; + } + /** + * optional bytes secret_bytes = 2; + * + *
+       * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+       * If the secret is encrypted, or this is a "watching entry" then this is missing.
+       * 
+ */ + public Builder setSecretBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + secretBytes_ = value; + onChanged(); + return this; + } + /** + * optional bytes secret_bytes = 2; + * + *
+       * Either the private EC key bytes (without any ASN.1 wrapping), or the deterministic root seed.
+       * If the secret is encrypted, or this is a "watching entry" then this is missing.
+       * 
+ */ + public Builder clearSecretBytes() { + bitField0_ = (bitField0_ & ~0x00000002); + secretBytes_ = getDefaultInstance().getSecretBytes(); + onChanged(); + return this; + } + + private org.pivxj.wallet.OldProtos.EncryptedData encryptedData_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder> encryptedDataBuilder_; + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public boolean hasEncryptedData() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData getEncryptedData() { + if (encryptedDataBuilder_ == null) { + return encryptedData_; + } else { + return encryptedDataBuilder_.getMessage(); + } + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public Builder setEncryptedData(org.pivxj.wallet.OldProtos.EncryptedData value) { + if (encryptedDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + encryptedData_ = value; + onChanged(); + } else { + encryptedDataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public Builder setEncryptedData( + org.pivxj.wallet.OldProtos.EncryptedData.Builder builderForValue) { + if (encryptedDataBuilder_ == null) { + encryptedData_ = builderForValue.build(); + onChanged(); + } else { + encryptedDataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public Builder mergeEncryptedData(org.pivxj.wallet.OldProtos.EncryptedData value) { + if (encryptedDataBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + encryptedData_ != org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance()) { + encryptedData_ = + org.pivxj.wallet.OldProtos.EncryptedData.newBuilder(encryptedData_).mergeFrom(value).buildPartial(); + } else { + encryptedData_ = value; + } + onChanged(); + } else { + encryptedDataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public Builder clearEncryptedData() { + if (encryptedDataBuilder_ == null) { + encryptedData_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + onChanged(); + } else { + encryptedDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData.Builder getEncryptedDataBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getEncryptedDataFieldBuilder().getBuilder(); + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDataOrBuilder() { + if (encryptedDataBuilder_ != null) { + return encryptedDataBuilder_.getMessageOrBuilder(); + } else { + return encryptedData_; + } + } + /** + * optional .wallet.EncryptedData encrypted_data = 6; + * + *
+       * If the secret data is encrypted, then secret_bytes is missing and this field is set.
+       * 
+ */ + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder> + getEncryptedDataFieldBuilder() { + if (encryptedDataBuilder_ == null) { + encryptedDataBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder>( + getEncryptedData(), + getParentForChildren(), + isClean()); + encryptedData_ = null; + } + return encryptedDataBuilder_; + } + + private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes public_key = 3; + * + *
+       * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+       * 
+ */ + public boolean hasPublicKey() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional bytes public_key = 3; + * + *
+       * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+       * 
+ */ + public com.google.protobuf.ByteString getPublicKey() { + return publicKey_; + } + /** + * optional bytes public_key = 3; + * + *
+       * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+       * 
+ */ + public Builder setPublicKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + publicKey_ = value; + onChanged(); + return this; + } + /** + * optional bytes public_key = 3; + * + *
+       * The public EC key derived from the private key. We allow both to be stored to avoid mobile clients having to
+       * do lots of slow EC math on startup. For DETERMINISTIC_MNEMONIC entries this is missing.
+       * 
+ */ + public Builder clearPublicKey() { + bitField0_ = (bitField0_ & ~0x00000008); + publicKey_ = getDefaultInstance().getPublicKey(); + onChanged(); + return this; + } + + private java.lang.Object label_ = ""; + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public boolean hasLabel() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public java.lang.String getLabel() { + java.lang.Object ref = label_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + label_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public com.google.protobuf.ByteString + getLabelBytes() { + java.lang.Object ref = label_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + label_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public Builder setLabel( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + label_ = value; + onChanged(); + return this; + } + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public Builder clearLabel() { + bitField0_ = (bitField0_ & ~0x00000010); + label_ = getDefaultInstance().getLabel(); + onChanged(); + return this; + } + /** + * optional string label = 4; + * + *
+       * User-provided label associated with the key.
+       * 
+ */ + public Builder setLabelBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + label_ = value; + onChanged(); + return this; + } + + private long creationTimestamp_ ; + /** + * optional int64 creation_timestamp = 5; + * + *
+       * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+       * optional is that keys derived from a parent don't have this data.
+       * 
+ */ + public boolean hasCreationTimestamp() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * optional int64 creation_timestamp = 5; + * + *
+       * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+       * optional is that keys derived from a parent don't have this data.
+       * 
+ */ + public long getCreationTimestamp() { + return creationTimestamp_; + } + /** + * optional int64 creation_timestamp = 5; + * + *
+       * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+       * optional is that keys derived from a parent don't have this data.
+       * 
+ */ + public Builder setCreationTimestamp(long value) { + bitField0_ |= 0x00000020; + creationTimestamp_ = value; + onChanged(); + return this; + } + /** + * optional int64 creation_timestamp = 5; + * + *
+       * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point. The reason it's
+       * optional is that keys derived from a parent don't have this data.
+       * 
+ */ + public Builder clearCreationTimestamp() { + bitField0_ = (bitField0_ & ~0x00000020); + creationTimestamp_ = 0L; + onChanged(); + return this; + } + + private org.pivxj.wallet.OldProtos.DeterministicKey deterministicKey_ = org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.DeterministicKey, org.pivxj.wallet.OldProtos.DeterministicKey.Builder, org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder> deterministicKeyBuilder_; + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public boolean hasDeterministicKey() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public org.pivxj.wallet.OldProtos.DeterministicKey getDeterministicKey() { + if (deterministicKeyBuilder_ == null) { + return deterministicKey_; + } else { + return deterministicKeyBuilder_.getMessage(); + } + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public Builder setDeterministicKey(org.pivxj.wallet.OldProtos.DeterministicKey value) { + if (deterministicKeyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + deterministicKey_ = value; + onChanged(); + } else { + deterministicKeyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + return this; + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public Builder setDeterministicKey( + org.pivxj.wallet.OldProtos.DeterministicKey.Builder builderForValue) { + if (deterministicKeyBuilder_ == null) { + deterministicKey_ = builderForValue.build(); + onChanged(); + } else { + deterministicKeyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + return this; + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public Builder mergeDeterministicKey(org.pivxj.wallet.OldProtos.DeterministicKey value) { + if (deterministicKeyBuilder_ == null) { + if (((bitField0_ & 0x00000040) == 0x00000040) && + deterministicKey_ != org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance()) { + deterministicKey_ = + org.pivxj.wallet.OldProtos.DeterministicKey.newBuilder(deterministicKey_).mergeFrom(value).buildPartial(); + } else { + deterministicKey_ = value; + } + onChanged(); + } else { + deterministicKeyBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + return this; + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public Builder clearDeterministicKey() { + if (deterministicKeyBuilder_ == null) { + deterministicKey_ = org.pivxj.wallet.OldProtos.DeterministicKey.getDefaultInstance(); + onChanged(); + } else { + deterministicKeyBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public org.pivxj.wallet.OldProtos.DeterministicKey.Builder getDeterministicKeyBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getDeterministicKeyFieldBuilder().getBuilder(); + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + public org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder getDeterministicKeyOrBuilder() { + if (deterministicKeyBuilder_ != null) { + return deterministicKeyBuilder_.getMessageOrBuilder(); + } else { + return deterministicKey_; + } + } + /** + * optional .wallet.DeterministicKey deterministic_key = 7; + */ + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.DeterministicKey, org.pivxj.wallet.OldProtos.DeterministicKey.Builder, org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder> + getDeterministicKeyFieldBuilder() { + if (deterministicKeyBuilder_ == null) { + deterministicKeyBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.DeterministicKey, org.pivxj.wallet.OldProtos.DeterministicKey.Builder, org.pivxj.wallet.OldProtos.DeterministicKeyOrBuilder>( + getDeterministicKey(), + getParentForChildren(), + isClean()); + deterministicKey_ = null; + } + return deterministicKeyBuilder_; + } + + private com.google.protobuf.ByteString deterministicSeed_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes deterministic_seed = 8; + * + *
+       * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+       * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+       * 
+ */ + public boolean hasDeterministicSeed() { + return ((bitField0_ & 0x00000080) == 0x00000080); + } + /** + * optional bytes deterministic_seed = 8; + * + *
+       * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+       * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+       * 
+ */ + public com.google.protobuf.ByteString getDeterministicSeed() { + return deterministicSeed_; + } + /** + * optional bytes deterministic_seed = 8; + * + *
+       * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+       * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+       * 
+ */ + public Builder setDeterministicSeed(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + deterministicSeed_ = value; + onChanged(); + return this; + } + /** + * optional bytes deterministic_seed = 8; + * + *
+       * The seed for a deterministic key hierarchy.  Derived from the mnemonic,
+       * but cached here for quick startup.  Only applicable to a DETERMINISTIC_MNEMONIC key entry.
+       * 
+ */ + public Builder clearDeterministicSeed() { + bitField0_ = (bitField0_ & ~0x00000080); + deterministicSeed_ = getDefaultInstance().getDeterministicSeed(); + onChanged(); + return this; + } + + private org.pivxj.wallet.OldProtos.EncryptedData encryptedDeterministicSeed_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder> encryptedDeterministicSeedBuilder_; + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public boolean hasEncryptedDeterministicSeed() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData getEncryptedDeterministicSeed() { + if (encryptedDeterministicSeedBuilder_ == null) { + return encryptedDeterministicSeed_; + } else { + return encryptedDeterministicSeedBuilder_.getMessage(); + } + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public Builder setEncryptedDeterministicSeed(org.pivxj.wallet.OldProtos.EncryptedData value) { + if (encryptedDeterministicSeedBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + encryptedDeterministicSeed_ = value; + onChanged(); + } else { + encryptedDeterministicSeedBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public Builder setEncryptedDeterministicSeed( + org.pivxj.wallet.OldProtos.EncryptedData.Builder builderForValue) { + if (encryptedDeterministicSeedBuilder_ == null) { + encryptedDeterministicSeed_ = builderForValue.build(); + onChanged(); + } else { + encryptedDeterministicSeedBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public Builder mergeEncryptedDeterministicSeed(org.pivxj.wallet.OldProtos.EncryptedData value) { + if (encryptedDeterministicSeedBuilder_ == null) { + if (((bitField0_ & 0x00000100) == 0x00000100) && + encryptedDeterministicSeed_ != org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance()) { + encryptedDeterministicSeed_ = + org.pivxj.wallet.OldProtos.EncryptedData.newBuilder(encryptedDeterministicSeed_).mergeFrom(value).buildPartial(); + } else { + encryptedDeterministicSeed_ = value; + } + onChanged(); + } else { + encryptedDeterministicSeedBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public Builder clearEncryptedDeterministicSeed() { + if (encryptedDeterministicSeedBuilder_ == null) { + encryptedDeterministicSeed_ = org.pivxj.wallet.OldProtos.EncryptedData.getDefaultInstance(); + onChanged(); + } else { + encryptedDeterministicSeedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedData.Builder getEncryptedDeterministicSeedBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getEncryptedDeterministicSeedFieldBuilder().getBuilder(); + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + public org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder getEncryptedDeterministicSeedOrBuilder() { + if (encryptedDeterministicSeedBuilder_ != null) { + return encryptedDeterministicSeedBuilder_.getMessageOrBuilder(); + } else { + return encryptedDeterministicSeed_; + } + } + /** + * optional .wallet.EncryptedData encrypted_deterministic_seed = 9; + * + *
+       * Encrypted version of the seed
+       * 
+ */ + private com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder> + getEncryptedDeterministicSeedFieldBuilder() { + if (encryptedDeterministicSeedBuilder_ == null) { + encryptedDeterministicSeedBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.pivxj.wallet.OldProtos.EncryptedData, org.pivxj.wallet.OldProtos.EncryptedData.Builder, org.pivxj.wallet.OldProtos.EncryptedDataOrBuilder>( + getEncryptedDeterministicSeed(), + getParentForChildren(), + isClean()); + encryptedDeterministicSeed_ = null; + } + return encryptedDeterministicSeedBuilder_; + } + + // @@protoc_insertion_point(builder_scope:wallet.Key) + } + + static { + defaultInstance = new Key(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:wallet.Key) + } + + public interface ScriptOrBuilder extends + // @@protoc_insertion_point(interface_extends:wallet.Script) + com.google.protobuf.MessageOrBuilder { + + /** + * required bytes program = 1; + */ + boolean hasProgram(); + /** + * required bytes program = 1; + */ + com.google.protobuf.ByteString getProgram(); + + /** + * required int64 creation_timestamp = 2; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point
+     * when watching for scripts on the blockchain.
+     * 
+ */ + boolean hasCreationTimestamp(); + /** + * required int64 creation_timestamp = 2; + * + *
+     * Timestamp stored as millis since epoch. Useful for skipping block bodies before this point
+     * when watching for scripts on the blockchain.
+     * 
+ */ + long getCreationTimestamp(); + } + /** + * Protobuf type {@code wallet.Script} + */ + public static final class Script extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:wallet.Script) + ScriptOrBuilder { + // Use Script.newBuilder() to construct. + private Script(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Script(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Script defaultInstance; + public static Script getDefaultInstance() { + return defaultInstance; + } + + public Script getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Script( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + program_ = input.readBytes(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + creationTimestamp_ = input.readInt64(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Script_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.pivxj.wallet.OldProtos.internal_static_wallet_Script_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.pivxj.wallet.OldProtos.Script.class, org.pivxj.wallet.OldProtos.Script.Builder.class); + } + + public static com.google.protobuf.Parser