diff --git a/.DS_Store b/.DS_Store index ebafc132a..34662dadc 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index ff9f3bdb4..6522dc396 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ checkpoints.txt *.DS_Store *.db core/2.0.32_pivx-wallet-backup_org.pivx.production-2017-11-20 +*build/ +*.DS_Store \ No newline at end of file diff --git a/build.gradle b/build.gradle index e69de29bb..a6f03fda5 100644 --- a/build.gradle +++ b/build.gradle @@ -0,0 +1,17 @@ +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.4' + } +} + +allprojects { + repositories { + jcenter() + } + + group = 'org.bitcoinj' +} \ No newline at end of file diff --git a/core/.DS_Store b/core/.DS_Store index 896e66d74..58669cd7b 100644 Binary files a/core/.DS_Store and b/core/.DS_Store differ diff --git a/core/build.gradle b/core/build.gradle index dcd3831a7..b5b4ed6e3 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'java' apply plugin: 'com.google.protobuf' apply plugin: 'maven' +apply plugin: 'idea' apply plugin: 'c' version = '0.14.3-12.1' @@ -13,6 +14,7 @@ model { } dependencies { + compile files('libs/zerocoinj-1.0-SNAPSHOT.jar') compile 'com.madgag.spongycastle:core:1.58.0.0' implementation 'com.lambdaworks:scrypt:1.4.0' implementation 'com.google.guava:guava:24.0-android' diff --git a/core/out/production/classes/com/hashengineering/crypto/Hash9.class b/core/out/production/classes/com/hashengineering/crypto/Hash9.class new file mode 100644 index 000000000..1167710c7 Binary files /dev/null and b/core/out/production/classes/com/hashengineering/crypto/Hash9.class differ diff --git a/core/out/production/classes/com/hashengineering/crypto/HashFunction.class b/core/out/production/classes/com/hashengineering/crypto/HashFunction.class new file mode 100644 index 000000000..755aed523 Binary files /dev/null and b/core/out/production/classes/com/hashengineering/crypto/HashFunction.class differ diff --git a/core/out/production/classes/com/hashengineering/crypto/Sha512Hash.class b/core/out/production/classes/com/hashengineering/crypto/Sha512Hash.class new file mode 100644 index 000000000..fff079b06 Binary files /dev/null and b/core/out/production/classes/com/hashengineering/crypto/Sha512Hash.class differ diff --git a/core/out/production/classes/com/hashengineering/crypto/X11.class b/core/out/production/classes/com/hashengineering/crypto/X11.class new file mode 100644 index 000000000..a66b50277 Binary files /dev/null and b/core/out/production/classes/com/hashengineering/crypto/X11.class differ diff --git a/core/out/production/classes/com/hashengineering/utils/ByteArrayUtils.class b/core/out/production/classes/com/hashengineering/utils/ByteArrayUtils.class new file mode 100644 index 000000000..3b187c229 Binary files /dev/null and b/core/out/production/classes/com/hashengineering/utils/ByteArrayUtils.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKE224.class b/core/out/production/classes/fr/cryptohash/BLAKE224.class new file mode 100644 index 000000000..04e5bf7a1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKE224.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKE256.class b/core/out/production/classes/fr/cryptohash/BLAKE256.class new file mode 100644 index 000000000..82c1cc0a6 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKE256.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKE384.class b/core/out/production/classes/fr/cryptohash/BLAKE384.class new file mode 100644 index 000000000..daf26ef9a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKE384.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKE512.class b/core/out/production/classes/fr/cryptohash/BLAKE512.class new file mode 100644 index 000000000..ed40e8d5a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKE512.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKEBigCore.class b/core/out/production/classes/fr/cryptohash/BLAKEBigCore.class new file mode 100644 index 000000000..0f99bb694 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKEBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/BLAKESmallCore.class b/core/out/production/classes/fr/cryptohash/BLAKESmallCore.class new file mode 100644 index 000000000..2f5baed73 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BLAKESmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMW224.class b/core/out/production/classes/fr/cryptohash/BMW224.class new file mode 100644 index 000000000..b9133a9f6 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMW224.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMW256.class b/core/out/production/classes/fr/cryptohash/BMW256.class new file mode 100644 index 000000000..f4ef2f36d Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMW256.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMW384.class b/core/out/production/classes/fr/cryptohash/BMW384.class new file mode 100644 index 000000000..4401e7218 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMW384.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMW512.class b/core/out/production/classes/fr/cryptohash/BMW512.class new file mode 100644 index 000000000..0fe3727c4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMW512.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMWBigCore.class b/core/out/production/classes/fr/cryptohash/BMWBigCore.class new file mode 100644 index 000000000..92021f14e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMWBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/BMWSmallCore.class b/core/out/production/classes/fr/cryptohash/BMWSmallCore.class new file mode 100644 index 000000000..c21b77322 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/BMWSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/CubeHash224.class b/core/out/production/classes/fr/cryptohash/CubeHash224.class new file mode 100644 index 000000000..6d5d824e3 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/CubeHash224.class differ diff --git a/core/out/production/classes/fr/cryptohash/CubeHash256.class b/core/out/production/classes/fr/cryptohash/CubeHash256.class new file mode 100644 index 000000000..6019b3578 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/CubeHash256.class differ diff --git a/core/out/production/classes/fr/cryptohash/CubeHash384.class b/core/out/production/classes/fr/cryptohash/CubeHash384.class new file mode 100644 index 000000000..f031cc145 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/CubeHash384.class differ diff --git a/core/out/production/classes/fr/cryptohash/CubeHash512.class b/core/out/production/classes/fr/cryptohash/CubeHash512.class new file mode 100644 index 000000000..91b518051 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/CubeHash512.class differ diff --git a/core/out/production/classes/fr/cryptohash/CubeHashCore.class b/core/out/production/classes/fr/cryptohash/CubeHashCore.class new file mode 100644 index 000000000..cda0209c5 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/CubeHashCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Digest.class b/core/out/production/classes/fr/cryptohash/Digest.class new file mode 100644 index 000000000..f71e0c0d1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Digest.class differ diff --git a/core/out/production/classes/fr/cryptohash/DigestEngine.class b/core/out/production/classes/fr/cryptohash/DigestEngine.class new file mode 100644 index 000000000..7d07cd040 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/DigestEngine.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHO224.class b/core/out/production/classes/fr/cryptohash/ECHO224.class new file mode 100644 index 000000000..f010d5811 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHO224.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHO256.class b/core/out/production/classes/fr/cryptohash/ECHO256.class new file mode 100644 index 000000000..75f7371b9 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHO256.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHO384.class b/core/out/production/classes/fr/cryptohash/ECHO384.class new file mode 100644 index 000000000..1fb15544e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHO384.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHO512.class b/core/out/production/classes/fr/cryptohash/ECHO512.class new file mode 100644 index 000000000..942beed3b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHO512.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHOBigCore.class b/core/out/production/classes/fr/cryptohash/ECHOBigCore.class new file mode 100644 index 000000000..c5b6f4071 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHOBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/ECHOSmallCore.class b/core/out/production/classes/fr/cryptohash/ECHOSmallCore.class new file mode 100644 index 000000000..75e1fb5cb Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ECHOSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Fugue224.class b/core/out/production/classes/fr/cryptohash/Fugue224.class new file mode 100644 index 000000000..aad10f191 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Fugue224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Fugue256.class b/core/out/production/classes/fr/cryptohash/Fugue256.class new file mode 100644 index 000000000..ab82a6458 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Fugue256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Fugue2Core.class b/core/out/production/classes/fr/cryptohash/Fugue2Core.class new file mode 100644 index 000000000..1a263c16e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Fugue2Core.class differ diff --git a/core/out/production/classes/fr/cryptohash/Fugue384.class b/core/out/production/classes/fr/cryptohash/Fugue384.class new file mode 100644 index 000000000..0dbb1a4bc Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Fugue384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Fugue512.class b/core/out/production/classes/fr/cryptohash/Fugue512.class new file mode 100644 index 000000000..71e50fcf1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Fugue512.class differ diff --git a/core/out/production/classes/fr/cryptohash/FugueCore.class b/core/out/production/classes/fr/cryptohash/FugueCore.class new file mode 100644 index 000000000..e1dd348a8 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/FugueCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Groestl224.class b/core/out/production/classes/fr/cryptohash/Groestl224.class new file mode 100644 index 000000000..de4a93dd4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Groestl224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Groestl256.class b/core/out/production/classes/fr/cryptohash/Groestl256.class new file mode 100644 index 000000000..3ce0df3ea Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Groestl256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Groestl384.class b/core/out/production/classes/fr/cryptohash/Groestl384.class new file mode 100644 index 000000000..eb9c09f03 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Groestl384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Groestl512.class b/core/out/production/classes/fr/cryptohash/Groestl512.class new file mode 100644 index 000000000..c33db4f6a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Groestl512.class differ diff --git a/core/out/production/classes/fr/cryptohash/GroestlBigCore.class b/core/out/production/classes/fr/cryptohash/GroestlBigCore.class new file mode 100644 index 000000000..4c49bf120 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/GroestlBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/GroestlSmallCore.class b/core/out/production/classes/fr/cryptohash/GroestlSmallCore.class new file mode 100644 index 000000000..93bf27c66 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/GroestlSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL128_3.class b/core/out/production/classes/fr/cryptohash/HAVAL128_3.class new file mode 100644 index 000000000..c601493d4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL128_3.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL128_4.class b/core/out/production/classes/fr/cryptohash/HAVAL128_4.class new file mode 100644 index 000000000..80450122a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL128_4.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL128_5.class b/core/out/production/classes/fr/cryptohash/HAVAL128_5.class new file mode 100644 index 000000000..3b71f2a5b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL128_5.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL160_3.class b/core/out/production/classes/fr/cryptohash/HAVAL160_3.class new file mode 100644 index 000000000..fd045b000 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL160_3.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL160_4.class b/core/out/production/classes/fr/cryptohash/HAVAL160_4.class new file mode 100644 index 000000000..8f5d55620 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL160_4.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL160_5.class b/core/out/production/classes/fr/cryptohash/HAVAL160_5.class new file mode 100644 index 000000000..58c2ecfdb Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL160_5.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL192_3.class b/core/out/production/classes/fr/cryptohash/HAVAL192_3.class new file mode 100644 index 000000000..f76879aac Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL192_3.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL192_4.class b/core/out/production/classes/fr/cryptohash/HAVAL192_4.class new file mode 100644 index 000000000..3485e8997 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL192_4.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL192_5.class b/core/out/production/classes/fr/cryptohash/HAVAL192_5.class new file mode 100644 index 000000000..2347d6754 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL192_5.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL224_3.class b/core/out/production/classes/fr/cryptohash/HAVAL224_3.class new file mode 100644 index 000000000..f9f4efae7 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL224_3.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL224_4.class b/core/out/production/classes/fr/cryptohash/HAVAL224_4.class new file mode 100644 index 000000000..5a007b82f Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL224_4.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL224_5.class b/core/out/production/classes/fr/cryptohash/HAVAL224_5.class new file mode 100644 index 000000000..d17890f52 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL224_5.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL256_3.class b/core/out/production/classes/fr/cryptohash/HAVAL256_3.class new file mode 100644 index 000000000..518664a6c Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL256_3.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL256_4.class b/core/out/production/classes/fr/cryptohash/HAVAL256_4.class new file mode 100644 index 000000000..af225c654 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL256_4.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVAL256_5.class b/core/out/production/classes/fr/cryptohash/HAVAL256_5.class new file mode 100644 index 000000000..ecb0dfec4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVAL256_5.class differ diff --git a/core/out/production/classes/fr/cryptohash/HAVALCore.class b/core/out/production/classes/fr/cryptohash/HAVALCore.class new file mode 100644 index 000000000..4671c65de Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HAVALCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/HMAC.class b/core/out/production/classes/fr/cryptohash/HMAC.class new file mode 100644 index 000000000..6b2f7a5c0 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HMAC.class differ diff --git a/core/out/production/classes/fr/cryptohash/Hamsi224.class b/core/out/production/classes/fr/cryptohash/Hamsi224.class new file mode 100644 index 000000000..b217a25dc Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Hamsi224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Hamsi256.class b/core/out/production/classes/fr/cryptohash/Hamsi256.class new file mode 100644 index 000000000..4447730c5 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Hamsi256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Hamsi384.class b/core/out/production/classes/fr/cryptohash/Hamsi384.class new file mode 100644 index 000000000..ae42f6a25 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Hamsi384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Hamsi512.class b/core/out/production/classes/fr/cryptohash/Hamsi512.class new file mode 100644 index 000000000..ff33419d8 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Hamsi512.class differ diff --git a/core/out/production/classes/fr/cryptohash/HamsiBigCore.class b/core/out/production/classes/fr/cryptohash/HamsiBigCore.class new file mode 100644 index 000000000..b62587654 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HamsiBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/HamsiSmallCore.class b/core/out/production/classes/fr/cryptohash/HamsiSmallCore.class new file mode 100644 index 000000000..e15d8f2a4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/HamsiSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/JH224.class b/core/out/production/classes/fr/cryptohash/JH224.class new file mode 100644 index 000000000..24a751835 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/JH224.class differ diff --git a/core/out/production/classes/fr/cryptohash/JH256.class b/core/out/production/classes/fr/cryptohash/JH256.class new file mode 100644 index 000000000..d1425aa75 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/JH256.class differ diff --git a/core/out/production/classes/fr/cryptohash/JH384.class b/core/out/production/classes/fr/cryptohash/JH384.class new file mode 100644 index 000000000..b159729d8 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/JH384.class differ diff --git a/core/out/production/classes/fr/cryptohash/JH512.class b/core/out/production/classes/fr/cryptohash/JH512.class new file mode 100644 index 000000000..ff3869e6a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/JH512.class differ diff --git a/core/out/production/classes/fr/cryptohash/JHCore.class b/core/out/production/classes/fr/cryptohash/JHCore.class new file mode 100644 index 000000000..4ce73c2c5 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/JHCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Keccak224.class b/core/out/production/classes/fr/cryptohash/Keccak224.class new file mode 100644 index 000000000..6cf7be90c Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Keccak224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Keccak256.class b/core/out/production/classes/fr/cryptohash/Keccak256.class new file mode 100644 index 000000000..c9745a3d0 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Keccak256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Keccak384.class b/core/out/production/classes/fr/cryptohash/Keccak384.class new file mode 100644 index 000000000..7ef230118 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Keccak384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Keccak512.class b/core/out/production/classes/fr/cryptohash/Keccak512.class new file mode 100644 index 000000000..449e35d8b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Keccak512.class differ diff --git a/core/out/production/classes/fr/cryptohash/KeccakCore.class b/core/out/production/classes/fr/cryptohash/KeccakCore.class new file mode 100644 index 000000000..bd0c42253 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/KeccakCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Luffa224.class b/core/out/production/classes/fr/cryptohash/Luffa224.class new file mode 100644 index 000000000..ed5a66af9 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Luffa224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Luffa256.class b/core/out/production/classes/fr/cryptohash/Luffa256.class new file mode 100644 index 000000000..c4d4ec75b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Luffa256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Luffa384.class b/core/out/production/classes/fr/cryptohash/Luffa384.class new file mode 100644 index 000000000..747a146a0 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Luffa384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Luffa512.class b/core/out/production/classes/fr/cryptohash/Luffa512.class new file mode 100644 index 000000000..46b20d634 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Luffa512.class differ diff --git a/core/out/production/classes/fr/cryptohash/LuffaSmallCore.class b/core/out/production/classes/fr/cryptohash/LuffaSmallCore.class new file mode 100644 index 000000000..ba051a4a5 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/LuffaSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/MD2.class b/core/out/production/classes/fr/cryptohash/MD2.class new file mode 100644 index 000000000..b5876e060 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/MD2.class differ diff --git a/core/out/production/classes/fr/cryptohash/MD4.class b/core/out/production/classes/fr/cryptohash/MD4.class new file mode 100644 index 000000000..99e132341 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/MD4.class differ diff --git a/core/out/production/classes/fr/cryptohash/MD5.class b/core/out/production/classes/fr/cryptohash/MD5.class new file mode 100644 index 000000000..85fa1250e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/MD5.class differ diff --git a/core/out/production/classes/fr/cryptohash/MDHelper.class b/core/out/production/classes/fr/cryptohash/MDHelper.class new file mode 100644 index 000000000..193743f4c Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/MDHelper.class differ diff --git a/core/out/production/classes/fr/cryptohash/PANAMA.class b/core/out/production/classes/fr/cryptohash/PANAMA.class new file mode 100644 index 000000000..cc9fa1651 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/PANAMA.class differ diff --git a/core/out/production/classes/fr/cryptohash/RIPEMD.class b/core/out/production/classes/fr/cryptohash/RIPEMD.class new file mode 100644 index 000000000..d5d2298e6 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/RIPEMD.class differ diff --git a/core/out/production/classes/fr/cryptohash/RIPEMD128.class b/core/out/production/classes/fr/cryptohash/RIPEMD128.class new file mode 100644 index 000000000..41188d358 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/RIPEMD128.class differ diff --git a/core/out/production/classes/fr/cryptohash/RIPEMD160.class b/core/out/production/classes/fr/cryptohash/RIPEMD160.class new file mode 100644 index 000000000..cf325226b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/RIPEMD160.class differ diff --git a/core/out/production/classes/fr/cryptohash/RadioGatun32.class b/core/out/production/classes/fr/cryptohash/RadioGatun32.class new file mode 100644 index 000000000..ef48474ab Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/RadioGatun32.class differ diff --git a/core/out/production/classes/fr/cryptohash/RadioGatun64.class b/core/out/production/classes/fr/cryptohash/RadioGatun64.class new file mode 100644 index 000000000..733160ee9 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/RadioGatun64.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA0.class b/core/out/production/classes/fr/cryptohash/SHA0.class new file mode 100644 index 000000000..113b3c04a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA0.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA1.class b/core/out/production/classes/fr/cryptohash/SHA1.class new file mode 100644 index 000000000..3c8ecbbb1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA1.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA224.class b/core/out/production/classes/fr/cryptohash/SHA224.class new file mode 100644 index 000000000..d8c819790 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA224.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA256.class b/core/out/production/classes/fr/cryptohash/SHA256.class new file mode 100644 index 000000000..dadc5646e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA256.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA2BigCore.class b/core/out/production/classes/fr/cryptohash/SHA2BigCore.class new file mode 100644 index 000000000..c8e73fa7e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA2BigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA2Core.class b/core/out/production/classes/fr/cryptohash/SHA2Core.class new file mode 100644 index 000000000..4b473d1bc Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA2Core.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA384.class b/core/out/production/classes/fr/cryptohash/SHA384.class new file mode 100644 index 000000000..ed3901e97 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA384.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHA512.class b/core/out/production/classes/fr/cryptohash/SHA512.class new file mode 100644 index 000000000..30dedbfc1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHA512.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAvite224.class b/core/out/production/classes/fr/cryptohash/SHAvite224.class new file mode 100644 index 000000000..d3fb40e27 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAvite224.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAvite256.class b/core/out/production/classes/fr/cryptohash/SHAvite256.class new file mode 100644 index 000000000..53f7dff9a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAvite256.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAvite384.class b/core/out/production/classes/fr/cryptohash/SHAvite384.class new file mode 100644 index 000000000..7c5333f9e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAvite384.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAvite512.class b/core/out/production/classes/fr/cryptohash/SHAvite512.class new file mode 100644 index 000000000..b933d6bbb Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAvite512.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAviteBigCore.class b/core/out/production/classes/fr/cryptohash/SHAviteBigCore.class new file mode 100644 index 000000000..31af763dc Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAviteBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/SHAviteSmallCore.class b/core/out/production/classes/fr/cryptohash/SHAviteSmallCore.class new file mode 100644 index 000000000..e4918c0b1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SHAviteSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMD224.class b/core/out/production/classes/fr/cryptohash/SIMD224.class new file mode 100644 index 000000000..fa1021b98 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMD224.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMD256.class b/core/out/production/classes/fr/cryptohash/SIMD256.class new file mode 100644 index 000000000..3540f7711 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMD256.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMD384.class b/core/out/production/classes/fr/cryptohash/SIMD384.class new file mode 100644 index 000000000..55ce4a422 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMD384.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMD512.class b/core/out/production/classes/fr/cryptohash/SIMD512.class new file mode 100644 index 000000000..3c74c3a59 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMD512.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMDBigCore.class b/core/out/production/classes/fr/cryptohash/SIMDBigCore.class new file mode 100644 index 000000000..4f699772a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMDBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/SIMDSmallCore.class b/core/out/production/classes/fr/cryptohash/SIMDSmallCore.class new file mode 100644 index 000000000..13735998f Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SIMDSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Shabal192.class b/core/out/production/classes/fr/cryptohash/Shabal192.class new file mode 100644 index 000000000..5076ce84e Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Shabal192.class differ diff --git a/core/out/production/classes/fr/cryptohash/Shabal224.class b/core/out/production/classes/fr/cryptohash/Shabal224.class new file mode 100644 index 000000000..f00ce0307 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Shabal224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Shabal256.class b/core/out/production/classes/fr/cryptohash/Shabal256.class new file mode 100644 index 000000000..ff5c663f3 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Shabal256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Shabal384.class b/core/out/production/classes/fr/cryptohash/Shabal384.class new file mode 100644 index 000000000..0e3b44677 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Shabal384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Shabal512.class b/core/out/production/classes/fr/cryptohash/Shabal512.class new file mode 100644 index 000000000..dba57f14b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Shabal512.class differ diff --git a/core/out/production/classes/fr/cryptohash/ShabalGeneric.class b/core/out/production/classes/fr/cryptohash/ShabalGeneric.class new file mode 100644 index 000000000..1f52531b1 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/ShabalGeneric.class differ diff --git a/core/out/production/classes/fr/cryptohash/Skein224.class b/core/out/production/classes/fr/cryptohash/Skein224.class new file mode 100644 index 000000000..97bcaaeeb Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Skein224.class differ diff --git a/core/out/production/classes/fr/cryptohash/Skein256.class b/core/out/production/classes/fr/cryptohash/Skein256.class new file mode 100644 index 000000000..29ace7c2b Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Skein256.class differ diff --git a/core/out/production/classes/fr/cryptohash/Skein384.class b/core/out/production/classes/fr/cryptohash/Skein384.class new file mode 100644 index 000000000..c951f4740 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Skein384.class differ diff --git a/core/out/production/classes/fr/cryptohash/Skein512.class b/core/out/production/classes/fr/cryptohash/Skein512.class new file mode 100644 index 000000000..a69ef6dc9 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Skein512.class differ diff --git a/core/out/production/classes/fr/cryptohash/SkeinBigCore.class b/core/out/production/classes/fr/cryptohash/SkeinBigCore.class new file mode 100644 index 000000000..b35efe0d6 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SkeinBigCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/SkeinSmallCore.class b/core/out/production/classes/fr/cryptohash/SkeinSmallCore.class new file mode 100644 index 000000000..b1c8222f3 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/SkeinSmallCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Tiger.class b/core/out/production/classes/fr/cryptohash/Tiger.class new file mode 100644 index 000000000..2ef6d8355 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Tiger.class differ diff --git a/core/out/production/classes/fr/cryptohash/Tiger2.class b/core/out/production/classes/fr/cryptohash/Tiger2.class new file mode 100644 index 000000000..99f4630f7 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Tiger2.class differ diff --git a/core/out/production/classes/fr/cryptohash/TigerCore.class b/core/out/production/classes/fr/cryptohash/TigerCore.class new file mode 100644 index 000000000..063a513b7 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/TigerCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/Whirlpool.class b/core/out/production/classes/fr/cryptohash/Whirlpool.class new file mode 100644 index 000000000..59b7c25f4 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Whirlpool.class differ diff --git a/core/out/production/classes/fr/cryptohash/Whirlpool0.class b/core/out/production/classes/fr/cryptohash/Whirlpool0.class new file mode 100644 index 000000000..1285a697c Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Whirlpool0.class differ diff --git a/core/out/production/classes/fr/cryptohash/Whirlpool1.class b/core/out/production/classes/fr/cryptohash/Whirlpool1.class new file mode 100644 index 000000000..01cf021ee Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/Whirlpool1.class differ diff --git a/core/out/production/classes/fr/cryptohash/WhirlpoolCore.class b/core/out/production/classes/fr/cryptohash/WhirlpoolCore.class new file mode 100644 index 000000000..199e24891 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/WhirlpoolCore.class differ diff --git a/core/out/production/classes/fr/cryptohash/test/Speed.class b/core/out/production/classes/fr/cryptohash/test/Speed.class new file mode 100644 index 000000000..e75477923 Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/test/Speed.class differ diff --git a/core/out/production/classes/fr/cryptohash/test/TestDigest.class b/core/out/production/classes/fr/cryptohash/test/TestDigest.class new file mode 100644 index 000000000..09bb9473a Binary files /dev/null and b/core/out/production/classes/fr/cryptohash/test/TestDigest.class differ diff --git a/core/out/production/classes/host/furszy/zerocoinj/protocol/GenWitMessage.class b/core/out/production/classes/host/furszy/zerocoinj/protocol/GenWitMessage.class new file mode 100644 index 000000000..16e1b0961 Binary files /dev/null and b/core/out/production/classes/host/furszy/zerocoinj/protocol/GenWitMessage.class differ diff --git a/core/out/production/classes/host/furszy/zerocoinj/protocol/PubcoinsMessage.class b/core/out/production/classes/host/furszy/zerocoinj/protocol/PubcoinsMessage.class new file mode 100644 index 000000000..f01aa604e Binary files /dev/null and b/core/out/production/classes/host/furszy/zerocoinj/protocol/PubcoinsMessage.class differ diff --git a/core/out/production/classes/host/furszy/zerocoinj/wallet/MultiWallet.class b/core/out/production/classes/host/furszy/zerocoinj/wallet/MultiWallet.class new file mode 100644 index 000000000..947116bfe Binary files /dev/null and b/core/out/production/classes/host/furszy/zerocoinj/wallet/MultiWallet.class differ diff --git a/core/out/production/classes/host/furszy/zerocoinj/wallet/ZWallet.class b/core/out/production/classes/host/furszy/zerocoinj/wallet/ZWallet.class new file mode 100644 index 000000000..6c1a60bd9 Binary files /dev/null and b/core/out/production/classes/host/furszy/zerocoinj/wallet/ZWallet.class differ diff --git a/core/out/production/classes/org/bitcoin/NativeSecp256k1.class b/core/out/production/classes/org/bitcoin/NativeSecp256k1.class new file mode 100644 index 000000000..8412dd668 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/NativeSecp256k1.class differ diff --git a/core/out/production/classes/org/bitcoin/NativeSecp256k1Util$AssertFailException.class b/core/out/production/classes/org/bitcoin/NativeSecp256k1Util$AssertFailException.class new file mode 100644 index 000000000..13aae32db Binary files /dev/null and b/core/out/production/classes/org/bitcoin/NativeSecp256k1Util$AssertFailException.class differ diff --git a/core/out/production/classes/org/bitcoin/NativeSecp256k1Util.class b/core/out/production/classes/org/bitcoin/NativeSecp256k1Util.class new file mode 100644 index 000000000..bdca82559 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/NativeSecp256k1Util.class differ diff --git a/core/out/production/classes/org/bitcoin/Secp256k1Context.class b/core/out/production/classes/org/bitcoin/Secp256k1Context.class new file mode 100644 index 000000000..1baa9def7 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/Secp256k1Context.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$1.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$1.class new file mode 100644 index 000000000..cdf9fbb47 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$1.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$1.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$1.class new file mode 100644 index 000000000..c2207c506 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$1.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$Builder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$Builder.class new file mode 100644 index 000000000..6f9c480c2 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData.class new file mode 100644 index 000000000..7a50a4659 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedData.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedDataOrBuilder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedDataOrBuilder.class new file mode 100644 index 000000000..da7f8266f Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedDataOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$1.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$1.class new file mode 100644 index 000000000..b1e83b041 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$1.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$Builder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$Builder.class new file mode 100644 index 000000000..15e216154 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds.class new file mode 100644 index 000000000..300bcf08d Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeeds.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedsOrBuilder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedsOrBuilder.class new file mode 100644 index 000000000..64534d9da Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$PeerSeedsOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$1.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$1.class new file mode 100644 index 000000000..62ae6389e Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$1.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$Builder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$Builder.class new file mode 100644 index 000000000..79bc26722 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds.class new file mode 100644 index 000000000..db7ca0e12 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeeds.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeedsOrBuilder.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeedsOrBuilder.class new file mode 100644 index 000000000..8268c9381 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos$SignedPeerSeedsOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos.class b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos.class new file mode 100644 index 000000000..1787af3cd Binary files /dev/null and b/core/out/production/classes/org/bitcoin/crawler/PeerSeedProtos.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$1.class new file mode 100644 index 000000000..f6a22c193 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$1.class new file mode 100644 index 000000000..c684d33e0 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$Builder.class new file mode 100644 index 000000000..c20f915cb Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion.class new file mode 100644 index 000000000..9ab569eb7 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersion.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersionOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersionOrBuilder.class new file mode 100644 index 000000000..471a900e6 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ClientVersionOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$1.class new file mode 100644 index 000000000..32ed8238c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$Builder.class new file mode 100644 index 000000000..2c6842d10 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode$1.class new file mode 100644 index 000000000..a71ce0756 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode.class new file mode 100644 index 000000000..efa17d4a0 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error$ErrorCode.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error.class new file mode 100644 index 000000000..a56c9440f Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Error.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ErrorOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ErrorOrBuilder.class new file mode 100644 index 000000000..9436e8bbe Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ErrorOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$1.class new file mode 100644 index 000000000..021649645 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$Builder.class new file mode 100644 index 000000000..cfd487e4d Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate.class new file mode 100644 index 000000000..cc4b7c977 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Initiate.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$InitiateOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$InitiateOrBuilder.class new file mode 100644 index 000000000..57bbcc896 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$InitiateOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$1.class new file mode 100644 index 000000000..63331aa56 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$Builder.class new file mode 100644 index 000000000..a7f157ec7 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck.class new file mode 100644 index 000000000..6867942d0 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAck.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAckOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAckOrBuilder.class new file mode 100644 index 000000000..54feae638 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$PaymentAckOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$1.class new file mode 100644 index 000000000..10a31cf60 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$Builder.class new file mode 100644 index 000000000..d34c2c9ba Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract.class new file mode 100644 index 000000000..e6948b668 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContract.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContractOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContractOrBuilder.class new file mode 100644 index 000000000..93fe5afc5 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideContractOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$1.class new file mode 100644 index 000000000..46b991d5e Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$Builder.class new file mode 100644 index 000000000..e367b7db8 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund.class new file mode 100644 index 000000000..98f265c42 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefund.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefundOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefundOrBuilder.class new file mode 100644 index 000000000..ceb18bc69 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ProvideRefundOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$1.class new file mode 100644 index 000000000..f5a778542 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$Builder.class new file mode 100644 index 000000000..1499d53da Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund.class new file mode 100644 index 000000000..e8648faa7 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefund.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefundOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefundOrBuilder.class new file mode 100644 index 000000000..40db3ca55 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ReturnRefundOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$1.class new file mode 100644 index 000000000..e6aa39f36 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$Builder.class new file mode 100644 index 000000000..a824ce8d1 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion.class new file mode 100644 index 000000000..aa5ff562c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersion.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersionOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersionOrBuilder.class new file mode 100644 index 000000000..5957b9a80 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$ServerVersionOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$1.class new file mode 100644 index 000000000..47a8a8081 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$Builder.class new file mode 100644 index 000000000..f2e2585c1 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement.class new file mode 100644 index 000000000..f2fca0e23 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$Settlement.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$SettlementOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$SettlementOrBuilder.class new file mode 100644 index 000000000..3d395bb01 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$SettlementOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$1.class new file mode 100644 index 000000000..b49e38292 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$Builder.class new file mode 100644 index 000000000..e7652df7c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType$1.class new file mode 100644 index 000000000..958eaa305 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType.class new file mode 100644 index 000000000..99001482b Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage$MessageType.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage.class new file mode 100644 index 000000000..bbec35e90 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessage.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessageOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessageOrBuilder.class new file mode 100644 index 000000000..b17155e35 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$TwoWayChannelMessageOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$1.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$1.class new file mode 100644 index 000000000..4bff6119f Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$1.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$Builder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$Builder.class new file mode 100644 index 000000000..122fcb5c2 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment.class new file mode 100644 index 000000000..27f0b0773 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePayment.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePaymentOrBuilder.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePaymentOrBuilder.class new file mode 100644 index 000000000..e5c1ceacc Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos$UpdatePaymentOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/paymentchannel/Protos.class b/core/out/production/classes/org/bitcoin/paymentchannel/Protos.class new file mode 100644 index 000000000..877484543 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/paymentchannel/Protos.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$1.class new file mode 100644 index 000000000..579cd6724 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$1.class new file mode 100644 index 000000000..f59a27242 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$Builder.class new file mode 100644 index 000000000..2215e88bd Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output.class new file mode 100644 index 000000000..2180eb944 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Output.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$OutputOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$OutputOrBuilder.class new file mode 100644 index 000000000..eabd3e070 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$OutputOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$1.class new file mode 100644 index 000000000..65d958be8 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$Builder.class new file mode 100644 index 000000000..0843ae4ff Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment.class new file mode 100644 index 000000000..633dd11bb Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$Payment.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$1.class new file mode 100644 index 000000000..a32623e71 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$Builder.class new file mode 100644 index 000000000..acc18f1b4 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK.class new file mode 100644 index 000000000..9f843e35c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACK.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACKOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACKOrBuilder.class new file mode 100644 index 000000000..3c558654f Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentACKOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$1.class new file mode 100644 index 000000000..160a2a117 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$Builder.class new file mode 100644 index 000000000..ac52f9b71 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails.class new file mode 100644 index 000000000..9f564ac50 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetails.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetailsOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetailsOrBuilder.class new file mode 100644 index 000000000..9b3718a22 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentDetailsOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentOrBuilder.class new file mode 100644 index 000000000..0d0a8274c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$1.class new file mode 100644 index 000000000..0393931e8 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$Builder.class new file mode 100644 index 000000000..8b1b4c26c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest.class new file mode 100644 index 000000000..f6cf945f0 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequest.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequestOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequestOrBuilder.class new file mode 100644 index 000000000..25175ad82 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$PaymentRequestOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$1.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$1.class new file mode 100644 index 000000000..eb4dd1f96 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$1.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$Builder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$Builder.class new file mode 100644 index 000000000..f74f584b2 Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates$Builder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates.class new file mode 100644 index 000000000..f5a8b5c1c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509Certificates.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509CertificatesOrBuilder.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509CertificatesOrBuilder.class new file mode 100644 index 000000000..c2ce9ce1c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos$X509CertificatesOrBuilder.class differ diff --git a/core/out/production/classes/org/bitcoin/protocols/payments/Protos.class b/core/out/production/classes/org/bitcoin/protocols/payments/Protos.class new file mode 100644 index 000000000..31924019c Binary files /dev/null and b/core/out/production/classes/org/bitcoin/protocols/payments/Protos.class differ diff --git a/core/out/production/classes/org/darkcoinj/ActiveMasterNode.class b/core/out/production/classes/org/darkcoinj/ActiveMasterNode.class new file mode 100644 index 000000000..8c0de2b10 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/ActiveMasterNode.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSend.class b/core/out/production/classes/org/darkcoinj/DarkSend.class new file mode 100644 index 000000000..c9f3c3b78 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSend.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendBroadcastTransaction.class b/core/out/production/classes/org/darkcoinj/DarkSendBroadcastTransaction.class new file mode 100644 index 000000000..56d684ade Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendBroadcastTransaction.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendEntry.class b/core/out/production/classes/org/darkcoinj/DarkSendEntry.class new file mode 100644 index 000000000..b494dca11 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendEntry.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendEntryVin.class b/core/out/production/classes/org/darkcoinj/DarkSendEntryVin.class new file mode 100644 index 000000000..a228dacbe Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendEntryVin.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendPool$1.class b/core/out/production/classes/org/darkcoinj/DarkSendPool$1.class new file mode 100644 index 000000000..9f067e264 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendPool$1.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendPool$ErrorMessage.class b/core/out/production/classes/org/darkcoinj/DarkSendPool$ErrorMessage.class new file mode 100644 index 000000000..e29ca73b3 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendPool$ErrorMessage.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendPool.class b/core/out/production/classes/org/darkcoinj/DarkSendPool.class new file mode 100644 index 000000000..1cb0c8886 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendPool.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendSession.class b/core/out/production/classes/org/darkcoinj/DarkSendSession.class new file mode 100644 index 000000000..8b43b9c9a Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendSession.class differ diff --git a/core/out/production/classes/org/darkcoinj/DarkSendSigner.class b/core/out/production/classes/org/darkcoinj/DarkSendSigner.class new file mode 100644 index 000000000..6a8ecb051 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/DarkSendSigner.class differ diff --git a/core/out/production/classes/org/darkcoinj/InstantSend.class b/core/out/production/classes/org/darkcoinj/InstantSend.class new file mode 100644 index 000000000..3137359d6 Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/InstantSend.class differ diff --git a/core/out/production/classes/org/darkcoinj/MasterNodePayments.class b/core/out/production/classes/org/darkcoinj/MasterNodePayments.class new file mode 100644 index 000000000..23b4e76ac Binary files /dev/null and b/core/out/production/classes/org/darkcoinj/MasterNodePayments.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$1.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$1.class new file mode 100644 index 000000000..87afc2bf5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$2.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$2.class new file mode 100644 index 000000000..2ba0b9db3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$3.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$3.class new file mode 100644 index 000000000..9b777c4e9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$3.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$4.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$4.class new file mode 100644 index 000000000..9cd1a863f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$4.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$NewBlockType.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$NewBlockType.class new file mode 100644 index 000000000..e51a2ca75 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$NewBlockType.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain$OrphanBlock.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$OrphanBlock.class new file mode 100644 index 000000000..49f22e9d3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain$OrphanBlock.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractBlockChain.class b/core/out/production/classes/org/pivxj/core/AbstractBlockChain.class new file mode 100644 index 000000000..3258e8641 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractBlockChain.class differ diff --git a/core/out/production/classes/org/pivxj/core/AbstractManager.class b/core/out/production/classes/org/pivxj/core/AbstractManager.class new file mode 100644 index 000000000..f6133a67f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AbstractManager.class differ diff --git a/core/out/production/classes/org/pivxj/core/ActiveMasternode.class b/core/out/production/classes/org/pivxj/core/ActiveMasternode.class new file mode 100644 index 000000000..bcd200bae Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ActiveMasternode.class differ diff --git a/core/out/production/classes/org/pivxj/core/Address.class b/core/out/production/classes/org/pivxj/core/Address.class new file mode 100644 index 000000000..69354ce8c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Address.class differ diff --git a/core/out/production/classes/org/pivxj/core/AddressFormatException.class b/core/out/production/classes/org/pivxj/core/AddressFormatException.class new file mode 100644 index 000000000..9ada57694 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AddressFormatException.class differ diff --git a/core/out/production/classes/org/pivxj/core/AddressMessage.class b/core/out/production/classes/org/pivxj/core/AddressMessage.class new file mode 100644 index 000000000..c7c0abfa0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AddressMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/AlertMessage.class b/core/out/production/classes/org/pivxj/core/AlertMessage.class new file mode 100644 index 000000000..076b9a35c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/AlertMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/Base58.class b/core/out/production/classes/org/pivxj/core/Base58.class new file mode 100644 index 000000000..d67bfae6d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Base58.class differ diff --git a/core/out/production/classes/org/pivxj/core/BitcoinSerializer$BitcoinPacketHeader.class b/core/out/production/classes/org/pivxj/core/BitcoinSerializer$BitcoinPacketHeader.class new file mode 100644 index 000000000..82578a2ad Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BitcoinSerializer$BitcoinPacketHeader.class differ diff --git a/core/out/production/classes/org/pivxj/core/BitcoinSerializer.class b/core/out/production/classes/org/pivxj/core/BitcoinSerializer.class new file mode 100644 index 000000000..05fad264b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BitcoinSerializer.class differ diff --git a/core/out/production/classes/org/pivxj/core/Block$VerifyFlag.class b/core/out/production/classes/org/pivxj/core/Block$VerifyFlag.class new file mode 100644 index 000000000..09b3ef44f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Block$VerifyFlag.class differ diff --git a/core/out/production/classes/org/pivxj/core/Block.class b/core/out/production/classes/org/pivxj/core/Block.class new file mode 100644 index 000000000..f564398cc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Block.class differ diff --git a/core/out/production/classes/org/pivxj/core/BlockChain.class b/core/out/production/classes/org/pivxj/core/BlockChain.class new file mode 100644 index 000000000..9eef98ad3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BlockChain.class differ diff --git a/core/out/production/classes/org/pivxj/core/BloomFilter$BloomUpdate.class b/core/out/production/classes/org/pivxj/core/BloomFilter$BloomUpdate.class new file mode 100644 index 000000000..979ec8549 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BloomFilter$BloomUpdate.class differ diff --git a/core/out/production/classes/org/pivxj/core/BloomFilter.class b/core/out/production/classes/org/pivxj/core/BloomFilter.class new file mode 100644 index 000000000..faa1e9cbe Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BloomFilter.class differ diff --git a/core/out/production/classes/org/pivxj/core/BudgetManager.class b/core/out/production/classes/org/pivxj/core/BudgetManager.class new file mode 100644 index 000000000..381554764 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/BudgetManager.class differ diff --git a/core/out/production/classes/org/pivxj/core/CheckpointManager.class b/core/out/production/classes/org/pivxj/core/CheckpointManager.class new file mode 100644 index 000000000..1f280be07 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/CheckpointManager.class differ diff --git a/core/out/production/classes/org/pivxj/core/ChildMessage.class b/core/out/production/classes/org/pivxj/core/ChildMessage.class new file mode 100644 index 000000000..92f217445 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ChildMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/Coin.class b/core/out/production/classes/org/pivxj/core/Coin.class new file mode 100644 index 000000000..7c8f45fe1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Coin.class differ diff --git a/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinHash.class b/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinHash.class new file mode 100644 index 000000000..23a72b887 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinHash.class differ diff --git a/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinPrecision.class b/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinPrecision.class new file mode 100644 index 000000000..8fb01eb51 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/CoinDefinition$CoinPrecision.class differ diff --git a/core/out/production/classes/org/pivxj/core/CoinDefinition$UnspentAPIType.class b/core/out/production/classes/org/pivxj/core/CoinDefinition$UnspentAPIType.class new file mode 100644 index 000000000..b813666fa Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/CoinDefinition$UnspentAPIType.class differ diff --git a/core/out/production/classes/org/pivxj/core/CoinDefinition.class b/core/out/production/classes/org/pivxj/core/CoinDefinition.class new file mode 100644 index 000000000..1cf740df7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/CoinDefinition.class differ diff --git a/core/out/production/classes/org/pivxj/core/Context$1.class b/core/out/production/classes/org/pivxj/core/Context$1.class new file mode 100644 index 000000000..7de73b708 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Context$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/Context.class b/core/out/production/classes/org/pivxj/core/Context.class new file mode 100644 index 000000000..e13dd2305 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Context.class differ diff --git a/core/out/production/classes/org/pivxj/core/DarkCoinSystem.class b/core/out/production/classes/org/pivxj/core/DarkCoinSystem.class new file mode 100644 index 000000000..1d3dd1483 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DarkCoinSystem.class differ diff --git a/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryMessage.class b/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryMessage.class new file mode 100644 index 000000000..3d9be37e0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryPingMessage.class b/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryPingMessage.class new file mode 100644 index 000000000..06460b72b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DarkSendElectionEntryPingMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/DarkSendEntryGetMessage.class b/core/out/production/classes/org/pivxj/core/DarkSendEntryGetMessage.class new file mode 100644 index 000000000..70d111743 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DarkSendEntryGetMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/DarkSendQueue.class b/core/out/production/classes/org/pivxj/core/DarkSendQueue.class new file mode 100644 index 000000000..b265a25d4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DarkSendQueue.class differ diff --git a/core/out/production/classes/org/pivxj/core/DummySerializer.class b/core/out/production/classes/org/pivxj/core/DummySerializer.class new file mode 100644 index 000000000..c94cb3cd9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DummySerializer.class differ diff --git a/core/out/production/classes/org/pivxj/core/DumpedPrivateKey.class b/core/out/production/classes/org/pivxj/core/DumpedPrivateKey.class new file mode 100644 index 000000000..c89109c4d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/DumpedPrivateKey.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey$1.class b/core/out/production/classes/org/pivxj/core/ECKey$1.class new file mode 100644 index 000000000..e67543ad7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey$2.class b/core/out/production/classes/org/pivxj/core/ECKey$2.class new file mode 100644 index 000000000..779c79ab4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey$ECDSASignature.class b/core/out/production/classes/org/pivxj/core/ECKey$ECDSASignature.class new file mode 100644 index 000000000..bc4840c09 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey$ECDSASignature.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey$KeyIsEncryptedException.class b/core/out/production/classes/org/pivxj/core/ECKey$KeyIsEncryptedException.class new file mode 100644 index 000000000..f5c6f3051 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey$KeyIsEncryptedException.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey$MissingPrivateKeyException.class b/core/out/production/classes/org/pivxj/core/ECKey$MissingPrivateKeyException.class new file mode 100644 index 000000000..d35c133f3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey$MissingPrivateKeyException.class differ diff --git a/core/out/production/classes/org/pivxj/core/ECKey.class b/core/out/production/classes/org/pivxj/core/ECKey.class new file mode 100644 index 000000000..e56248c1a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ECKey.class differ diff --git a/core/out/production/classes/org/pivxj/core/EmptyMessage.class b/core/out/production/classes/org/pivxj/core/EmptyMessage.class new file mode 100644 index 000000000..8856085b9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/EmptyMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/FilteredBlock.class b/core/out/production/classes/org/pivxj/core/FilteredBlock.class new file mode 100644 index 000000000..bcd537d9e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/FilteredBlock.class differ diff --git a/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain$Verifier.class b/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain$Verifier.class new file mode 100644 index 000000000..04b9cc32f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain$Verifier.class differ diff --git a/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain.class b/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain.class new file mode 100644 index 000000000..c55aa8850 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/FullPrunedBlockChain.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetAddrMessage.class b/core/out/production/classes/org/pivxj/core/GetAddrMessage.class new file mode 100644 index 000000000..2798d0fc2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetAddrMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetBlocksMessage.class b/core/out/production/classes/org/pivxj/core/GetBlocksMessage.class new file mode 100644 index 000000000..8958a8c88 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetBlocksMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetDataMessage.class b/core/out/production/classes/org/pivxj/core/GetDataMessage.class new file mode 100644 index 000000000..3471abd12 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetDataMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetHeadersMessage.class b/core/out/production/classes/org/pivxj/core/GetHeadersMessage.class new file mode 100644 index 000000000..612ae8ae6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetHeadersMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetMasternodePaymentRequestSyncMessage.class b/core/out/production/classes/org/pivxj/core/GetMasternodePaymentRequestSyncMessage.class new file mode 100644 index 000000000..aeb80124e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetMasternodePaymentRequestSyncMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetMasternodeVoteSyncMessage.class b/core/out/production/classes/org/pivxj/core/GetMasternodeVoteSyncMessage.class new file mode 100644 index 000000000..77c565d0c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetMasternodeVoteSyncMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetSporksMessage.class b/core/out/production/classes/org/pivxj/core/GetSporksMessage.class new file mode 100644 index 000000000..627bc8928 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetSporksMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GetUTXOsMessage.class b/core/out/production/classes/org/pivxj/core/GetUTXOsMessage.class new file mode 100644 index 000000000..8ff50aacc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GetUTXOsMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/GovernanceSyncMessage.class b/core/out/production/classes/org/pivxj/core/GovernanceSyncMessage.class new file mode 100644 index 000000000..a08789d13 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/GovernanceSyncMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/HeadersMessage.class b/core/out/production/classes/org/pivxj/core/HeadersMessage.class new file mode 100644 index 000000000..7a568cf8d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/HeadersMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/InsufficientMoneyException.class b/core/out/production/classes/org/pivxj/core/InsufficientMoneyException.class new file mode 100644 index 000000000..e2ec10fb4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/InsufficientMoneyException.class differ diff --git a/core/out/production/classes/org/pivxj/core/InventoryItem$Type.class b/core/out/production/classes/org/pivxj/core/InventoryItem$Type.class new file mode 100644 index 000000000..1f034d4ab Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/InventoryItem$Type.class differ diff --git a/core/out/production/classes/org/pivxj/core/InventoryItem.class b/core/out/production/classes/org/pivxj/core/InventoryItem.class new file mode 100644 index 000000000..60f5def08 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/InventoryItem.class differ diff --git a/core/out/production/classes/org/pivxj/core/InventoryMessage.class b/core/out/production/classes/org/pivxj/core/InventoryMessage.class new file mode 100644 index 000000000..062855c1b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/InventoryMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/ListMessage.class b/core/out/production/classes/org/pivxj/core/ListMessage.class new file mode 100644 index 000000000..b2739b730 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ListMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasterNodePaymentWinner.class b/core/out/production/classes/org/pivxj/core/MasterNodePaymentWinner.class new file mode 100644 index 000000000..d55526cc5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasterNodePaymentWinner.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasterNodeSystem$CompareValueOnly.class b/core/out/production/classes/org/pivxj/core/MasterNodeSystem$CompareValueOnly.class new file mode 100644 index 000000000..89be6bf4b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasterNodeSystem$CompareValueOnly.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasterNodeSystem$MyEntry.class b/core/out/production/classes/org/pivxj/core/MasterNodeSystem$MyEntry.class new file mode 100644 index 000000000..2dc98bce1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasterNodeSystem$MyEntry.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasterNodeSystem.class b/core/out/production/classes/org/pivxj/core/MasterNodeSystem.class new file mode 100644 index 000000000..fc0d37668 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasterNodeSystem.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasterNodeVote.class b/core/out/production/classes/org/pivxj/core/MasterNodeVote.class new file mode 100644 index 000000000..64d8badbe Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasterNodeVote.class differ diff --git a/core/out/production/classes/org/pivxj/core/Masternode$State.class b/core/out/production/classes/org/pivxj/core/Masternode$State.class new file mode 100644 index 000000000..2661ebd07 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Masternode$State.class differ diff --git a/core/out/production/classes/org/pivxj/core/Masternode.class b/core/out/production/classes/org/pivxj/core/Masternode.class new file mode 100644 index 000000000..67324e5bb Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Masternode.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeAddress.class b/core/out/production/classes/org/pivxj/core/MasternodeAddress.class new file mode 100644 index 000000000..e775a495c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeAddress.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeBroadcast.class b/core/out/production/classes/org/pivxj/core/MasternodeBroadcast.class new file mode 100644 index 000000000..e316e8ff5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeBroadcast.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeInfo.class b/core/out/production/classes/org/pivxj/core/MasternodeInfo.class new file mode 100644 index 000000000..d4c10b090 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeInfo.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeManager$1.class b/core/out/production/classes/org/pivxj/core/MasternodeManager$1.class new file mode 100644 index 000000000..516c2a141 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeManager$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreMn.class b/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreMn.class new file mode 100644 index 000000000..3d4931d5f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreMn.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreTxIn.class b/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreTxIn.class new file mode 100644 index 000000000..fc197ea18 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeManager$CompareScoreTxIn.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeManager.class b/core/out/production/classes/org/pivxj/core/MasternodeManager.class new file mode 100644 index 000000000..ce87e491d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeManager.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeManagerListener.class b/core/out/production/classes/org/pivxj/core/MasternodeManagerListener.class new file mode 100644 index 000000000..90fd1efa4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeManagerListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodePayments.class b/core/out/production/classes/org/pivxj/core/MasternodePayments.class new file mode 100644 index 000000000..1d456442b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodePayments.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodePing.class b/core/out/production/classes/org/pivxj/core/MasternodePing.class new file mode 100644 index 000000000..c2f562c18 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodePing.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeSignature.class b/core/out/production/classes/org/pivxj/core/MasternodeSignature.class new file mode 100644 index 000000000..5b3537168 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeSignature.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeSync$1.class b/core/out/production/classes/org/pivxj/core/MasternodeSync$1.class new file mode 100644 index 000000000..927d42bd1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeSync$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeSync.class b/core/out/production/classes/org/pivxj/core/MasternodeSync.class new file mode 100644 index 000000000..a24c0563b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeSync.class differ diff --git a/core/out/production/classes/org/pivxj/core/MasternodeSyncListener.class b/core/out/production/classes/org/pivxj/core/MasternodeSyncListener.class new file mode 100644 index 000000000..7b8fb39d5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MasternodeSyncListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/MemoryPoolMessage.class b/core/out/production/classes/org/pivxj/core/MemoryPoolMessage.class new file mode 100644 index 000000000..3b47b0912 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MemoryPoolMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/Message.class b/core/out/production/classes/org/pivxj/core/Message.class new file mode 100644 index 000000000..5aa4f2fbc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Message.class differ diff --git a/core/out/production/classes/org/pivxj/core/MessageSerializer.class b/core/out/production/classes/org/pivxj/core/MessageSerializer.class new file mode 100644 index 000000000..6f564479d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/MessageSerializer.class differ diff --git a/core/out/production/classes/org/pivxj/core/Monetary.class b/core/out/production/classes/org/pivxj/core/Monetary.class new file mode 100644 index 000000000..7368c6e12 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Monetary.class differ diff --git a/core/out/production/classes/org/pivxj/core/NetAddress.class b/core/out/production/classes/org/pivxj/core/NetAddress.class new file mode 100644 index 000000000..103658659 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/NetAddress.class differ diff --git a/core/out/production/classes/org/pivxj/core/NetworkParameters$ProtocolVersion.class b/core/out/production/classes/org/pivxj/core/NetworkParameters$ProtocolVersion.class new file mode 100644 index 000000000..481961691 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/NetworkParameters$ProtocolVersion.class differ diff --git a/core/out/production/classes/org/pivxj/core/NetworkParameters.class b/core/out/production/classes/org/pivxj/core/NetworkParameters.class new file mode 100644 index 000000000..7a49ad60a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/NetworkParameters.class differ diff --git a/core/out/production/classes/org/pivxj/core/NotFoundMessage.class b/core/out/production/classes/org/pivxj/core/NotFoundMessage.class new file mode 100644 index 000000000..fb8af2f51 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/NotFoundMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/PartialMerkleTree$1.class b/core/out/production/classes/org/pivxj/core/PartialMerkleTree$1.class new file mode 100644 index 000000000..ef0ef00f2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PartialMerkleTree$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/PartialMerkleTree$ValuesUsed.class b/core/out/production/classes/org/pivxj/core/PartialMerkleTree$ValuesUsed.class new file mode 100644 index 000000000..6da61397e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PartialMerkleTree$ValuesUsed.class differ diff --git a/core/out/production/classes/org/pivxj/core/PartialMerkleTree.class b/core/out/production/classes/org/pivxj/core/PartialMerkleTree.class new file mode 100644 index 000000000..5add9332b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PartialMerkleTree.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$1.class b/core/out/production/classes/org/pivxj/core/Peer$1.class new file mode 100644 index 000000000..efb13ebbd Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$10.class b/core/out/production/classes/org/pivxj/core/Peer$10.class new file mode 100644 index 000000000..d54858c9c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$10.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$11.class b/core/out/production/classes/org/pivxj/core/Peer$11.class new file mode 100644 index 000000000..c7cfb6c7f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$11.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$12.class b/core/out/production/classes/org/pivxj/core/Peer$12.class new file mode 100644 index 000000000..553991b76 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$12.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$2.class b/core/out/production/classes/org/pivxj/core/Peer$2.class new file mode 100644 index 000000000..9409956f0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$3.class b/core/out/production/classes/org/pivxj/core/Peer$3.class new file mode 100644 index 000000000..331890610 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$3.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$4.class b/core/out/production/classes/org/pivxj/core/Peer$4.class new file mode 100644 index 000000000..945b74199 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$4.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$5.class b/core/out/production/classes/org/pivxj/core/Peer$5.class new file mode 100644 index 000000000..7bc903aec Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$5.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$6.class b/core/out/production/classes/org/pivxj/core/Peer$6.class new file mode 100644 index 000000000..59c865751 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$6.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$7.class b/core/out/production/classes/org/pivxj/core/Peer$7.class new file mode 100644 index 000000000..a67c00cb3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$7.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$8$1.class b/core/out/production/classes/org/pivxj/core/Peer$8$1.class new file mode 100644 index 000000000..6c12b2869 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$8$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$8.class b/core/out/production/classes/org/pivxj/core/Peer$8.class new file mode 100644 index 000000000..ecd60c1c0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$8.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$9.class b/core/out/production/classes/org/pivxj/core/Peer$9.class new file mode 100644 index 000000000..7a6636d44 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$9.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$GetDataRequest.class b/core/out/production/classes/org/pivxj/core/Peer$GetDataRequest.class new file mode 100644 index 000000000..02cbf52fb Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$GetDataRequest.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer$PendingPing.class b/core/out/production/classes/org/pivxj/core/Peer$PendingPing.class new file mode 100644 index 000000000..12bd82d94 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer$PendingPing.class differ diff --git a/core/out/production/classes/org/pivxj/core/Peer.class b/core/out/production/classes/org/pivxj/core/Peer.class new file mode 100644 index 000000000..c9b49baf4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Peer.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerAddress.class b/core/out/production/classes/org/pivxj/core/PeerAddress.class new file mode 100644 index 000000000..adebf41bc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerAddress.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerException.class b/core/out/production/classes/org/pivxj/core/PeerException.class new file mode 100644 index 000000000..000f60151 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerException.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerFilterProvider.class b/core/out/production/classes/org/pivxj/core/PeerFilterProvider.class new file mode 100644 index 000000000..dfa2aa434 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerFilterProvider.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$1.class b/core/out/production/classes/org/pivxj/core/PeerGroup$1.class new file mode 100644 index 000000000..5f53ea492 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$10.class b/core/out/production/classes/org/pivxj/core/PeerGroup$10.class new file mode 100644 index 000000000..f4078666b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$10.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$11.class b/core/out/production/classes/org/pivxj/core/PeerGroup$11.class new file mode 100644 index 000000000..757210a81 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$11.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$12.class b/core/out/production/classes/org/pivxj/core/PeerGroup$12.class new file mode 100644 index 000000000..b0140f366 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$12.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$13.class b/core/out/production/classes/org/pivxj/core/PeerGroup$13.class new file mode 100644 index 000000000..73389a64e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$13.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$14.class b/core/out/production/classes/org/pivxj/core/PeerGroup$14.class new file mode 100644 index 000000000..d35552bb8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$14.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$15.class b/core/out/production/classes/org/pivxj/core/PeerGroup$15.class new file mode 100644 index 000000000..983cf917f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$15.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$16.class b/core/out/production/classes/org/pivxj/core/PeerGroup$16.class new file mode 100644 index 000000000..02499e5b0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$16.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$17.class b/core/out/production/classes/org/pivxj/core/PeerGroup$17.class new file mode 100644 index 000000000..081ba845e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$17.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$2.class b/core/out/production/classes/org/pivxj/core/PeerGroup$2.class new file mode 100644 index 000000000..df2332a89 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$3.class b/core/out/production/classes/org/pivxj/core/PeerGroup$3.class new file mode 100644 index 000000000..1a61cae00 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$3.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$4.class b/core/out/production/classes/org/pivxj/core/PeerGroup$4.class new file mode 100644 index 000000000..a9bbff3dc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$4.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$5.class b/core/out/production/classes/org/pivxj/core/PeerGroup$5.class new file mode 100644 index 000000000..c2822bf46 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$5.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$6.class b/core/out/production/classes/org/pivxj/core/PeerGroup$6.class new file mode 100644 index 000000000..2b825652f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$6.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$7.class b/core/out/production/classes/org/pivxj/core/PeerGroup$7.class new file mode 100644 index 000000000..88d54bc27 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$7.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$8.class b/core/out/production/classes/org/pivxj/core/PeerGroup$8.class new file mode 100644 index 000000000..02859256a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$8.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$9.class b/core/out/production/classes/org/pivxj/core/PeerGroup$9.class new file mode 100644 index 000000000..2f602f47e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$9.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$ChainDownloadSpeedCalculator.class b/core/out/production/classes/org/pivxj/core/PeerGroup$ChainDownloadSpeedCalculator.class new file mode 100644 index 000000000..7f8233e9a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$ChainDownloadSpeedCalculator.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$FilterRecalculateMode.class b/core/out/production/classes/org/pivxj/core/PeerGroup$FilterRecalculateMode.class new file mode 100644 index 000000000..8ac811cd6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$FilterRecalculateMode.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$LocalhostCheckState.class b/core/out/production/classes/org/pivxj/core/PeerGroup$LocalhostCheckState.class new file mode 100644 index 000000000..872710a34 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$LocalhostCheckState.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$PeerListener.class b/core/out/production/classes/org/pivxj/core/PeerGroup$PeerListener.class new file mode 100644 index 000000000..84d841580 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$PeerListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup$PeerStartupListener.class b/core/out/production/classes/org/pivxj/core/PeerGroup$PeerStartupListener.class new file mode 100644 index 000000000..876086182 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup$PeerStartupListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerGroup.class b/core/out/production/classes/org/pivxj/core/PeerGroup.class new file mode 100644 index 000000000..a62688683 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerGroup.class differ diff --git a/core/out/production/classes/org/pivxj/core/PeerSocketHandler.class b/core/out/production/classes/org/pivxj/core/PeerSocketHandler.class new file mode 100644 index 000000000..24f30e3f4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PeerSocketHandler.class differ diff --git a/core/out/production/classes/org/pivxj/core/Ping.class b/core/out/production/classes/org/pivxj/core/Ping.class new file mode 100644 index 000000000..2c1342f3b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Ping.class differ diff --git a/core/out/production/classes/org/pivxj/core/Pong.class b/core/out/production/classes/org/pivxj/core/Pong.class new file mode 100644 index 000000000..995094c6d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Pong.class differ diff --git a/core/out/production/classes/org/pivxj/core/ProtocolException.class b/core/out/production/classes/org/pivxj/core/ProtocolException.class new file mode 100644 index 000000000..d47ae60de Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ProtocolException.class differ diff --git a/core/out/production/classes/org/pivxj/core/PrunedException.class b/core/out/production/classes/org/pivxj/core/PrunedException.class new file mode 100644 index 000000000..6772c786c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PrunedException.class differ diff --git a/core/out/production/classes/org/pivxj/core/PublicKey.class b/core/out/production/classes/org/pivxj/core/PublicKey.class new file mode 100644 index 000000000..c6e15abaa Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/PublicKey.class differ diff --git a/core/out/production/classes/org/pivxj/core/RejectMessage$RejectCode.class b/core/out/production/classes/org/pivxj/core/RejectMessage$RejectCode.class new file mode 100644 index 000000000..72e7f8213 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/RejectMessage$RejectCode.class differ diff --git a/core/out/production/classes/org/pivxj/core/RejectMessage.class b/core/out/production/classes/org/pivxj/core/RejectMessage.class new file mode 100644 index 000000000..8a08d04a8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/RejectMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/RejectedTransactionException.class b/core/out/production/classes/org/pivxj/core/RejectedTransactionException.class new file mode 100644 index 000000000..43bdfd475 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/RejectedTransactionException.class differ diff --git a/core/out/production/classes/org/pivxj/core/ScriptException.class b/core/out/production/classes/org/pivxj/core/ScriptException.class new file mode 100644 index 000000000..c65963cdb Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/ScriptException.class differ diff --git a/core/out/production/classes/org/pivxj/core/SendHeadersMessage.class b/core/out/production/classes/org/pivxj/core/SendHeadersMessage.class new file mode 100644 index 000000000..35614e13f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/SendHeadersMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/Sha256Hash.class b/core/out/production/classes/org/pivxj/core/Sha256Hash.class new file mode 100644 index 000000000..15f67881e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Sha256Hash.class differ diff --git a/core/out/production/classes/org/pivxj/core/SporkManager.class b/core/out/production/classes/org/pivxj/core/SporkManager.class new file mode 100644 index 000000000..8cd40535f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/SporkManager.class differ diff --git a/core/out/production/classes/org/pivxj/core/SporkMessage.class b/core/out/production/classes/org/pivxj/core/SporkMessage.class new file mode 100644 index 000000000..3706f169f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/SporkMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/StoredBlock.class b/core/out/production/classes/org/pivxj/core/StoredBlock.class new file mode 100644 index 000000000..8a0487bad Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/StoredBlock.class differ diff --git a/core/out/production/classes/org/pivxj/core/StoredUndoableBlock.class b/core/out/production/classes/org/pivxj/core/StoredUndoableBlock.class new file mode 100644 index 000000000..dc2984b8a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/StoredUndoableBlock.class differ diff --git a/core/out/production/classes/org/pivxj/core/SyncStatusCount.class b/core/out/production/classes/org/pivxj/core/SyncStatusCount.class new file mode 100644 index 000000000..e4b02fdab Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/SyncStatusCount.class differ diff --git a/core/out/production/classes/org/pivxj/core/Transaction$1.class b/core/out/production/classes/org/pivxj/core/Transaction$1.class new file mode 100644 index 000000000..d07a951a2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Transaction$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/Transaction$2.class b/core/out/production/classes/org/pivxj/core/Transaction$2.class new file mode 100644 index 000000000..8cbe42f77 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Transaction$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/Transaction$Purpose.class b/core/out/production/classes/org/pivxj/core/Transaction$Purpose.class new file mode 100644 index 000000000..94967acbf Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Transaction$Purpose.class differ diff --git a/core/out/production/classes/org/pivxj/core/Transaction$SigHash.class b/core/out/production/classes/org/pivxj/core/Transaction$SigHash.class new file mode 100644 index 000000000..fc953bf3a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Transaction$SigHash.class differ diff --git a/core/out/production/classes/org/pivxj/core/Transaction.class b/core/out/production/classes/org/pivxj/core/Transaction.class new file mode 100644 index 000000000..2c36e4b70 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Transaction.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBag.class b/core/out/production/classes/org/pivxj/core/TransactionBag.class new file mode 100644 index 000000000..114cea582 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBag.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$1.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$1.class new file mode 100644 index 000000000..e9d9dc0fd Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$2.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$2.class new file mode 100644 index 000000000..ca72364a2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$3.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$3.class new file mode 100644 index 000000000..fe4c55580 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$3.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ConfidenceChange.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ConfidenceChange.class new file mode 100644 index 000000000..17684ac81 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ConfidenceChange.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$EnoughAvailablePeers.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$EnoughAvailablePeers.class new file mode 100644 index 000000000..b7c4e6966 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$EnoughAvailablePeers.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ProgressCallback.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ProgressCallback.class new file mode 100644 index 000000000..9547cec0a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast$ProgressCallback.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcast.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcast.class new file mode 100644 index 000000000..3c8c3aacd Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcast.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionBroadcaster.class b/core/out/production/classes/org/pivxj/core/TransactionBroadcaster.class new file mode 100644 index 000000000..b5f4eee40 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionBroadcaster.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$1.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$1.class new file mode 100644 index 000000000..ba8f6e3c6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$2.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$2.class new file mode 100644 index 000000000..8d89f2ef4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$2.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$3.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$3.class new file mode 100644 index 000000000..cb3b40a76 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$3.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$ConfidenceType.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$ConfidenceType.class new file mode 100644 index 000000000..1f040013d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$ConfidenceType.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$IXType.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$IXType.class new file mode 100644 index 000000000..d424531ac Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$IXType.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener$ChangeReason.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener$ChangeReason.class new file mode 100644 index 000000000..bc69d788e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener$ChangeReason.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener.class new file mode 100644 index 000000000..3a52a1f41 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Listener.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence$Source.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Source.class new file mode 100644 index 000000000..26422cc3e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence$Source.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionConfidence.class b/core/out/production/classes/org/pivxj/core/TransactionConfidence.class new file mode 100644 index 000000000..3d1eb5d53 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionConfidence.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectMode.class b/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectMode.class new file mode 100644 index 000000000..5e879d1c0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectMode.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectionResult.class b/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectionResult.class new file mode 100644 index 000000000..30850e5a4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionInput$ConnectionResult.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionInput.class b/core/out/production/classes/org/pivxj/core/TransactionInput.class new file mode 100644 index 000000000..a1927e7ea Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionInput.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionLock.class b/core/out/production/classes/org/pivxj/core/TransactionLock.class new file mode 100644 index 000000000..c99e6a6c6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionLock.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionLockCandidate.class b/core/out/production/classes/org/pivxj/core/TransactionLockCandidate.class new file mode 100644 index 000000000..fb1cb4e45 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionLockCandidate.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionLockRequest.class b/core/out/production/classes/org/pivxj/core/TransactionLockRequest.class new file mode 100644 index 000000000..6b7f3f528 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionLockRequest.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionLockVote.class b/core/out/production/classes/org/pivxj/core/TransactionLockVote.class new file mode 100644 index 000000000..fe1cdf3ef Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionLockVote.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionOutPoint.class b/core/out/production/classes/org/pivxj/core/TransactionOutPoint.class new file mode 100644 index 000000000..19012000a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionOutPoint.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionOutPointLock.class b/core/out/production/classes/org/pivxj/core/TransactionOutPointLock.class new file mode 100644 index 000000000..1e94ea06b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionOutPointLock.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionOutput.class b/core/out/production/classes/org/pivxj/core/TransactionOutput.class new file mode 100644 index 000000000..f0f1a7a6f Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionOutput.class differ diff --git a/core/out/production/classes/org/pivxj/core/TransactionOutputChanges.class b/core/out/production/classes/org/pivxj/core/TransactionOutputChanges.class new file mode 100644 index 000000000..1d92a555b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TransactionOutputChanges.class differ diff --git a/core/out/production/classes/org/pivxj/core/TxConfidenceTable$1.class b/core/out/production/classes/org/pivxj/core/TxConfidenceTable$1.class new file mode 100644 index 000000000..ee7905e53 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TxConfidenceTable$1.class differ diff --git a/core/out/production/classes/org/pivxj/core/TxConfidenceTable$WeakConfidenceReference.class b/core/out/production/classes/org/pivxj/core/TxConfidenceTable$WeakConfidenceReference.class new file mode 100644 index 000000000..d0a677270 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TxConfidenceTable$WeakConfidenceReference.class differ diff --git a/core/out/production/classes/org/pivxj/core/TxConfidenceTable.class b/core/out/production/classes/org/pivxj/core/TxConfidenceTable.class new file mode 100644 index 000000000..848cb296b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/TxConfidenceTable.class differ diff --git a/core/out/production/classes/org/pivxj/core/UTXO.class b/core/out/production/classes/org/pivxj/core/UTXO.class new file mode 100644 index 000000000..2d871283d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UTXO.class differ diff --git a/core/out/production/classes/org/pivxj/core/UTXOProvider.class b/core/out/production/classes/org/pivxj/core/UTXOProvider.class new file mode 100644 index 000000000..95d28ac68 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UTXOProvider.class differ diff --git a/core/out/production/classes/org/pivxj/core/UTXOProviderException.class b/core/out/production/classes/org/pivxj/core/UTXOProviderException.class new file mode 100644 index 000000000..0bb013f5a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UTXOProviderException.class differ diff --git a/core/out/production/classes/org/pivxj/core/UTXOsMessage.class b/core/out/production/classes/org/pivxj/core/UTXOsMessage.class new file mode 100644 index 000000000..5f63b1dfc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UTXOsMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/UnknownMessage.class b/core/out/production/classes/org/pivxj/core/UnknownMessage.class new file mode 100644 index 000000000..b3dafc635 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UnknownMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/UnsafeByteArrayOutputStream.class b/core/out/production/classes/org/pivxj/core/UnsafeByteArrayOutputStream.class new file mode 100644 index 000000000..dc957e902 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/UnsafeByteArrayOutputStream.class differ diff --git a/core/out/production/classes/org/pivxj/core/Utils$Pair.class b/core/out/production/classes/org/pivxj/core/Utils$Pair.class new file mode 100644 index 000000000..ac6c1773c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Utils$Pair.class differ diff --git a/core/out/production/classes/org/pivxj/core/Utils.class b/core/out/production/classes/org/pivxj/core/Utils.class new file mode 100644 index 000000000..6e6e7c0e1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/Utils.class differ diff --git a/core/out/production/classes/org/pivxj/core/VarInt.class b/core/out/production/classes/org/pivxj/core/VarInt.class new file mode 100644 index 000000000..10973eecc Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VarInt.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$BlockVersionOutOfDate.class b/core/out/production/classes/org/pivxj/core/VerificationException$BlockVersionOutOfDate.class new file mode 100644 index 000000000..447bc7023 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$BlockVersionOutOfDate.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseHeightMismatch.class b/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseHeightMismatch.class new file mode 100644 index 000000000..959d721b8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseHeightMismatch.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseScriptSizeOutOfRange.class b/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseScriptSizeOutOfRange.class new file mode 100644 index 000000000..87e0fae23 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$CoinbaseScriptSizeOutOfRange.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$DuplicatedOutPoint.class b/core/out/production/classes/org/pivxj/core/VerificationException$DuplicatedOutPoint.class new file mode 100644 index 000000000..5f02a415b Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$DuplicatedOutPoint.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$EmptyInputsOrOutputs.class b/core/out/production/classes/org/pivxj/core/VerificationException$EmptyInputsOrOutputs.class new file mode 100644 index 000000000..9124e66cb Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$EmptyInputsOrOutputs.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$ExcessiveValue.class b/core/out/production/classes/org/pivxj/core/VerificationException$ExcessiveValue.class new file mode 100644 index 000000000..55332b891 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$ExcessiveValue.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$LargerThanMaxBlockSize.class b/core/out/production/classes/org/pivxj/core/VerificationException$LargerThanMaxBlockSize.class new file mode 100644 index 000000000..bdc760116 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$LargerThanMaxBlockSize.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$NegativeValueOutput.class b/core/out/production/classes/org/pivxj/core/VerificationException$NegativeValueOutput.class new file mode 100644 index 000000000..28193e136 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$NegativeValueOutput.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException$UnexpectedCoinbaseInput.class b/core/out/production/classes/org/pivxj/core/VerificationException$UnexpectedCoinbaseInput.class new file mode 100644 index 000000000..fa7201a76 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException$UnexpectedCoinbaseInput.class differ diff --git a/core/out/production/classes/org/pivxj/core/VerificationException.class b/core/out/production/classes/org/pivxj/core/VerificationException.class new file mode 100644 index 000000000..025ac3d05 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VerificationException.class differ diff --git a/core/out/production/classes/org/pivxj/core/VersionAck.class b/core/out/production/classes/org/pivxj/core/VersionAck.class new file mode 100644 index 000000000..dacd4a207 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VersionAck.class differ diff --git a/core/out/production/classes/org/pivxj/core/VersionMessage.class b/core/out/production/classes/org/pivxj/core/VersionMessage.class new file mode 100644 index 000000000..a8de43c89 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VersionMessage.class differ diff --git a/core/out/production/classes/org/pivxj/core/VersionedChecksummedBytes.class b/core/out/production/classes/org/pivxj/core/VersionedChecksummedBytes.class new file mode 100644 index 000000000..9fc72a80d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/VersionedChecksummedBytes.class differ diff --git a/core/out/production/classes/org/pivxj/core/WrongNetworkException.class b/core/out/production/classes/org/pivxj/core/WrongNetworkException.class new file mode 100644 index 000000000..20bda9299 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/WrongNetworkException.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/AbstractBlockChainListener.class b/core/out/production/classes/org/pivxj/core/listeners/AbstractBlockChainListener.class new file mode 100644 index 000000000..802087423 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/AbstractBlockChainListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerConnectionEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerConnectionEventListener.class new file mode 100644 index 000000000..b2f085806 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerConnectionEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerDataEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerDataEventListener.class new file mode 100644 index 000000000..1eed03a2d Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerDataEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerEventListener.class new file mode 100644 index 000000000..643f187bf Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/AbstractPeerEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/BlockChainListener.class b/core/out/production/classes/org/pivxj/core/listeners/BlockChainListener.class new file mode 100644 index 000000000..3821fb1b0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/BlockChainListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/BlocksDownloadedEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/BlocksDownloadedEventListener.class new file mode 100644 index 000000000..ad18c5551 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/BlocksDownloadedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/ChainDownloadStartedEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/ChainDownloadStartedEventListener.class new file mode 100644 index 000000000..624fb55a0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/ChainDownloadStartedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/DownloadProgressTracker.class b/core/out/production/classes/org/pivxj/core/listeners/DownloadProgressTracker.class new file mode 100644 index 000000000..156b9ade5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/DownloadProgressTracker.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/GetDataEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/GetDataEventListener.class new file mode 100644 index 000000000..e6f9270ea Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/GetDataEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/NewBestBlockListener.class b/core/out/production/classes/org/pivxj/core/listeners/NewBestBlockListener.class new file mode 100644 index 000000000..7bfcbe453 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/NewBestBlockListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/OnGetDataResponseEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/OnGetDataResponseEventListener.class new file mode 100644 index 000000000..9f5ad768c Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/OnGetDataResponseEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/OnTransactionBroadcastListener.class b/core/out/production/classes/org/pivxj/core/listeners/OnTransactionBroadcastListener.class new file mode 100644 index 000000000..1db19541a Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/OnTransactionBroadcastListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PeerConnectedEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PeerConnectedEventListener.class new file mode 100644 index 000000000..878282161 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PeerConnectedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PeerConnectionEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PeerConnectionEventListener.class new file mode 100644 index 000000000..502a7aa10 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PeerConnectionEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PeerDataEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PeerDataEventListener.class new file mode 100644 index 000000000..fb073824e Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PeerDataEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PeerDisconnectedEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PeerDisconnectedEventListener.class new file mode 100644 index 000000000..b0f6a26fa Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PeerDisconnectedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PeerDiscoveredEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PeerDiscoveredEventListener.class new file mode 100644 index 000000000..7450c8905 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PeerDiscoveredEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/PreMessageReceivedEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/PreMessageReceivedEventListener.class new file mode 100644 index 000000000..4b7a78d72 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/PreMessageReceivedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/ReorganizeListener.class b/core/out/production/classes/org/pivxj/core/listeners/ReorganizeListener.class new file mode 100644 index 000000000..c6bb6c810 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/ReorganizeListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/TransactionConfidenceEventListener.class b/core/out/production/classes/org/pivxj/core/listeners/TransactionConfidenceEventListener.class new file mode 100644 index 000000000..f42a3b9b3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/TransactionConfidenceEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/core/listeners/TransactionReceivedInBlockListener.class b/core/out/production/classes/org/pivxj/core/listeners/TransactionReceivedInBlockListener.class new file mode 100644 index 000000000..c168e9743 Binary files /dev/null and b/core/out/production/classes/org/pivxj/core/listeners/TransactionReceivedInBlockListener.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey$BadPassphraseException.class b/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey$BadPassphraseException.class new file mode 100644 index 000000000..8067c8b0e Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey$BadPassphraseException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey.class b/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey.class new file mode 100644 index 000000000..8d260d2d1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/BIP38PrivateKey.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/ChildNumber.class b/core/out/production/classes/org/pivxj/crypto/ChildNumber.class new file mode 100644 index 000000000..85cd772cf Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/ChildNumber.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/DRMWorkaround.class b/core/out/production/classes/org/pivxj/crypto/DRMWorkaround.class new file mode 100644 index 000000000..bd4f2fea1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/DRMWorkaround.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/DeterministicHierarchy.class b/core/out/production/classes/org/pivxj/crypto/DeterministicHierarchy.class new file mode 100644 index 000000000..e65aec4e3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/DeterministicHierarchy.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/DeterministicKey$1.class b/core/out/production/classes/org/pivxj/crypto/DeterministicKey$1.class new file mode 100644 index 000000000..0d2494f3b Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/DeterministicKey$1.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/DeterministicKey.class b/core/out/production/classes/org/pivxj/crypto/DeterministicKey.class new file mode 100644 index 000000000..cbd597b56 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/DeterministicKey.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/EncryptableItem.class b/core/out/production/classes/org/pivxj/crypto/EncryptableItem.class new file mode 100644 index 000000000..f8df3b96a Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/EncryptableItem.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/EncryptedData.class b/core/out/production/classes/org/pivxj/crypto/EncryptedData.class new file mode 100644 index 000000000..7e8e0ab08 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/EncryptedData.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDDerivationException.class b/core/out/production/classes/org/pivxj/crypto/HDDerivationException.class new file mode 100644 index 000000000..0a918e5d2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDDerivationException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$1.class b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$1.class new file mode 100644 index 000000000..3ed45b4e2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$1.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$PublicDeriveMode.class b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$PublicDeriveMode.class new file mode 100644 index 000000000..1479d0e6f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$PublicDeriveMode.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$RawKeyBytes.class b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$RawKeyBytes.class new file mode 100644 index 000000000..ecae21b45 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation$RawKeyBytes.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation.class b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation.class new file mode 100644 index 000000000..c47b8e441 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDKeyDerivation.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/HDUtils.class b/core/out/production/classes/org/pivxj/crypto/HDUtils.class new file mode 100644 index 000000000..0d878560f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/HDUtils.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/KeyCrypter.class b/core/out/production/classes/org/pivxj/crypto/KeyCrypter.class new file mode 100644 index 000000000..21d07fb7d Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/KeyCrypter.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/KeyCrypterException.class b/core/out/production/classes/org/pivxj/crypto/KeyCrypterException.class new file mode 100644 index 000000000..f2372c9ea Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/KeyCrypterException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/KeyCrypterScrypt.class b/core/out/production/classes/org/pivxj/crypto/KeyCrypterScrypt.class new file mode 100644 index 000000000..bb61518ff Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/KeyCrypterScrypt.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/LazyECPoint.class b/core/out/production/classes/org/pivxj/crypto/LazyECPoint.class new file mode 100644 index 000000000..5a7a059dd Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/LazyECPoint.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom$LinuxSecureRandomProvider.class b/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom$LinuxSecureRandomProvider.class new file mode 100644 index 000000000..fdfa4062f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom$LinuxSecureRandomProvider.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom.class b/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom.class new file mode 100644 index 000000000..80304e161 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/LinuxSecureRandom.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/MnemonicCode.class b/core/out/production/classes/org/pivxj/crypto/MnemonicCode.class new file mode 100644 index 000000000..59fdf4341 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/MnemonicCode.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicChecksumException.class b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicChecksumException.class new file mode 100644 index 000000000..05c93c63f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicChecksumException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicLengthException.class b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicLengthException.class new file mode 100644 index 000000000..944ad75b0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicLengthException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicWordException.class b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicWordException.class new file mode 100644 index 000000000..3533cf7ed Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/MnemonicException$MnemonicWordException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/MnemonicException.class b/core/out/production/classes/org/pivxj/crypto/MnemonicException.class new file mode 100644 index 000000000..4f82fa01f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/MnemonicException.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/PBKDF2SHA512.class b/core/out/production/classes/org/pivxj/crypto/PBKDF2SHA512.class new file mode 100644 index 000000000..d18ff658c Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/PBKDF2SHA512.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/TransactionSignature.class b/core/out/production/classes/org/pivxj/crypto/TransactionSignature.class new file mode 100644 index 000000000..01f10b54f Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/TransactionSignature.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$DefaultTrustStoreLoader.class b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$DefaultTrustStoreLoader.class new file mode 100644 index 000000000..a2ddc88e9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$DefaultTrustStoreLoader.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$FileTrustStoreLoader.class b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$FileTrustStoreLoader.class new file mode 100644 index 000000000..d518d20cc Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader$FileTrustStoreLoader.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader.class b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader.class new file mode 100644 index 000000000..d5b0cd99b Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/TrustStoreLoader.class differ diff --git a/core/out/production/classes/org/pivxj/crypto/X509Utils.class b/core/out/production/classes/org/pivxj/crypto/X509Utils.class new file mode 100644 index 000000000..0493159f0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/crypto/X509Utils.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeBlockChainListener.class b/core/out/production/classes/org/pivxj/jni/NativeBlockChainListener.class new file mode 100644 index 000000000..88a3692be Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeBlockChainListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeFutureCallback.class b/core/out/production/classes/org/pivxj/jni/NativeFutureCallback.class new file mode 100644 index 000000000..d8e96fc94 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeFutureCallback.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeKeyChainEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeKeyChainEventListener.class new file mode 100644 index 000000000..9bd822d8e Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeKeyChainEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativePaymentChannelHandlerFactory.class b/core/out/production/classes/org/pivxj/jni/NativePaymentChannelHandlerFactory.class new file mode 100644 index 000000000..4f786e735 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativePaymentChannelHandlerFactory.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativePaymentChannelServerConnectionEventHandler.class b/core/out/production/classes/org/pivxj/jni/NativePaymentChannelServerConnectionEventHandler.class new file mode 100644 index 000000000..033f5b8c1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativePaymentChannelServerConnectionEventHandler.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativePeerEventListener.class b/core/out/production/classes/org/pivxj/jni/NativePeerEventListener.class new file mode 100644 index 000000000..0f55db2f9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativePeerEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeScriptsChangeEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeScriptsChangeEventListener.class new file mode 100644 index 000000000..b6e840a25 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeScriptsChangeEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceEventListener.class new file mode 100644 index 000000000..5e5b7674d Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceListener.class b/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceListener.class new file mode 100644 index 000000000..15185b47f Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeTransactionConfidenceListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeWalletChangeEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeWalletChangeEventListener.class new file mode 100644 index 000000000..7a5a8891b Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeWalletChangeEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsReceivedEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsReceivedEventListener.class new file mode 100644 index 000000000..68da71c0a Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsReceivedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsSentEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsSentEventListener.class new file mode 100644 index 000000000..5ee149c61 Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeWalletCoinsSentEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeWalletEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeWalletEventListener.class new file mode 100644 index 000000000..08a993c7e Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeWalletEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/jni/NativeWalletReorganizeEventListener.class b/core/out/production/classes/org/pivxj/jni/NativeWalletReorganizeEventListener.class new file mode 100644 index 000000000..125ff955e Binary files /dev/null and b/core/out/production/classes/org/pivxj/jni/NativeWalletReorganizeEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/kits/LevelDBWalletAppKit.class b/core/out/production/classes/org/pivxj/kits/LevelDBWalletAppKit.class new file mode 100644 index 000000000..bfb08573f Binary files /dev/null and b/core/out/production/classes/org/pivxj/kits/LevelDBWalletAppKit.class differ diff --git a/core/out/production/classes/org/pivxj/kits/WalletAppKit$1.class b/core/out/production/classes/org/pivxj/kits/WalletAppKit$1.class new file mode 100644 index 000000000..451cf24b9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/kits/WalletAppKit$1.class differ diff --git a/core/out/production/classes/org/pivxj/kits/WalletAppKit$2.class b/core/out/production/classes/org/pivxj/kits/WalletAppKit$2.class new file mode 100644 index 000000000..afb9e8cce Binary files /dev/null and b/core/out/production/classes/org/pivxj/kits/WalletAppKit$2.class differ diff --git a/core/out/production/classes/org/pivxj/kits/WalletAppKit.class b/core/out/production/classes/org/pivxj/kits/WalletAppKit.class new file mode 100644 index 000000000..6b5e220aa Binary files /dev/null and b/core/out/production/classes/org/pivxj/kits/WalletAppKit.class differ diff --git a/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler$1.class b/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler$1.class new file mode 100644 index 000000000..068089433 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler.class b/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler.class new file mode 100644 index 000000000..84a99bd70 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/AbstractTimeoutHandler.class differ diff --git a/core/out/production/classes/org/pivxj/net/BlockingClient$1.class b/core/out/production/classes/org/pivxj/net/BlockingClient$1.class new file mode 100644 index 000000000..1b8af3555 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/BlockingClient$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/BlockingClient.class b/core/out/production/classes/org/pivxj/net/BlockingClient.class new file mode 100644 index 000000000..f8cf40775 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/BlockingClient.class differ diff --git a/core/out/production/classes/org/pivxj/net/BlockingClientManager.class b/core/out/production/classes/org/pivxj/net/BlockingClientManager.class new file mode 100644 index 000000000..180235d80 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/BlockingClientManager.class differ diff --git a/core/out/production/classes/org/pivxj/net/ClientConnectionManager.class b/core/out/production/classes/org/pivxj/net/ClientConnectionManager.class new file mode 100644 index 000000000..f27ea7737 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/ClientConnectionManager.class differ diff --git a/core/out/production/classes/org/pivxj/net/ConnectionHandler.class b/core/out/production/classes/org/pivxj/net/ConnectionHandler.class new file mode 100644 index 000000000..45755e7b2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/ConnectionHandler.class differ diff --git a/core/out/production/classes/org/pivxj/net/FilterMerger$Result.class b/core/out/production/classes/org/pivxj/net/FilterMerger$Result.class new file mode 100644 index 000000000..11a5c6944 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/FilterMerger$Result.class differ diff --git a/core/out/production/classes/org/pivxj/net/FilterMerger.class b/core/out/production/classes/org/pivxj/net/FilterMerger.class new file mode 100644 index 000000000..0ed4a603c Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/FilterMerger.class differ diff --git a/core/out/production/classes/org/pivxj/net/MessageWriteTarget.class b/core/out/production/classes/org/pivxj/net/MessageWriteTarget.class new file mode 100644 index 000000000..3bc239dd5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/MessageWriteTarget.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClient$1.class b/core/out/production/classes/org/pivxj/net/NioClient$1.class new file mode 100644 index 000000000..e0111ffd7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClient$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClient$Handler.class b/core/out/production/classes/org/pivxj/net/NioClient$Handler.class new file mode 100644 index 000000000..408b82ca4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClient$Handler.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClient.class b/core/out/production/classes/org/pivxj/net/NioClient.class new file mode 100644 index 000000000..e68baab23 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClient.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClientManager$1.class b/core/out/production/classes/org/pivxj/net/NioClientManager$1.class new file mode 100644 index 000000000..fa2040447 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClientManager$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClientManager$PendingConnect.class b/core/out/production/classes/org/pivxj/net/NioClientManager$PendingConnect.class new file mode 100644 index 000000000..b541461bd Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClientManager$PendingConnect.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioClientManager.class b/core/out/production/classes/org/pivxj/net/NioClientManager.class new file mode 100644 index 000000000..92f05d2c9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioClientManager.class differ diff --git a/core/out/production/classes/org/pivxj/net/NioServer.class b/core/out/production/classes/org/pivxj/net/NioServer.class new file mode 100644 index 000000000..1c3c50b7f Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/NioServer.class differ diff --git a/core/out/production/classes/org/pivxj/net/ProtobufConnection$Listener.class b/core/out/production/classes/org/pivxj/net/ProtobufConnection$Listener.class new file mode 100644 index 000000000..cceadda68 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/ProtobufConnection$Listener.class differ diff --git a/core/out/production/classes/org/pivxj/net/ProtobufConnection.class b/core/out/production/classes/org/pivxj/net/ProtobufConnection.class new file mode 100644 index 000000000..b7c79f6ca Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/ProtobufConnection.class differ diff --git a/core/out/production/classes/org/pivxj/net/StreamConnection.class b/core/out/production/classes/org/pivxj/net/StreamConnection.class new file mode 100644 index 000000000..dc9d5b6f5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/StreamConnection.class differ diff --git a/core/out/production/classes/org/pivxj/net/StreamConnectionFactory.class b/core/out/production/classes/org/pivxj/net/StreamConnectionFactory.class new file mode 100644 index 000000000..627540bd4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/StreamConnectionFactory.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery$DnsSeedDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery$DnsSeedDiscovery.class new file mode 100644 index 000000000..d2cae63f5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery$DnsSeedDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery.class new file mode 100644 index 000000000..343d34d39 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/DnsDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery$Details.class b/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery$Details.class new file mode 100644 index 000000000..fcffd9b8d Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery$Details.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery.class new file mode 100644 index 000000000..66d30d302 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/HttpDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery$1.class b/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery$1.class new file mode 100644 index 000000000..22242b607 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery.class new file mode 100644 index 000000000..c3a332906 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/MultiplexingDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/PeerDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/PeerDiscovery.class new file mode 100644 index 000000000..f77c67964 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/PeerDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/PeerDiscoveryException.class b/core/out/production/classes/org/pivxj/net/discovery/PeerDiscoveryException.class new file mode 100644 index 000000000..44b7e4a5c Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/PeerDiscoveryException.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/SeedPeers.class b/core/out/production/classes/org/pivxj/net/discovery/SeedPeers.class new file mode 100644 index 000000000..27b51efd5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/SeedPeers.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$1.class b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$1.class new file mode 100644 index 000000000..e709028e9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$1.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$2.class b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$2.class new file mode 100644 index 000000000..6a0e28ccc Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$2.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$3.class b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$3.class new file mode 100644 index 000000000..8ee46dded Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$3.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$Lookup.class b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$Lookup.class new file mode 100644 index 000000000..6067b8f8d Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery$Lookup.class differ diff --git a/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery.class b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery.class new file mode 100644 index 000000000..b7d12aab4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/net/discovery/TorDiscovery.class differ diff --git a/core/out/production/classes/org/pivxj/params/AbstractBitcoinNetParams.class b/core/out/production/classes/org/pivxj/params/AbstractBitcoinNetParams.class new file mode 100644 index 000000000..2bb62de05 Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/AbstractBitcoinNetParams.class differ diff --git a/core/out/production/classes/org/pivxj/params/MainNetParams.class b/core/out/production/classes/org/pivxj/params/MainNetParams.class new file mode 100644 index 000000000..3db27a7bc Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/MainNetParams.class differ diff --git a/core/out/production/classes/org/pivxj/params/Networks.class b/core/out/production/classes/org/pivxj/params/Networks.class new file mode 100644 index 000000000..dfbf0beb0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/Networks.class differ diff --git a/core/out/production/classes/org/pivxj/params/RegTestParams.class b/core/out/production/classes/org/pivxj/params/RegTestParams.class new file mode 100644 index 000000000..724032941 Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/RegTestParams.class differ diff --git a/core/out/production/classes/org/pivxj/params/TestNet2Params.class b/core/out/production/classes/org/pivxj/params/TestNet2Params.class new file mode 100644 index 000000000..064e12d87 Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/TestNet2Params.class differ diff --git a/core/out/production/classes/org/pivxj/params/TestNet3Params.class b/core/out/production/classes/org/pivxj/params/TestNet3Params.class new file mode 100644 index 000000000..8f67c56af Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/TestNet3Params.class differ diff --git a/core/out/production/classes/org/pivxj/params/UnitTestParams.class b/core/out/production/classes/org/pivxj/params/UnitTestParams.class new file mode 100644 index 000000000..f2f5efa42 Binary files /dev/null and b/core/out/production/classes/org/pivxj/params/UnitTestParams.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$1.class new file mode 100644 index 000000000..4fb013ba8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$1.class new file mode 100644 index 000000000..9788a19ba Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$Builder.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$Builder.class new file mode 100644 index 000000000..78f3f4042 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel.class new file mode 100644 index 000000000..746151fe3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannel.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelOrBuilder.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelOrBuilder.class new file mode 100644 index 000000000..b071b04b7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$1.class new file mode 100644 index 000000000..5065f3a16 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$Builder.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$Builder.class new file mode 100644 index 000000000..c4acdde3f Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels.class new file mode 100644 index 000000000..bc336cb84 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannels.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelsOrBuilder.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelsOrBuilder.class new file mode 100644 index 000000000..28839b63f Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState$StoredClientPaymentChannelsOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ClientState.class b/core/out/production/classes/org/pivxj/protocols/channels/ClientState.class new file mode 100644 index 000000000..f190c8f11 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ClientState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$ClientConnection.class b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$ClientConnection.class new file mode 100644 index 000000000..869579ad3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$ClientConnection.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$Factory.class b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$Factory.class new file mode 100644 index 000000000..0000548cf Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient$Factory.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient.class b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient.class new file mode 100644 index 000000000..c3ebd424f Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/IPaymentChannelClient.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$1.class new file mode 100644 index 000000000..6f8784db7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$2.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$2.class new file mode 100644 index 000000000..81922831b Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$InitStep.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$InitStep.class new file mode 100644 index 000000000..e03c87e0b Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$InitStep.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$VersionSelector.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$VersionSelector.class new file mode 100644 index 000000000..c18e075c3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient$VersionSelector.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient.class new file mode 100644 index 000000000..55f51098d Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClient.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$1.class new file mode 100644 index 000000000..74abcaa4c Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$2.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$2.class new file mode 100644 index 000000000..c0941f160 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection.class new file mode 100644 index 000000000..f13357a6e Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientConnection.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$1.class new file mode 100644 index 000000000..30a118b65 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$2.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$2.class new file mode 100644 index 000000000..e0a94d7a1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$IncrementedPayment.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$IncrementedPayment.class new file mode 100644 index 000000000..d09e6c1d9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$IncrementedPayment.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$State.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$State.class new file mode 100644 index 000000000..ae7e62e91 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState$State.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState.class new file mode 100644 index 000000000..d5380b0c3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelClientState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException$CloseReason.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException$CloseReason.class new file mode 100644 index 000000000..e4f9012ba Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException$CloseReason.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException.class new file mode 100644 index 000000000..8f342f489 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelCloseException.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$1.class new file mode 100644 index 000000000..d11974c53 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$2.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$2.class new file mode 100644 index 000000000..195ecfcab Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$3.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$3.class new file mode 100644 index 000000000..c74eac08f Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$3.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$4.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$4.class new file mode 100644 index 000000000..4440475ca Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$4.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$InitStep.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$InitStep.class new file mode 100644 index 000000000..f1feb7223 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$InitStep.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$ServerConnection.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$ServerConnection.class new file mode 100644 index 000000000..0e62bd7b5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer$ServerConnection.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer.class new file mode 100644 index 000000000..bea34bfde Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServer.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$1.class new file mode 100644 index 000000000..488c8ba01 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$HandlerFactory.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$HandlerFactory.class new file mode 100644 index 000000000..e55563d47 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$HandlerFactory.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$1.class new file mode 100644 index 000000000..73ee7171e Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$2.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$2.class new file mode 100644 index 000000000..cecdee60b Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler.class new file mode 100644 index 000000000..51db12027 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener$ServerHandler.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener.class new file mode 100644 index 000000000..6e4b0eca2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerListener.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$1.class new file mode 100644 index 000000000..d50879a55 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$State.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$State.class new file mode 100644 index 000000000..df8542377 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState$State.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState.class new file mode 100644 index 000000000..65caaec1e Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelServerState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ClientState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ClientState.class new file mode 100644 index 000000000..0dc026ea3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ClientState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState$1.class new file mode 100644 index 000000000..f2ac1eaff Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState.class new file mode 100644 index 000000000..b691673d5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV1ServerState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ClientState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ClientState.class new file mode 100644 index 000000000..0e372646d Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ClientState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState$1.class new file mode 100644 index 000000000..a917fa82a Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState.class new file mode 100644 index 000000000..56f617da5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentChannelV2ServerState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/PaymentIncrementAck.class b/core/out/production/classes/org/pivxj/protocols/channels/PaymentIncrementAck.class new file mode 100644 index 000000000..d3cffeca2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/PaymentIncrementAck.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerConnectionEventHandler.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerConnectionEventHandler.class new file mode 100644 index 000000000..f812e268b Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerConnectionEventHandler.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$1.class new file mode 100644 index 000000000..4225bb8ea Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$1.class new file mode 100644 index 000000000..99acad9dd Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$Builder.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$Builder.class new file mode 100644 index 000000000..27e29ed6a Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel.class new file mode 100644 index 000000000..a11f44f54 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannel.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelOrBuilder.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelOrBuilder.class new file mode 100644 index 000000000..a53100520 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$1.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$1.class new file mode 100644 index 000000000..08e4f1937 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$Builder.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$Builder.class new file mode 100644 index 000000000..84f4e1be1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels.class new file mode 100644 index 000000000..2c1b78d8c Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannels.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelsOrBuilder.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelsOrBuilder.class new file mode 100644 index 000000000..486535e0b Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState$StoredServerPaymentChannelsOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ServerState.class b/core/out/production/classes/org/pivxj/protocols/channels/ServerState.class new file mode 100644 index 000000000..f7a7c2a53 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ServerState.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StateMachine.class b/core/out/production/classes/org/pivxj/protocols/channels/StateMachine.class new file mode 100644 index 000000000..2fcaa76f1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StateMachine.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredClientChannel.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredClientChannel.class new file mode 100644 index 000000000..b9ba29395 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredClientChannel.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates$1.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates$1.class new file mode 100644 index 000000000..f0d6c69b8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates.class new file mode 100644 index 000000000..4f238a62c Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelClientStates.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates$1.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates$1.class new file mode 100644 index 000000000..3cca4a315 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates.class new file mode 100644 index 000000000..0a3348759 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredPaymentChannelServerStates.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/StoredServerChannel.class b/core/out/production/classes/org/pivxj/protocols/channels/StoredServerChannel.class new file mode 100644 index 000000000..f9234936e Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/StoredServerChannel.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/channels/ValueOutOfRangeException.class b/core/out/production/classes/org/pivxj/protocols/channels/ValueOutOfRangeException.class new file mode 100644 index 000000000..27165cafe Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/channels/ValueOutOfRangeException.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$1.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$1.class new file mode 100644 index 000000000..df3c24a23 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Ack.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Ack.class new file mode 100644 index 000000000..1a5b164b6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Ack.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Output.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Output.class new file mode 100644 index 000000000..8eabad183 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$Output.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$PkiVerificationData.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$PkiVerificationData.class new file mode 100644 index 000000000..fc7cb5628 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol$PkiVerificationData.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol.class new file mode 100644 index 000000000..677d256f8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocol.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$Expired.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$Expired.class new file mode 100644 index 000000000..bad93d377 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$Expired.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidNetwork.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidNetwork.class new file mode 100644 index 000000000..8bc7a21ea Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidNetwork.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidOutputs.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidOutputs.class new file mode 100644 index 000000000..248ee8d4e Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidOutputs.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL.class new file mode 100644 index 000000000..9b0ff28da Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentURL.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentURL.class new file mode 100644 index 000000000..1d7053553 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPaymentURL.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiData.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiData.class new file mode 100644 index 000000000..82274a2c4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiData.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiType.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiType.class new file mode 100644 index 000000000..e943beb99 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidPkiType.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidVersion.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidVersion.class new file mode 100644 index 000000000..b8e3f3d34 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$InvalidVersion.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$PkiVerificationException.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$PkiVerificationException.class new file mode 100644 index 000000000..0c364a80f Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException$PkiVerificationException.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException.class new file mode 100644 index 000000000..7138b64b8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentProtocolException.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$1.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$1.class new file mode 100644 index 000000000..b55cac152 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$1.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$2.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$2.class new file mode 100644 index 000000000..abd348ff2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession$2.class differ diff --git a/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession.class b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession.class new file mode 100644 index 000000000..5ca76b767 Binary files /dev/null and b/core/out/production/classes/org/pivxj/protocols/payments/PaymentSession.class differ diff --git a/core/out/production/classes/org/pivxj/script/Script$ScriptType.class b/core/out/production/classes/org/pivxj/script/Script$ScriptType.class new file mode 100644 index 000000000..e77362c3d Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/Script$ScriptType.class differ diff --git a/core/out/production/classes/org/pivxj/script/Script$VerifyFlag.class b/core/out/production/classes/org/pivxj/script/Script$VerifyFlag.class new file mode 100644 index 000000000..c8926ee7d Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/Script$VerifyFlag.class differ diff --git a/core/out/production/classes/org/pivxj/script/Script.class b/core/out/production/classes/org/pivxj/script/Script.class new file mode 100644 index 000000000..49562e326 Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/Script.class differ diff --git a/core/out/production/classes/org/pivxj/script/ScriptBuilder.class b/core/out/production/classes/org/pivxj/script/ScriptBuilder.class new file mode 100644 index 000000000..4ccc44cc3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/ScriptBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/script/ScriptChunk.class b/core/out/production/classes/org/pivxj/script/ScriptChunk.class new file mode 100644 index 000000000..b40d490c9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/ScriptChunk.class differ diff --git a/core/out/production/classes/org/pivxj/script/ScriptOpCodes.class b/core/out/production/classes/org/pivxj/script/ScriptOpCodes.class new file mode 100644 index 000000000..2483b9a99 Binary files /dev/null and b/core/out/production/classes/org/pivxj/script/ScriptOpCodes.class differ diff --git a/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner$SignatureAndKey.class b/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner$SignatureAndKey.class new file mode 100644 index 000000000..62de66df8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner$SignatureAndKey.class differ diff --git a/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner.class b/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner.class new file mode 100644 index 000000000..c15a1461c Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/CustomTransactionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/signers/LocalTransactionSigner.class b/core/out/production/classes/org/pivxj/signers/LocalTransactionSigner.class new file mode 100644 index 000000000..52211ca7d Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/LocalTransactionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/signers/MissingSigResolutionSigner.class b/core/out/production/classes/org/pivxj/signers/MissingSigResolutionSigner.class new file mode 100644 index 000000000..b80cc284e Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/MissingSigResolutionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/signers/StatelessTransactionSigner.class b/core/out/production/classes/org/pivxj/signers/StatelessTransactionSigner.class new file mode 100644 index 000000000..ea2944efb Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/StatelessTransactionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/signers/TransactionSigner$MissingSignatureException.class b/core/out/production/classes/org/pivxj/signers/TransactionSigner$MissingSignatureException.class new file mode 100644 index 000000000..66997efaa Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/TransactionSigner$MissingSignatureException.class differ diff --git a/core/out/production/classes/org/pivxj/signers/TransactionSigner$ProposedTransaction.class b/core/out/production/classes/org/pivxj/signers/TransactionSigner$ProposedTransaction.class new file mode 100644 index 000000000..13b30fbb5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/TransactionSigner$ProposedTransaction.class differ diff --git a/core/out/production/classes/org/pivxj/signers/TransactionSigner.class b/core/out/production/classes/org/pivxj/signers/TransactionSigner.class new file mode 100644 index 000000000..52555243a Binary files /dev/null and b/core/out/production/classes/org/pivxj/signers/TransactionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/store/BlockStore.class b/core/out/production/classes/org/pivxj/store/BlockStore.class new file mode 100644 index 000000000..e04adbc20 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/BlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/BlockStoreException.class b/core/out/production/classes/org/pivxj/store/BlockStoreException.class new file mode 100644 index 000000000..5fb3dc31a Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/BlockStoreException.class differ diff --git a/core/out/production/classes/org/pivxj/store/ChainFileLockedException.class b/core/out/production/classes/org/pivxj/store/ChainFileLockedException.class new file mode 100644 index 000000000..ec093ef6e Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/ChainFileLockedException.class differ diff --git a/core/out/production/classes/org/pivxj/store/DatabaseFullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/DatabaseFullPrunedBlockStore.class new file mode 100644 index 000000000..89f9f91da Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/DatabaseFullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/FlatDB$ReadResult.class b/core/out/production/classes/org/pivxj/store/FlatDB$ReadResult.class new file mode 100644 index 000000000..73bf8dba7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/FlatDB$ReadResult.class differ diff --git a/core/out/production/classes/org/pivxj/store/FlatDB.class b/core/out/production/classes/org/pivxj/store/FlatDB.class new file mode 100644 index 000000000..9751cdc14 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/FlatDB.class differ diff --git a/core/out/production/classes/org/pivxj/store/FullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/FullPrunedBlockStore.class new file mode 100644 index 000000000..e2b20f6d3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/FullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/H2FullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/H2FullPrunedBlockStore.class new file mode 100644 index 000000000..b925da4dc Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/H2FullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/HashStore$1.class b/core/out/production/classes/org/pivxj/store/HashStore$1.class new file mode 100644 index 000000000..ec63ca2f5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/HashStore$1.class differ diff --git a/core/out/production/classes/org/pivxj/store/HashStore.class b/core/out/production/classes/org/pivxj/store/HashStore.class new file mode 100644 index 000000000..ee506c06e Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/HashStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/LevelDBBlockStore.class b/core/out/production/classes/org/pivxj/store/LevelDBBlockStore.class new file mode 100644 index 000000000..519837961 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/LevelDBBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$BloomFilter.class b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$BloomFilter.class new file mode 100644 index 000000000..b95ecd440 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$BloomFilter.class differ diff --git a/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$KeyType.class b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$KeyType.class new file mode 100644 index 000000000..6fd0c9046 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$KeyType.class differ diff --git a/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$LRUCache.class b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$LRUCache.class new file mode 100644 index 000000000..e7478774f Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore$LRUCache.class differ diff --git a/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore.class new file mode 100644 index 000000000..461162692 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/LevelDBFullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/MasternodeDB$ReadResult.class b/core/out/production/classes/org/pivxj/store/MasternodeDB$ReadResult.class new file mode 100644 index 000000000..67830c629 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MasternodeDB$ReadResult.class differ diff --git a/core/out/production/classes/org/pivxj/store/MasternodeDB.class b/core/out/production/classes/org/pivxj/store/MasternodeDB.class new file mode 100644 index 000000000..eb678252d Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MasternodeDB.class differ diff --git a/core/out/production/classes/org/pivxj/store/MemoryBlockStore$1.class b/core/out/production/classes/org/pivxj/store/MemoryBlockStore$1.class new file mode 100644 index 000000000..2bd30a678 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MemoryBlockStore$1.class differ diff --git a/core/out/production/classes/org/pivxj/store/MemoryBlockStore.class b/core/out/production/classes/org/pivxj/store/MemoryBlockStore.class new file mode 100644 index 000000000..f80271ed9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MemoryBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag.class b/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag.class new file mode 100644 index 000000000..6b47476d2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore$StoredBlockAndWasUndoableFlag.class differ diff --git a/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore.class new file mode 100644 index 000000000..083493f20 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MemoryFullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/MySQLFullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/MySQLFullPrunedBlockStore.class new file mode 100644 index 000000000..4b0764146 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/MySQLFullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/PostgresFullPrunedBlockStore.class b/core/out/production/classes/org/pivxj/store/PostgresFullPrunedBlockStore.class new file mode 100644 index 000000000..a83e0425f Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/PostgresFullPrunedBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/SPVBlockStore$1.class b/core/out/production/classes/org/pivxj/store/SPVBlockStore$1.class new file mode 100644 index 000000000..19de8459f Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/SPVBlockStore$1.class differ diff --git a/core/out/production/classes/org/pivxj/store/SPVBlockStore$2.class b/core/out/production/classes/org/pivxj/store/SPVBlockStore$2.class new file mode 100644 index 000000000..b54a5a527 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/SPVBlockStore$2.class differ diff --git a/core/out/production/classes/org/pivxj/store/SPVBlockStore.class b/core/out/production/classes/org/pivxj/store/SPVBlockStore.class new file mode 100644 index 000000000..95e499aff Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/SPVBlockStore.class differ diff --git a/core/out/production/classes/org/pivxj/store/StoredTransactionOutPoint.class b/core/out/production/classes/org/pivxj/store/StoredTransactionOutPoint.class new file mode 100644 index 000000000..f4a563c69 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/StoredTransactionOutPoint.class differ diff --git a/core/out/production/classes/org/pivxj/store/TransactionalHashMap.class b/core/out/production/classes/org/pivxj/store/TransactionalHashMap.class new file mode 100644 index 000000000..5dbe99f10 Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/TransactionalHashMap.class differ diff --git a/core/out/production/classes/org/pivxj/store/TransactionalMultiKeyHashMap.class b/core/out/production/classes/org/pivxj/store/TransactionalMultiKeyHashMap.class new file mode 100644 index 000000000..7b051213b Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/TransactionalMultiKeyHashMap.class differ diff --git a/core/out/production/classes/org/pivxj/store/WindowsMMapHack.class b/core/out/production/classes/org/pivxj/store/WindowsMMapHack.class new file mode 100644 index 000000000..5deb9f84e Binary files /dev/null and b/core/out/production/classes/org/pivxj/store/WindowsMMapHack.class differ diff --git a/core/out/production/classes/org/pivxj/uri/BitcoinURIParseException.class b/core/out/production/classes/org/pivxj/uri/BitcoinURIParseException.class new file mode 100644 index 000000000..caa34285d Binary files /dev/null and b/core/out/production/classes/org/pivxj/uri/BitcoinURIParseException.class differ diff --git a/core/out/production/classes/org/pivxj/uri/OptionalFieldValidationException.class b/core/out/production/classes/org/pivxj/uri/OptionalFieldValidationException.class new file mode 100644 index 000000000..7935db9dc Binary files /dev/null and b/core/out/production/classes/org/pivxj/uri/OptionalFieldValidationException.class differ diff --git a/core/out/production/classes/org/pivxj/uri/PivxURI.class b/core/out/production/classes/org/pivxj/uri/PivxURI.class new file mode 100644 index 000000000..03274c80b Binary files /dev/null and b/core/out/production/classes/org/pivxj/uri/PivxURI.class differ diff --git a/core/out/production/classes/org/pivxj/uri/RequiredFieldValidationException.class b/core/out/production/classes/org/pivxj/uri/RequiredFieldValidationException.class new file mode 100644 index 000000000..ca72ce4ad Binary files /dev/null and b/core/out/production/classes/org/pivxj/uri/RequiredFieldValidationException.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BaseTaggableObject.class b/core/out/production/classes/org/pivxj/utils/BaseTaggableObject.class new file mode 100644 index 000000000..fa74de579 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BaseTaggableObject.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BlockFileLoader.class b/core/out/production/classes/org/pivxj/utils/BlockFileLoader.class new file mode 100644 index 000000000..9af8257f8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BlockFileLoader.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BriefLogFormatter.class b/core/out/production/classes/org/pivxj/utils/BriefLogFormatter.class new file mode 100644 index 000000000..629e8d3bb Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BriefLogFormatter.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$1.class b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$1.class new file mode 100644 index 000000000..43a452359 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$1.class b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$1.class new file mode 100644 index 000000000..633e7ba7e Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$2.class b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$2.class new file mode 100644 index 000000000..5e675c0f8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style$2.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style.class b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style.class new file mode 100644 index 000000000..2eaf819e3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat$Style.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcAutoFormat.class b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat.class new file mode 100644 index 000000000..09e865d78 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcAutoFormat.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFixedFormat.class b/core/out/production/classes/org/pivxj/utils/BtcFixedFormat.class new file mode 100644 index 000000000..877db616e Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFixedFormat.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat$1.class b/core/out/production/classes/org/pivxj/utils/BtcFormat$1.class new file mode 100644 index 000000000..2bfdc3408 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant$1.class b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant$1.class new file mode 100644 index 000000000..4f08fabb4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant.class b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant.class new file mode 100644 index 000000000..b0c90f879 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder$Variant.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder.class b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder.class new file mode 100644 index 000000000..369ba087a Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat$ScaleMatcher.class b/core/out/production/classes/org/pivxj/utils/BtcFormat$ScaleMatcher.class new file mode 100644 index 000000000..649553f8c Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat$ScaleMatcher.class differ diff --git a/core/out/production/classes/org/pivxj/utils/BtcFormat.class b/core/out/production/classes/org/pivxj/utils/BtcFormat.class new file mode 100644 index 000000000..3acf01dac Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/BtcFormat.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory$1.class b/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory$1.class new file mode 100644 index 000000000..bdbe8a38f Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory.class b/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory.class new file mode 100644 index 000000000..75a8cfcee Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ContextPropagatingThreadFactory.class differ diff --git a/core/out/production/classes/org/pivxj/utils/DaemonThreadFactory.class b/core/out/production/classes/org/pivxj/utils/DaemonThreadFactory.class new file mode 100644 index 000000000..b9e156fcc Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/DaemonThreadFactory.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ExchangeRate.class b/core/out/production/classes/org/pivxj/utils/ExchangeRate.class new file mode 100644 index 000000000..c39378f38 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ExchangeRate.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ExponentialBackoff$Params.class b/core/out/production/classes/org/pivxj/utils/ExponentialBackoff$Params.class new file mode 100644 index 000000000..64da22dc7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ExponentialBackoff$Params.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ExponentialBackoff.class b/core/out/production/classes/org/pivxj/utils/ExponentialBackoff.class new file mode 100644 index 000000000..76a9788cf Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ExponentialBackoff.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Fiat.class b/core/out/production/classes/org/pivxj/utils/Fiat.class new file mode 100644 index 000000000..c6796e9fd Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Fiat.class differ diff --git a/core/out/production/classes/org/pivxj/utils/ListenerRegistration.class b/core/out/production/classes/org/pivxj/utils/ListenerRegistration.class new file mode 100644 index 000000000..7e6ecd563 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/ListenerRegistration.class differ diff --git a/core/out/production/classes/org/pivxj/utils/MonetaryFormat.class b/core/out/production/classes/org/pivxj/utils/MonetaryFormat.class new file mode 100644 index 000000000..6760f041f Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/MonetaryFormat.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Pair.class b/core/out/production/classes/org/pivxj/utils/Pair.class new file mode 100644 index 000000000..27b60a483 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Pair.class differ diff --git a/core/out/production/classes/org/pivxj/utils/TaggableObject.class b/core/out/production/classes/org/pivxj/utils/TaggableObject.class new file mode 100644 index 000000000..f1cbc6465 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/TaggableObject.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Threading$1.class b/core/out/production/classes/org/pivxj/utils/Threading$1.class new file mode 100644 index 000000000..626e8e7c9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Threading$1.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Threading$2.class b/core/out/production/classes/org/pivxj/utils/Threading$2.class new file mode 100644 index 000000000..c4a7a879e Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Threading$2.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Threading$3.class b/core/out/production/classes/org/pivxj/utils/Threading$3.class new file mode 100644 index 000000000..70a9e0dbc Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Threading$3.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Threading$UserThread.class b/core/out/production/classes/org/pivxj/utils/Threading$UserThread.class new file mode 100644 index 000000000..607542081 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Threading$UserThread.class differ diff --git a/core/out/production/classes/org/pivxj/utils/Threading.class b/core/out/production/classes/org/pivxj/utils/Threading.class new file mode 100644 index 000000000..337145cc1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/Threading.class differ diff --git a/core/out/production/classes/org/pivxj/utils/VersionTally.class b/core/out/production/classes/org/pivxj/utils/VersionTally.class new file mode 100644 index 000000000..f6d4464f0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/utils/VersionTally.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/AllRandomKeysRotating.class b/core/out/production/classes/org/pivxj/wallet/AllRandomKeysRotating.class new file mode 100644 index 000000000..27180f1b5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/AllRandomKeysRotating.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/AllowUnconfirmedCoinSelector.class b/core/out/production/classes/org/pivxj/wallet/AllowUnconfirmedCoinSelector.class new file mode 100644 index 000000000..ed7277bc7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/AllowUnconfirmedCoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$1.class b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$1.class new file mode 100644 index 000000000..b75be0e41 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$State.class b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$State.class new file mode 100644 index 000000000..5f87602b1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain$State.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/BasicKeyChain.class b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain.class new file mode 100644 index 000000000..362157faa Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/BasicKeyChain.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/CoinSelection.class b/core/out/production/classes/org/pivxj/wallet/CoinSelection.class new file mode 100644 index 000000000..fcb8af9aa Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/CoinSelection.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/CoinSelector.class b/core/out/production/classes/org/pivxj/wallet/CoinSelector.class new file mode 100644 index 000000000..601faf106 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/CoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DecryptingKeyBag.class b/core/out/production/classes/org/pivxj/wallet/DecryptingKeyBag.class new file mode 100644 index 000000000..bc73c6461 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DecryptingKeyBag.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector$1.class b/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector$1.class new file mode 100644 index 000000000..22735c810 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector.class b/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector.class new file mode 100644 index 000000000..0cebb7d52 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultCoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultKeyChainFactory.class b/core/out/production/classes/org/pivxj/wallet/DefaultKeyChainFactory.class new file mode 100644 index 000000000..35ba7a8ce Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultKeyChainFactory.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$1.class b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$1.class new file mode 100644 index 000000000..48cff29ef Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$Analyzer.class b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$Analyzer.class new file mode 100644 index 000000000..64d2fa4c2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$Analyzer.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$RuleViolation.class b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$RuleViolation.class new file mode 100644 index 000000000..162f0e77a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis$RuleViolation.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis.class b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis.class new file mode 100644 index 000000000..fcd55839c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DefaultRiskAnalysis.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$1.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$1.class new file mode 100644 index 000000000..6cec2eca9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$Builder.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$Builder.class new file mode 100644 index 000000000..0ca063a55 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$KeyChainType.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$KeyChainType.class new file mode 100644 index 000000000..133c5924e Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain$KeyChainType.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain.class b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain.class new file mode 100644 index 000000000..9ef47551f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicKeyChain.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicSeed.class b/core/out/production/classes/org/pivxj/wallet/DeterministicSeed.class new file mode 100644 index 000000000..b965fe61e Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicSeed.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiredException.class b/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiredException.class new file mode 100644 index 000000000..6deb3c7d9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiredException.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiresPassword.class b/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiresPassword.class new file mode 100644 index 000000000..bcd0c1d36 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/DeterministicUpgradeRequiresPassword.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/EncryptableKeyChain.class b/core/out/production/classes/org/pivxj/wallet/EncryptableKeyChain.class new file mode 100644 index 000000000..1341ce299 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/EncryptableKeyChain.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/FilteringCoinSelector.class b/core/out/production/classes/org/pivxj/wallet/FilteringCoinSelector.class new file mode 100644 index 000000000..1817c70de Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/FilteringCoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/InstantXCoinSelector.class b/core/out/production/classes/org/pivxj/wallet/InstantXCoinSelector.class new file mode 100644 index 000000000..8f890e41c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/InstantXCoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyBag.class b/core/out/production/classes/org/pivxj/wallet/KeyBag.class new file mode 100644 index 000000000..54eec593a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyBag.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyChain$KeyPurpose.class b/core/out/production/classes/org/pivxj/wallet/KeyChain$KeyPurpose.class new file mode 100644 index 000000000..b19dafb76 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyChain$KeyPurpose.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyChain.class b/core/out/production/classes/org/pivxj/wallet/KeyChain.class new file mode 100644 index 000000000..b90f8c8f7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyChain.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyChainFactory.class b/core/out/production/classes/org/pivxj/wallet/KeyChainFactory.class new file mode 100644 index 000000000..b5000744f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyChainFactory.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyChainGroup.class b/core/out/production/classes/org/pivxj/wallet/KeyChainGroup.class new file mode 100644 index 000000000..568ba2f5a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyChainGroup.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/KeyTimeCoinSelector.class b/core/out/production/classes/org/pivxj/wallet/KeyTimeCoinSelector.class new file mode 100644 index 000000000..90e0e895b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/KeyTimeCoinSelector.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$1.class b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$1.class new file mode 100644 index 000000000..01a921983 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$Builder.class b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$Builder.class new file mode 100644 index 000000000..95bdf8374 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain.class b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain.class new file mode 100644 index 000000000..2d8f56bf1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/MarriedKeyChain.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$1.class new file mode 100644 index 000000000..883b49443 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$1.class new file mode 100644 index 000000000..9480a71b6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$Builder.class new file mode 100644 index 000000000..669aeba70 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey.class b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey.class new file mode 100644 index 000000000..a36a45470 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKey.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKeyOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKeyOrBuilder.class new file mode 100644 index 000000000..4cd0787b6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$DeterministicKeyOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$1.class new file mode 100644 index 000000000..afbc89e58 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$Builder.class new file mode 100644 index 000000000..fab2eea8c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData.class b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData.class new file mode 100644 index 000000000..247ab9844 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedData.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedDataOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedDataOrBuilder.class new file mode 100644 index 000000000..91060d42c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$EncryptedDataOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$1.class new file mode 100644 index 000000000..c451ee95b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$Builder.class new file mode 100644 index 000000000..dcb78330d Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate.class b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate.class new file mode 100644 index 000000000..66ea5e625 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRate.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRateOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRateOrBuilder.class new file mode 100644 index 000000000..15b9a8dec Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ExchangeRateOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Extension$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Extension$1.class new file mode 100644 index 000000000..a41873e19 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Extension$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Extension$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Extension$Builder.class new file mode 100644 index 000000000..455d4d5d7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Extension$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Extension.class b/core/out/production/classes/org/pivxj/wallet/Protos$Extension.class new file mode 100644 index 000000000..fcb2886da Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Extension.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ExtensionOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ExtensionOrBuilder.class new file mode 100644 index 000000000..9dc2ac090 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ExtensionOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Key$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Key$1.class new file mode 100644 index 000000000..a1b0e88ce Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Key$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Key$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Builder.class new file mode 100644 index 000000000..ede782273 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type$1.class new file mode 100644 index 000000000..c6d9a0d25 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type.class b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type.class new file mode 100644 index 000000000..788aa7e8b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Key$Type.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Key.class b/core/out/production/classes/org/pivxj/wallet/Protos$Key.class new file mode 100644 index 000000000..ea2442706 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Key.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$KeyOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$KeyOrBuilder.class new file mode 100644 index 000000000..90b7879f6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$KeyOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$1.class new file mode 100644 index 000000000..5c8f67fa0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$Builder.class new file mode 100644 index 000000000..55a2836e0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress.class b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress.class new file mode 100644 index 000000000..542aa3988 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddress.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddressOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddressOrBuilder.class new file mode 100644 index 000000000..a72471f26 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$PeerAddressOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Script$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Script$1.class new file mode 100644 index 000000000..8c4ffc3a2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Script$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Script$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Script$Builder.class new file mode 100644 index 000000000..9c9f144f1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Script$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Script.class b/core/out/production/classes/org/pivxj/wallet/Protos$Script.class new file mode 100644 index 000000000..d9310e698 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Script.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ScriptOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ScriptOrBuilder.class new file mode 100644 index 000000000..674da69c3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ScriptOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$1.class new file mode 100644 index 000000000..5126e32b0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$Builder.class new file mode 100644 index 000000000..d12db9e7d Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters.class b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters.class new file mode 100644 index 000000000..58ffd746d Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParameters.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParametersOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParametersOrBuilder.class new file mode 100644 index 000000000..3fe6f7070 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$ScryptParametersOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Tag$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Tag$1.class new file mode 100644 index 000000000..3484fe010 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Tag$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Tag$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Tag$Builder.class new file mode 100644 index 000000000..f8aad60cd Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Tag$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Tag.class b/core/out/production/classes/org/pivxj/wallet/Protos$Tag.class new file mode 100644 index 000000000..524cbf1b1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Tag.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TagOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TagOrBuilder.class new file mode 100644 index 000000000..4d11d116a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TagOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$1.class new file mode 100644 index 000000000..986514451 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Builder.class new file mode 100644 index 000000000..6240bab7a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool$1.class new file mode 100644 index 000000000..473844464 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool.class new file mode 100644 index 000000000..59ce15065 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Pool.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose$1.class new file mode 100644 index 000000000..444cc9be4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose.class new file mode 100644 index 000000000..7dfd15ce6 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction$Purpose.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Transaction.class b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction.class new file mode 100644 index 000000000..b6d3b9cf1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Transaction.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$1.class new file mode 100644 index 000000000..ff0a2c7ec Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Builder.class new file mode 100644 index 000000000..ebef3e965 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType$1.class new file mode 100644 index 000000000..7ff87ac5b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType.class new file mode 100644 index 000000000..4a815332b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$IXType.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source$1.class new file mode 100644 index 000000000..6f456da70 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source.class new file mode 100644 index 000000000..f9e3609f3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Source.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type$1.class new file mode 100644 index 000000000..c9c1207f0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type.class new file mode 100644 index 000000000..5db11524b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence$Type.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence.class new file mode 100644 index 000000000..01596bb06 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidence.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidenceOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidenceOrBuilder.class new file mode 100644 index 000000000..754f5a94b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionConfidenceOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$1.class new file mode 100644 index 000000000..8133fe5ee Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$Builder.class new file mode 100644 index 000000000..148d7b03c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput.class new file mode 100644 index 000000000..89d0db750 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInput.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInputOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInputOrBuilder.class new file mode 100644 index 000000000..602edbb12 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionInputOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOrBuilder.class new file mode 100644 index 000000000..30e02fc69 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$1.class new file mode 100644 index 000000000..eef6bd555 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$Builder.class new file mode 100644 index 000000000..a11111d58 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput.class new file mode 100644 index 000000000..c80e30c89 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutput.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutputOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutputOrBuilder.class new file mode 100644 index 000000000..46200f6a4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionOutputOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$1.class new file mode 100644 index 000000000..aaaf7d0f5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$Builder.class new file mode 100644 index 000000000..57f0084f9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner.class new file mode 100644 index 000000000..a15f424c2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSigner.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSignerOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSignerOrBuilder.class new file mode 100644 index 000000000..3a5f5e25a Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$TransactionSignerOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$1.class new file mode 100644 index 000000000..0ef8bb296 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$Builder.class b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$Builder.class new file mode 100644 index 000000000..d6812e23c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$Builder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType$1.class b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType$1.class new file mode 100644 index 000000000..432b8e988 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType.class b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType.class new file mode 100644 index 000000000..7411c1135 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet$EncryptionType.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$Wallet.class b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet.class new file mode 100644 index 000000000..5d3c6124c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$Wallet.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos$WalletOrBuilder.class b/core/out/production/classes/org/pivxj/wallet/Protos$WalletOrBuilder.class new file mode 100644 index 000000000..3609d24fa Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos$WalletOrBuilder.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Protos.class b/core/out/production/classes/org/pivxj/wallet/Protos.class new file mode 100644 index 000000000..aa10d3d82 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Protos.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/RedeemData.class b/core/out/production/classes/org/pivxj/wallet/RedeemData.class new file mode 100644 index 000000000..a7d91a416 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/RedeemData.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Analyzer.class b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Analyzer.class new file mode 100644 index 000000000..a2c0bbe46 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Analyzer.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Result.class b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Result.class new file mode 100644 index 000000000..9c498fc70 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis$Result.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/RiskAnalysis.class b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis.class new file mode 100644 index 000000000..b7e3b4082 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/RiskAnalysis.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/SendRequest.class b/core/out/production/classes/org/pivxj/wallet/SendRequest.class new file mode 100644 index 000000000..83e03618e Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/SendRequest.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$BadPassword.class b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$BadPassword.class new file mode 100644 index 000000000..46d122aed Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$BadPassword.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$FutureVersion.class b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$FutureVersion.class new file mode 100644 index 000000000..045c793dc Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$FutureVersion.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$WrongNetwork.class b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$WrongNetwork.class new file mode 100644 index 000000000..5857b207f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException$WrongNetwork.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException.class b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException.class new file mode 100644 index 000000000..fe281a774 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/UnreadableWalletException.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$1.class b/core/out/production/classes/org/pivxj/wallet/Wallet$1.class new file mode 100644 index 000000000..1d07cf6bd Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$10.class b/core/out/production/classes/org/pivxj/wallet/Wallet$10.class new file mode 100644 index 000000000..635c8625c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$10.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$11.class b/core/out/production/classes/org/pivxj/wallet/Wallet$11.class new file mode 100644 index 000000000..f03ab7380 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$11.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$2.class b/core/out/production/classes/org/pivxj/wallet/Wallet$2.class new file mode 100644 index 000000000..2b85d2b7c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$2.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$3.class b/core/out/production/classes/org/pivxj/wallet/Wallet$3.class new file mode 100644 index 000000000..8525e9fb2 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$3.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$4.class b/core/out/production/classes/org/pivxj/wallet/Wallet$4.class new file mode 100644 index 000000000..557225224 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$4.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$5.class b/core/out/production/classes/org/pivxj/wallet/Wallet$5.class new file mode 100644 index 000000000..a7c0b5886 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$5.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$6.class b/core/out/production/classes/org/pivxj/wallet/Wallet$6.class new file mode 100644 index 000000000..fb0fcf2f1 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$6.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$7.class b/core/out/production/classes/org/pivxj/wallet/Wallet$7.class new file mode 100644 index 000000000..e2d9ad92f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$7.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$8.class b/core/out/production/classes/org/pivxj/wallet/Wallet$8.class new file mode 100644 index 000000000..b76bc51c3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$8.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$9.class b/core/out/production/classes/org/pivxj/wallet/Wallet$9.class new file mode 100644 index 000000000..66058a413 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$9.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceFutureRequest.class b/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceFutureRequest.class new file mode 100644 index 000000000..46e3e1710 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceFutureRequest.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceType.class b/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceType.class new file mode 100644 index 000000000..51cdd557b Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$BalanceType.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$CompletionException.class b/core/out/production/classes/org/pivxj/wallet/Wallet$CompletionException.class new file mode 100644 index 000000000..21a4a7b3d Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$CompletionException.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$CouldNotAdjustDownwards.class b/core/out/production/classes/org/pivxj/wallet/Wallet$CouldNotAdjustDownwards.class new file mode 100644 index 000000000..f52e8c5f9 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$CouldNotAdjustDownwards.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$DustySendRequested.class b/core/out/production/classes/org/pivxj/wallet/Wallet$DustySendRequested.class new file mode 100644 index 000000000..c958090e5 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$DustySendRequested.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$ExceededMaxTransactionSize.class b/core/out/production/classes/org/pivxj/wallet/Wallet$ExceededMaxTransactionSize.class new file mode 100644 index 000000000..f147c4c37 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$ExceededMaxTransactionSize.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$FeeCalculation.class b/core/out/production/classes/org/pivxj/wallet/Wallet$FeeCalculation.class new file mode 100644 index 000000000..3625db10e Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$FeeCalculation.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$FreeStandingTransactionOutput.class b/core/out/production/classes/org/pivxj/wallet/Wallet$FreeStandingTransactionOutput.class new file mode 100644 index 000000000..09d3a349f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$FreeStandingTransactionOutput.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$MissingSigsMode.class b/core/out/production/classes/org/pivxj/wallet/Wallet$MissingSigsMode.class new file mode 100644 index 000000000..5fb5f3e91 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$MissingSigsMode.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$MultipleOpReturnRequested.class b/core/out/production/classes/org/pivxj/wallet/Wallet$MultipleOpReturnRequested.class new file mode 100644 index 000000000..eab1a6dd7 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$MultipleOpReturnRequested.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$SendResult.class b/core/out/production/classes/org/pivxj/wallet/Wallet$SendResult.class new file mode 100644 index 000000000..3a5c22f64 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$SendResult.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet$TxOffsetPair.class b/core/out/production/classes/org/pivxj/wallet/Wallet$TxOffsetPair.class new file mode 100644 index 000000000..ab68f1bf3 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet$TxOffsetPair.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/Wallet.class b/core/out/production/classes/org/pivxj/wallet/Wallet.class new file mode 100644 index 000000000..a80abc3a4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/Wallet.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletExtension.class b/core/out/production/classes/org/pivxj/wallet/WalletExtension.class new file mode 100644 index 000000000..9183c290c Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletExtension.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletFiles$1.class b/core/out/production/classes/org/pivxj/wallet/WalletFiles$1.class new file mode 100644 index 000000000..d733f108f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletFiles$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletFiles$Listener.class b/core/out/production/classes/org/pivxj/wallet/WalletFiles$Listener.class new file mode 100644 index 000000000..2c2945937 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletFiles$Listener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletFiles.class b/core/out/production/classes/org/pivxj/wallet/WalletFiles.class new file mode 100644 index 000000000..f556d4f78 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletFiles.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$1.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$1.class new file mode 100644 index 000000000..a4b011034 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$1.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$2.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$2.class new file mode 100644 index 000000000..563c365dd Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$2.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$WalletFactory.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$WalletFactory.class new file mode 100644 index 000000000..32c8ce9a8 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer$WalletFactory.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer.class b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer.class new file mode 100644 index 000000000..b4547c054 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletProtobufSerializer.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletTransaction$Pool.class b/core/out/production/classes/org/pivxj/wallet/WalletTransaction$Pool.class new file mode 100644 index 000000000..d1feb8ffa Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletTransaction$Pool.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/WalletTransaction.class b/core/out/production/classes/org/pivxj/wallet/WalletTransaction.class new file mode 100644 index 000000000..5eef674b4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/WalletTransaction.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/AbstractKeyChainEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/AbstractKeyChainEventListener.class new file mode 100644 index 000000000..ef30c5cf0 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/AbstractKeyChainEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/AbstractWalletEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/AbstractWalletEventListener.class new file mode 100644 index 000000000..3033ea6da Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/AbstractWalletEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/KeyChainEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/KeyChainEventListener.class new file mode 100644 index 000000000..21cbb9940 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/KeyChainEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/ScriptsChangeEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/ScriptsChangeEventListener.class new file mode 100644 index 000000000..ad856ffdf Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/ScriptsChangeEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/WalletChangeEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/WalletChangeEventListener.class new file mode 100644 index 000000000..4b96dd90f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/WalletChangeEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsReceivedEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsReceivedEventListener.class new file mode 100644 index 000000000..de4adb35f Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsReceivedEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsSentEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsSentEventListener.class new file mode 100644 index 000000000..6aedaa8f4 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/WalletCoinsSentEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/WalletEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/WalletEventListener.class new file mode 100644 index 000000000..86b421c02 Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/WalletEventListener.class differ diff --git a/core/out/production/classes/org/pivxj/wallet/listeners/WalletReorganizeEventListener.class b/core/out/production/classes/org/pivxj/wallet/listeners/WalletReorganizeEventListener.class new file mode 100644 index 000000000..a989fafbb Binary files /dev/null and b/core/out/production/classes/org/pivxj/wallet/listeners/WalletReorganizeEventListener.class differ diff --git a/core/out/production/resources/org.bitcoin.production.checkpoints b/core/out/production/resources/org.bitcoin.production.checkpoints new file mode 100644 index 000000000..590e3d296 Binary files /dev/null and b/core/out/production/resources/org.bitcoin.production.checkpoints differ diff --git a/core/out/production/resources/org.bitcoin.test.checkpoints b/core/out/production/resources/org.bitcoin.test.checkpoints new file mode 100644 index 000000000..8401b4b56 Binary files /dev/null and b/core/out/production/resources/org.bitcoin.test.checkpoints differ diff --git a/core/out/production/resources/org/pivxj/crypto/cacerts b/core/out/production/resources/org/pivxj/crypto/cacerts new file mode 100644 index 000000000..df0ff8c69 Binary files /dev/null and b/core/out/production/resources/org/pivxj/crypto/cacerts differ diff --git a/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest$1.class b/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest$1.class new file mode 100644 index 000000000..ab9894484 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest.class new file mode 100644 index 000000000..9ab85c33c Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AbstractFullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/AddressTest$1AltNetwork.class b/core/out/test/classes/org/pivxj/core/AddressTest$1AltNetwork.class new file mode 100644 index 000000000..5bece0f2a Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AddressTest$1AltNetwork.class differ diff --git a/core/out/test/classes/org/pivxj/core/AddressTest.class b/core/out/test/classes/org/pivxj/core/AddressTest.class new file mode 100644 index 000000000..76e57baf8 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AddressTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/AlertMessageTest$1.class b/core/out/test/classes/org/pivxj/core/AlertMessageTest$1.class new file mode 100644 index 000000000..66fd4ee1d Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AlertMessageTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/AlertMessageTest.class b/core/out/test/classes/org/pivxj/core/AlertMessageTest.class new file mode 100644 index 000000000..26146b7cc Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/AlertMessageTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/Base58Test.class b/core/out/test/classes/org/pivxj/core/Base58Test.class new file mode 100644 index 000000000..6e0447412 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/Base58Test.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest$1.class b/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest$1.class new file mode 100644 index 000000000..667c94477 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest.class b/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest.class new file mode 100644 index 000000000..9822cf3b1 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoinSerializerTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$1.class b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$1.class new file mode 100644 index 000000000..31fcbf342 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$2.class b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$2.class new file mode 100644 index 000000000..f08f37e3e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$3.class b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$3.class new file mode 100644 index 000000000..bcb544345 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$3.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$BlockWrapper.class b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$BlockWrapper.class new file mode 100644 index 000000000..b03279567 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool$BlockWrapper.class differ diff --git a/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool.class b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool.class new file mode 100644 index 000000000..a73a9be66 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BitcoindComparisonTool.class differ diff --git a/core/out/test/classes/org/pivxj/core/BlockChainTest$1.class b/core/out/test/classes/org/pivxj/core/BlockChainTest$1.class new file mode 100644 index 000000000..e9ad348f3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BlockChainTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/BlockChainTest$TweakableTestNet2Params.class b/core/out/test/classes/org/pivxj/core/BlockChainTest$TweakableTestNet2Params.class new file mode 100644 index 000000000..6b10607d8 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BlockChainTest$TweakableTestNet2Params.class differ diff --git a/core/out/test/classes/org/pivxj/core/BlockChainTest.class b/core/out/test/classes/org/pivxj/core/BlockChainTest.class new file mode 100644 index 000000000..e305672e2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/BlockTest.class b/core/out/test/classes/org/pivxj/core/BlockTest.class new file mode 100644 index 000000000..d5af353f2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BlockTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/BloomFilterTest.class b/core/out/test/classes/org/pivxj/core/BloomFilterTest.class new file mode 100644 index 000000000..b301ad768 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/BloomFilterTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$1.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$1.class new file mode 100644 index 000000000..a0d798fb9 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$2.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$2.class new file mode 100644 index 000000000..76bf83fb7 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$3.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$3.class new file mode 100644 index 000000000..ce332b100 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$4.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$4.class new file mode 100644 index 000000000..fd5585613 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$5.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$5.class new file mode 100644 index 000000000..9a2672790 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$5.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$6.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$6.class new file mode 100644 index 000000000..d10ae4270 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$6.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest$7.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest$7.class new file mode 100644 index 000000000..c7d970378 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest$7.class differ diff --git a/core/out/test/classes/org/pivxj/core/ChainSplitTest.class b/core/out/test/classes/org/pivxj/core/ChainSplitTest.class new file mode 100644 index 000000000..5d7f6e023 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ChainSplitTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/CoinTest.class b/core/out/test/classes/org/pivxj/core/CoinTest.class new file mode 100644 index 000000000..c94a34227 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/CoinTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/Crypto$1.class b/core/out/test/classes/org/pivxj/core/Crypto$1.class new file mode 100644 index 000000000..86459f39f Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/Crypto$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/Crypto.class b/core/out/test/classes/org/pivxj/core/Crypto.class new file mode 100644 index 000000000..32a7cca28 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/Crypto.class differ diff --git a/core/out/test/classes/org/pivxj/core/DumpedPrivateKeyTest.class b/core/out/test/classes/org/pivxj/core/DumpedPrivateKeyTest.class new file mode 100644 index 000000000..0a2eb2e76 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/DumpedPrivateKeyTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/ECKeyTest$1.class b/core/out/test/classes/org/pivxj/core/ECKeyTest$1.class new file mode 100644 index 000000000..1c83e734a Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ECKeyTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/ECKeyTest.class b/core/out/test/classes/org/pivxj/core/ECKeyTest.class new file mode 100644 index 000000000..e6e526880 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ECKeyTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/FilteredBlockAndPartialMerkleTreeTests.class b/core/out/test/classes/org/pivxj/core/FilteredBlockAndPartialMerkleTreeTests.class new file mode 100644 index 000000000..376157f54 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/FilteredBlockAndPartialMerkleTreeTests.class differ diff --git a/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$1.class b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$1.class new file mode 100644 index 000000000..f90745fcc Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$BlockAndValidity.class b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$BlockAndValidity.class new file mode 100644 index 000000000..d336c41ae Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator$BlockAndValidity.class differ diff --git a/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator.class b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator.class new file mode 100644 index 000000000..a75be8068 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/FullBlockTestGenerator.class differ diff --git a/core/out/test/classes/org/pivxj/core/H2FullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/H2FullPrunedBlockChainTest.class new file mode 100644 index 000000000..a0383339e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/H2FullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/LevelDBFullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/LevelDBFullPrunedBlockChainTest.class new file mode 100644 index 000000000..534b28ffd Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/LevelDBFullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/MainBlockTest$1.class b/core/out/test/classes/org/pivxj/core/MainBlockTest$1.class new file mode 100644 index 000000000..1b0a15762 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MainBlockTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/MainBlockTest$TweakableTestNet2Params.class b/core/out/test/classes/org/pivxj/core/MainBlockTest$TweakableTestNet2Params.class new file mode 100644 index 000000000..0c8d0600e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MainBlockTest$TweakableTestNet2Params.class differ diff --git a/core/out/test/classes/org/pivxj/core/MainBlockTest.class b/core/out/test/classes/org/pivxj/core/MainBlockTest.class new file mode 100644 index 000000000..baa5dec7e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MainBlockTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/MasternodeTest.class b/core/out/test/classes/org/pivxj/core/MasternodeTest.class new file mode 100644 index 000000000..e1d345979 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MasternodeTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/MemoryFullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/MemoryFullPrunedBlockChainTest.class new file mode 100644 index 000000000..53117e71f Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MemoryFullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/MemoryPoolState.class b/core/out/test/classes/org/pivxj/core/MemoryPoolState.class new file mode 100644 index 000000000..b21f9348c Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MemoryPoolState.class differ diff --git a/core/out/test/classes/org/pivxj/core/MessageTest$VarBytesMessage.class b/core/out/test/classes/org/pivxj/core/MessageTest$VarBytesMessage.class new file mode 100644 index 000000000..bac65e45a Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MessageTest$VarBytesMessage.class differ diff --git a/core/out/test/classes/org/pivxj/core/MessageTest$VarStrMessage.class b/core/out/test/classes/org/pivxj/core/MessageTest$VarStrMessage.class new file mode 100644 index 000000000..09a22eb4d Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MessageTest$VarStrMessage.class differ diff --git a/core/out/test/classes/org/pivxj/core/MessageTest.class b/core/out/test/classes/org/pivxj/core/MessageTest.class new file mode 100644 index 000000000..5f0ecacb4 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MessageTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/MySQLFullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/MySQLFullPrunedBlockChainTest.class new file mode 100644 index 000000000..4a75fc8c0 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/MySQLFullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/NewBlock.class b/core/out/test/classes/org/pivxj/core/NewBlock.class new file mode 100644 index 000000000..5da855731 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/NewBlock.class differ diff --git a/core/out/test/classes/org/pivxj/core/ParseByteCacheTest.class b/core/out/test/classes/org/pivxj/core/ParseByteCacheTest.class new file mode 100644 index 000000000..d7217192e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/ParseByteCacheTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerAddressTest.class b/core/out/test/classes/org/pivxj/core/PeerAddressTest.class new file mode 100644 index 000000000..ce6898a7e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerAddressTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$1.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$1.class new file mode 100644 index 000000000..270d4482e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$10.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$10.class new file mode 100644 index 000000000..05ea4295d Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$10.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$11.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$11.class new file mode 100644 index 000000000..fecc39135 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$11.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$12.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$12.class new file mode 100644 index 000000000..644316504 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$12.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$13.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$13.class new file mode 100644 index 000000000..5a8df2ed0 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$13.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$2.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$2.class new file mode 100644 index 000000000..c98a39e5e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$3.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$3.class new file mode 100644 index 000000000..65e15e31e Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$4.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$4.class new file mode 100644 index 000000000..a6475bb26 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$5.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$5.class new file mode 100644 index 000000000..ccf688aca Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$5.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$6.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$6.class new file mode 100644 index 000000000..ebca026c7 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$6.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$7.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$7.class new file mode 100644 index 000000000..996ddd839 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$7.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$8.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$8.class new file mode 100644 index 000000000..9d0910c79 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$8.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest$9.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest$9.class new file mode 100644 index 000000000..5c8996e05 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest$9.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerGroupTest.class b/core/out/test/classes/org/pivxj/core/PeerGroupTest.class new file mode 100644 index 000000000..8e607157d Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerGroupTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$1.class b/core/out/test/classes/org/pivxj/core/PeerTest$1.class new file mode 100644 index 000000000..a6778c6d3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$10.class b/core/out/test/classes/org/pivxj/core/PeerTest$10.class new file mode 100644 index 000000000..a4a919c2d Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$10.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$11.class b/core/out/test/classes/org/pivxj/core/PeerTest$11.class new file mode 100644 index 000000000..207b6af84 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$11.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$12.class b/core/out/test/classes/org/pivxj/core/PeerTest$12.class new file mode 100644 index 000000000..b2eb9b900 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$12.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$13.class b/core/out/test/classes/org/pivxj/core/PeerTest$13.class new file mode 100644 index 000000000..288ec66b6 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$13.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$14.class b/core/out/test/classes/org/pivxj/core/PeerTest$14.class new file mode 100644 index 000000000..45c9c6581 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$14.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$15.class b/core/out/test/classes/org/pivxj/core/PeerTest$15.class new file mode 100644 index 000000000..bad230935 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$15.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$16.class b/core/out/test/classes/org/pivxj/core/PeerTest$16.class new file mode 100644 index 000000000..6a3e6042f Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$16.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$17.class b/core/out/test/classes/org/pivxj/core/PeerTest$17.class new file mode 100644 index 000000000..e00967020 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$17.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$2.class b/core/out/test/classes/org/pivxj/core/PeerTest$2.class new file mode 100644 index 000000000..65a8e79ab Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$3.class b/core/out/test/classes/org/pivxj/core/PeerTest$3.class new file mode 100644 index 000000000..317ff06ce Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$4.class b/core/out/test/classes/org/pivxj/core/PeerTest$4.class new file mode 100644 index 000000000..55d3f9aba Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$5.class b/core/out/test/classes/org/pivxj/core/PeerTest$5.class new file mode 100644 index 000000000..d7777cd8a Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$5.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$6.class b/core/out/test/classes/org/pivxj/core/PeerTest$6.class new file mode 100644 index 000000000..d561f40f3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$6.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$7.class b/core/out/test/classes/org/pivxj/core/PeerTest$7.class new file mode 100644 index 000000000..fe947f2c1 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$7.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$8.class b/core/out/test/classes/org/pivxj/core/PeerTest$8.class new file mode 100644 index 000000000..7d4152ded Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$8.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest$9.class b/core/out/test/classes/org/pivxj/core/PeerTest$9.class new file mode 100644 index 000000000..b813d76bc Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest$9.class differ diff --git a/core/out/test/classes/org/pivxj/core/PeerTest.class b/core/out/test/classes/org/pivxj/core/PeerTest.class new file mode 100644 index 000000000..de2436cf1 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PeerTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/PostgresFullPrunedBlockChainTest.class b/core/out/test/classes/org/pivxj/core/PostgresFullPrunedBlockChainTest.class new file mode 100644 index 000000000..975fdf66f Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/PostgresFullPrunedBlockChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/Rule.class b/core/out/test/classes/org/pivxj/core/Rule.class new file mode 100644 index 000000000..5eb66e92b Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/Rule.class differ diff --git a/core/out/test/classes/org/pivxj/core/RuleList.class b/core/out/test/classes/org/pivxj/core/RuleList.class new file mode 100644 index 000000000..ad68909de Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/RuleList.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$1.class b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$1.class new file mode 100644 index 000000000..43e76e0cb Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$2.class b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$2.class new file mode 100644 index 000000000..994a9cfdb Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$3.class b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$3.class new file mode 100644 index 000000000..03039ef14 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest.class b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest.class new file mode 100644 index 000000000..0cd426331 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionBroadcastTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionOutPointWithValue.class b/core/out/test/classes/org/pivxj/core/TransactionOutPointWithValue.class new file mode 100644 index 000000000..910ae7c62 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionOutPointWithValue.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionOutputTest.class b/core/out/test/classes/org/pivxj/core/TransactionOutputTest.class new file mode 100644 index 000000000..81608cacf Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionOutputTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionTest$1.class b/core/out/test/classes/org/pivxj/core/TransactionTest$1.class new file mode 100644 index 000000000..6ef315685 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionTest$2.class b/core/out/test/classes/org/pivxj/core/TransactionTest$2.class new file mode 100644 index 000000000..837d76357 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/TransactionTest.class b/core/out/test/classes/org/pivxj/core/TransactionTest.class new file mode 100644 index 000000000..5ddfaf3eb Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TransactionTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$1.class b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$1.class new file mode 100644 index 000000000..d63e6a63c Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$2.class b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$2.class new file mode 100644 index 000000000..a5e423969 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest.class b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest.class new file mode 100644 index 000000000..ea232df18 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/TxConfidenceTableTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/UTXORule.class b/core/out/test/classes/org/pivxj/core/UTXORule.class new file mode 100644 index 000000000..74f99025c Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/UTXORule.class differ diff --git a/core/out/test/classes/org/pivxj/core/UtilsTest.class b/core/out/test/classes/org/pivxj/core/UtilsTest.class new file mode 100644 index 000000000..6c20a14f1 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/UtilsTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/VarIntTest.class b/core/out/test/classes/org/pivxj/core/VarIntTest.class new file mode 100644 index 000000000..93b642b08 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/VarIntTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/VersionMessageTest.class b/core/out/test/classes/org/pivxj/core/VersionMessageTest.class new file mode 100644 index 000000000..11081ba03 Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/VersionMessageTest.class differ diff --git a/core/out/test/classes/org/pivxj/core/VersionedChecksummedBytesTest.class b/core/out/test/classes/org/pivxj/core/VersionedChecksummedBytesTest.class new file mode 100644 index 000000000..3f1bb3ffb Binary files /dev/null and b/core/out/test/classes/org/pivxj/core/VersionedChecksummedBytesTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/BIP32MatiTest.class b/core/out/test/classes/org/pivxj/crypto/BIP32MatiTest.class new file mode 100644 index 000000000..5c33df28d Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/BIP32MatiTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector$DerivedTestCase.class b/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector$DerivedTestCase.class new file mode 100644 index 000000000..5531bed18 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector$DerivedTestCase.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector.class b/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector.class new file mode 100644 index 000000000..bc590fe9f Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/BIP32Test$HDWTestVector.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/BIP32Test.class b/core/out/test/classes/org/pivxj/crypto/BIP32Test.class new file mode 100644 index 000000000..cad24f638 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/BIP32Test.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/BIP38PrivateKeyTest.class b/core/out/test/classes/org/pivxj/crypto/BIP38PrivateKeyTest.class new file mode 100644 index 000000000..7a9a83571 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/BIP38PrivateKeyTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/ChildKeyDerivationTest.class b/core/out/test/classes/org/pivxj/crypto/ChildKeyDerivationTest.class new file mode 100644 index 000000000..3c1b6fa23 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/ChildKeyDerivationTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/HDUtilsTest.class b/core/out/test/classes/org/pivxj/crypto/HDUtilsTest.class new file mode 100644 index 000000000..7dea5c066 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/HDUtilsTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/KeyCrypterScryptTest.class b/core/out/test/classes/org/pivxj/crypto/KeyCrypterScryptTest.class new file mode 100644 index 000000000..c9cd2d023 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/KeyCrypterScryptTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/MnemonicCodeTest.class b/core/out/test/classes/org/pivxj/crypto/MnemonicCodeTest.class new file mode 100644 index 000000000..40d5ec57c Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/MnemonicCodeTest.class differ diff --git a/core/out/test/classes/org/pivxj/crypto/X509UtilsTest.class b/core/out/test/classes/org/pivxj/crypto/X509UtilsTest.class new file mode 100644 index 000000000..117fc2343 Binary files /dev/null and b/core/out/test/classes/org/pivxj/crypto/X509UtilsTest.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1$1.class new file mode 100644 index 000000000..9d490ea20 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1.class new file mode 100644 index 000000000..e5c612adf Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$10.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$10.class new file mode 100644 index 000000000..716973a47 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$10.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11$1.class new file mode 100644 index 000000000..7a95584ac Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11.class new file mode 100644 index 000000000..b71557745 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$11.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$12.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$12.class new file mode 100644 index 000000000..7141b9a9f Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$12.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$13.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$13.class new file mode 100644 index 000000000..e8743b58b Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$13.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$14.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$14.class new file mode 100644 index 000000000..b4ad0e99c Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$14.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$2.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$2.class new file mode 100644 index 000000000..25c1925f1 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$2.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$3.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$3.class new file mode 100644 index 000000000..c4f87cae2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$3.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4$1.class new file mode 100644 index 000000000..17b080b35 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4.class new file mode 100644 index 000000000..ce2777b55 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$4.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$5.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$5.class new file mode 100644 index 000000000..37286bb35 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$5.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6$1.class new file mode 100644 index 000000000..6f652e3de Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6.class new file mode 100644 index 000000000..e682fb183 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$6.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$7.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$7.class new file mode 100644 index 000000000..a33f9669b Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$7.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$8.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$8.class new file mode 100644 index 000000000..449bb0ec9 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$8.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9$1.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9$1.class new file mode 100644 index 000000000..d0b07ab01 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9$1.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9.class new file mode 100644 index 000000000..121fb84ac Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests$9.class differ diff --git a/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests.class b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests.class new file mode 100644 index 000000000..7a3576479 Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/NetworkAbstractionTests.class differ diff --git a/core/out/test/classes/org/pivxj/net/discovery/SeedPeersTest.class b/core/out/test/classes/org/pivxj/net/discovery/SeedPeersTest.class new file mode 100644 index 000000000..4e045521c Binary files /dev/null and b/core/out/test/classes/org/pivxj/net/discovery/SeedPeersTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$1.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$1.class new file mode 100644 index 000000000..be8bf5fb5 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$2.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$2.class new file mode 100644 index 000000000..9f97b561e Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3$1.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3$1.class new file mode 100644 index 000000000..256bc8c24 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3$1.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3.class new file mode 100644 index 000000000..ebc4a912e Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$4.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$4.class new file mode 100644 index 000000000..f9b630288 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest.class new file mode 100644 index 000000000..146b27208 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelConnectionTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingClientConnection.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingClientConnection.class new file mode 100644 index 000000000..246a4098b Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingClientConnection.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingPair.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingPair.class new file mode 100644 index 000000000..8a52852da Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingPair.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingServerConnection.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingServerConnection.class new file mode 100644 index 000000000..dfb4f9d62 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$RecordingServerConnection.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$UpdatePair.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$UpdatePair.class new file mode 100644 index 000000000..739718b7a Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils$UpdatePair.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils.class b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils.class new file mode 100644 index 000000000..35b1d33ea Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/ChannelTestUtils.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelClientTest.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelClientTest.class new file mode 100644 index 000000000..416951d58 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelClientTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelServerTest.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelServerTest.class new file mode 100644 index 000000000..75b572bd2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelServerTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$1.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$1.class new file mode 100644 index 000000000..3b5c0a8c0 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$2.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$2.class new file mode 100644 index 000000000..d093ee45c Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$3.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$3.class new file mode 100644 index 000000000..9435ac4e8 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$4.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$4.class new file mode 100644 index 000000000..af453a960 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$5.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$5.class new file mode 100644 index 000000000..82673ed5a Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$5.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$TxFuturePair.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$TxFuturePair.class new file mode 100644 index 000000000..99871b908 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest$TxFuturePair.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest.class b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest.class new file mode 100644 index 000000000..03a67c7c4 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/channels/PaymentChannelStateTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/payments/PaymentProtocolTest.class b/core/out/test/classes/org/pivxj/protocols/payments/PaymentProtocolTest.class new file mode 100644 index 000000000..01c34d3e9 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/payments/PaymentProtocolTest.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession$PaymentLogItem.class b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession$PaymentLogItem.class new file mode 100644 index 000000000..5b5df5b3c Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession$PaymentLogItem.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession.class b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession.class new file mode 100644 index 000000000..0fbadca7d Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest$MockPaymentSession.class differ diff --git a/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest.class b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest.class new file mode 100644 index 000000000..371861dc2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/protocols/payments/PaymentSessionTest.class differ diff --git a/core/out/test/classes/org/pivxj/script/ScriptChunkTest.class b/core/out/test/classes/org/pivxj/script/ScriptChunkTest.class new file mode 100644 index 000000000..3c71236c2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/script/ScriptChunkTest.class differ diff --git a/core/out/test/classes/org/pivxj/script/ScriptTest.class b/core/out/test/classes/org/pivxj/script/ScriptTest.class new file mode 100644 index 000000000..9a7123a76 Binary files /dev/null and b/core/out/test/classes/org/pivxj/script/ScriptTest.class differ diff --git a/core/out/test/classes/org/pivxj/store/LevelDBBlockStoreTest.class b/core/out/test/classes/org/pivxj/store/LevelDBBlockStoreTest.class new file mode 100644 index 000000000..e118a3175 Binary files /dev/null and b/core/out/test/classes/org/pivxj/store/LevelDBBlockStoreTest.class differ diff --git a/core/out/test/classes/org/pivxj/store/SPVBlockStoreTest.class b/core/out/test/classes/org/pivxj/store/SPVBlockStoreTest.class new file mode 100644 index 000000000..c2a2038c7 Binary files /dev/null and b/core/out/test/classes/org/pivxj/store/SPVBlockStoreTest.class differ diff --git a/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$1.class b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$1.class new file mode 100644 index 000000000..b34cce0b3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$2.class b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$2.class new file mode 100644 index 000000000..123c67adc Binary files /dev/null and b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest.class b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest.class new file mode 100644 index 000000000..48b5168f2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/store/WalletProtobufSerializerTest.class differ diff --git a/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$BlockPair.class b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$BlockPair.class new file mode 100644 index 000000000..c9a7c2037 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$BlockPair.class differ diff --git a/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$DoubleSpends.class b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$DoubleSpends.class new file mode 100644 index 000000000..260dbbdeb Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder$DoubleSpends.class differ diff --git a/core/out/test/classes/org/pivxj/testing/FakeTxBuilder.class b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder.class new file mode 100644 index 000000000..e60ba4c3b Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/FakeTxBuilder.class differ diff --git a/core/out/test/classes/org/pivxj/testing/FooWalletExtension.class b/core/out/test/classes/org/pivxj/testing/FooWalletExtension.class new file mode 100644 index 000000000..2feae71e5 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/FooWalletExtension.class differ diff --git a/core/out/test/classes/org/pivxj/testing/InboundMessageQueuer.class b/core/out/test/classes/org/pivxj/testing/InboundMessageQueuer.class new file mode 100644 index 000000000..622a6f5db Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/InboundMessageQueuer.class differ diff --git a/core/out/test/classes/org/pivxj/testing/KeyChainTransactionSigner.class b/core/out/test/classes/org/pivxj/testing/KeyChainTransactionSigner.class new file mode 100644 index 000000000..57234fef3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/KeyChainTransactionSigner.class differ diff --git a/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$1.class b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$1.class new file mode 100644 index 000000000..0296acc8a Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$TxFuturePair.class b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$TxFuturePair.class new file mode 100644 index 000000000..5496704f4 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster$TxFuturePair.class differ diff --git a/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster.class b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster.class new file mode 100644 index 000000000..0e26bf490 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/MockTransactionBroadcaster.class differ diff --git a/core/out/test/classes/org/pivxj/testing/NopTransactionSigner.class b/core/out/test/classes/org/pivxj/testing/NopTransactionSigner.class new file mode 100644 index 000000000..74b94fc0a Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/NopTransactionSigner.class differ 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 new file mode 100644 index 000000000..a22350960 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1.class new file mode 100644 index 000000000..b9bb125b4 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$2.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$2.class new file mode 100644 index 000000000..3f4286df8 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$2.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$3.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$3.class new file mode 100644 index 000000000..13d89840a Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$3.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$ClientType.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$ClientType.class new file mode 100644 index 000000000..b9057cfaa Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections$ClientType.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections.class b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections.class new file mode 100644 index 000000000..468c5f71f Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithNetworkConnections.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1$1.class b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1$1.class new file mode 100644 index 000000000..71c48e720 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1.class b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1.class new file mode 100644 index 000000000..f2b1c185b Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1.class b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1.class new file mode 100644 index 000000000..392f7b28d Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup$1.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup.class b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup.class new file mode 100644 index 000000000..bb34df7c3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithPeerGroup.class differ diff --git a/core/out/test/classes/org/pivxj/testing/TestWithWallet.class b/core/out/test/classes/org/pivxj/testing/TestWithWallet.class new file mode 100644 index 000000000..930ee6b1e Binary files /dev/null and b/core/out/test/classes/org/pivxj/testing/TestWithWallet.class differ diff --git a/core/out/test/classes/org/pivxj/uri/PivxURITest$1.class b/core/out/test/classes/org/pivxj/uri/PivxURITest$1.class new file mode 100644 index 000000000..92cebbf6c Binary files /dev/null and b/core/out/test/classes/org/pivxj/uri/PivxURITest$1.class differ diff --git a/core/out/test/classes/org/pivxj/uri/PivxURITest.class b/core/out/test/classes/org/pivxj/uri/PivxURITest.class new file mode 100644 index 000000000..e8783e3f3 Binary files /dev/null and b/core/out/test/classes/org/pivxj/uri/PivxURITest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/BaseTaggableObjectTest.class b/core/out/test/classes/org/pivxj/utils/BaseTaggableObjectTest.class new file mode 100644 index 000000000..ef4204871 Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/BaseTaggableObjectTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/BtcFormatTest.class b/core/out/test/classes/org/pivxj/utils/BtcFormatTest.class new file mode 100644 index 000000000..e61b4b78b Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/BtcFormatTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/ExchangeRateTest.class b/core/out/test/classes/org/pivxj/utils/ExchangeRateTest.class new file mode 100644 index 000000000..ca5527bdc Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/ExchangeRateTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/ExponentialBackoffTest.class b/core/out/test/classes/org/pivxj/utils/ExponentialBackoffTest.class new file mode 100644 index 000000000..aaa9c14bb Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/ExponentialBackoffTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/FiatTest.class b/core/out/test/classes/org/pivxj/utils/FiatTest.class new file mode 100644 index 000000000..53c8f2208 Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/FiatTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/MonetaryFormatTest.class b/core/out/test/classes/org/pivxj/utils/MonetaryFormatTest.class new file mode 100644 index 000000000..8c9cea4d2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/MonetaryFormatTest.class differ diff --git a/core/out/test/classes/org/pivxj/utils/VersionTallyTest.class b/core/out/test/classes/org/pivxj/utils/VersionTallyTest.class new file mode 100644 index 000000000..4946fa7bd Binary files /dev/null and b/core/out/test/classes/org/pivxj/utils/VersionTallyTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest$1.class b/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest$1.class new file mode 100644 index 000000000..0cf8e8287 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest.class b/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest.class new file mode 100644 index 000000000..8dba4c445 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/BasicKeyChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DefaultCoinSelectorTest.class b/core/out/test/classes/org/pivxj/wallet/DefaultCoinSelectorTest.class new file mode 100644 index 000000000..50dd75f46 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DefaultCoinSelectorTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest$1.class b/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest$1.class new file mode 100644 index 000000000..8e9ba1bc2 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest.class b/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest.class new file mode 100644 index 000000000..ef0051516 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DefaultRiskAnalysisTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$1.class b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$1.class new file mode 100644 index 000000000..f41b26bec Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$2.class b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$2.class new file mode 100644 index 000000000..b9caa5262 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$AccountOneChain.class b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$AccountOneChain.class new file mode 100644 index 000000000..782dfc473 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest$AccountOneChain.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest.class b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest.class new file mode 100644 index 000000000..0185796dd Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/DeterministicKeyChainTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest$1.class b/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest$1.class new file mode 100644 index 000000000..0443b6d49 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest.class b/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest.class new file mode 100644 index 000000000..a2318497c Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/KeyChainGroupTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/MultiWalletTest.class b/core/out/test/classes/org/pivxj/wallet/MultiWalletTest.class new file mode 100644 index 000000000..8cc8afeaa Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/MultiWalletTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletExtensionsTest.class b/core/out/test/classes/org/pivxj/wallet/WalletExtensionsTest.class new file mode 100644 index 000000000..06aa852d8 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletExtensionsTest.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$1.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$1.class new file mode 100644 index 000000000..3e57604b5 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$10.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$10.class new file mode 100644 index 000000000..712a1c45b Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$10.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$11.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$11.class new file mode 100644 index 000000000..9aa71d06c Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$11.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$12.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$12.class new file mode 100644 index 000000000..a1f738e2a Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$12.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$13.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$13.class new file mode 100644 index 000000000..2512ad0b4 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$13.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$14.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$14.class new file mode 100644 index 000000000..00ef18698 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$14.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$15.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$15.class new file mode 100644 index 000000000..32840b67d Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$15.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$16.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$16.class new file mode 100644 index 000000000..e8bf4aed7 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$16.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$17.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$17.class new file mode 100644 index 000000000..35cb1a33e Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$17.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$18$1.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$18$1.class new file mode 100644 index 000000000..615688c24 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$18$1.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$18.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$18.class new file mode 100644 index 000000000..71fcb3f31 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$18.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$19.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$19.class new file mode 100644 index 000000000..aebb50015 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$19.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$2.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$2.class new file mode 100644 index 000000000..3c991a988 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$2.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$20.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$20.class new file mode 100644 index 000000000..613ae6ff0 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$20.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$3.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$3.class new file mode 100644 index 000000000..b39ea9a3c Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$3.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$4.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$4.class new file mode 100644 index 000000000..150faca34 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$4.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$5.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$5.class new file mode 100644 index 000000000..1f09d6aca Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$5.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$6.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$6.class new file mode 100644 index 000000000..e49263886 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$6.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$7.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$7.class new file mode 100644 index 000000000..b179bf793 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$7.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$8.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$8.class new file mode 100644 index 000000000..7c4def9a0 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$8.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$9.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$9.class new file mode 100644 index 000000000..33b8d13d9 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$9.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$TestCoinSelector.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestCoinSelector.class new file mode 100644 index 000000000..19172a361 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestCoinSelector.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis$Analyzer.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis$Analyzer.class new file mode 100644 index 000000000..f6b56c72f Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis$Analyzer.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis.class b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis.class new file mode 100644 index 000000000..899411d76 Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest$TestRiskAnalysis.class differ diff --git a/core/out/test/classes/org/pivxj/wallet/WalletTest.class b/core/out/test/classes/org/pivxj/wallet/WalletTest.class new file mode 100644 index 000000000..a36276c2d Binary files /dev/null and b/core/out/test/classes/org/pivxj/wallet/WalletTest.class differ diff --git a/core/out/test/resources/logging.properties b/core/out/test/resources/logging.properties new file mode 100644 index 000000000..d6134cacc --- /dev/null +++ b/core/out/test/resources/logging.properties @@ -0,0 +1,2 @@ +handlers=java.util.logging.ConsoleHandler +org.pivxj.level=OFF \ No newline at end of file diff --git a/core/out/test/resources/org/pivxj/core/sig_canonical.json b/core/out/test/resources/org/pivxj/core/sig_canonical.json new file mode 100644 index 000000000..e43a08629 --- /dev/null +++ b/core/out/test/resources/org/pivxj/core/sig_canonical.json @@ -0,0 +1,7 @@ +[ + "300602010002010001", + "3008020200ff020200ff01", + "304402203932c892e2e550f3af8ee4ce9c215a87f9bb831dcac87b2838e2c2eaa891df0c022030b61dd36543125d56b9f9f3a1f9353189e5af33cdda8d77a5209aec03978fa001", + "30450220076045be6f9eca28ff1ec606b833d0b87e70b2a630f5e3a496b110967a40f90a0221008fffd599910eefe00bc803c688c2eca1d2ba7f6b180620eaa03488e6585db6ba01", + "3046022100876045be6f9eca28ff1ec606b833d0b87e70b2a630f5e3a496b110967a40f90a0221008fffd599910eefe00bc803c688c2eca1d2ba7f6b180620eaa03488e6585db6ba01" +] diff --git a/core/out/test/resources/org/pivxj/core/sig_noncanonical.json b/core/out/test/resources/org/pivxj/core/sig_noncanonical.json new file mode 100644 index 000000000..d9a6c1cdd --- /dev/null +++ b/core/out/test/resources/org/pivxj/core/sig_noncanonical.json @@ -0,0 +1,22 @@ +[ + "non-hex strings are ignored", + + "too short:", "30050201FF020001", + "too long:", "30470221005990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105022200002d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "hashtype:", "304402205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed11", + "type:", "314402205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "total length:", "304502205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "S len oob:", "301F01205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb101", + "R+S:", "304502205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed0001", + + "R type:", "304401205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "R len = 0:", "3024020002202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "R<0:", "304402208990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "R padded:", "30450221005990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610502202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + + + "S type:", "304402205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba610501202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "S len = 0:", "302402205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105020001", + "S<0:", "304402205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba61050220fd5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01", + "S padded:", "304502205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba61050221002d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed01" +] diff --git a/core/out/test/resources/org/pivxj/crypto/comodo-smime.crt b/core/out/test/resources/org/pivxj/crypto/comodo-smime.crt new file mode 100644 index 000000000..8f6d782ab --- /dev/null +++ b/core/out/test/resources/org/pivxj/crypto/comodo-smime.crt @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFMTCCBBmgAwIBAgIQV2O4gJQ5NHgn/PPvDsU1djANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxOTA3BgNV +BAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFp +bCBDQTAeFw0xNDAzMjkwMDAwMDBaFw0xNTAzMjkyMzU5NTlaMCkxJzAlBgkqhkiG +9w0BCQEWGGNvbW9kby5jb21Ac2NoaWxkYmFjaC5kZTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAM61nbZo3ZN0Ojzn7UzoHBf07ZyTDm3KnwK4BdLKLgNS +NbGAJtgaYN91qKRbXf97VAFIN6FGhoXT+7MXSzlHgQHn7RkForMyREsD6F32TtyV +ZY9RuMGWjmPtABPRgeCVfNJNh9Hu87Uhhkj3Ma+H//ykfkJdDiOyBWIOJdjBFSZZ +M6bsZnyH8JCHqmxvK2qHpk+qNqpsNOZV83GYPA2gTFWd1AHjo5+A7W1Bo/qyJMrz +tpab0i+ieJPJdi6eJkMt3+nfr57Q2o4A3ZxH0Axq2D1a2dElhMK/JQilh2D+IDUp +VjoKkHgV9yji9UGOc3VHq+Sx8bNTumL7OFLCFYky9J8CAwEAAaOCAegwggHkMB8G +A1UdIwQYMBaAFHoTTgB0W8Z4Y2QnwS/ioFu8ecV7MB0GA1UdDgQWBBRWUNGbH8V3 +av0ESrIUwnvmq4aEEDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAgBgNV +HSUEGTAXBggrBgEFBQcDBAYLKwYBBAGyMQEDBQIwEQYJYIZIAYb4QgEBBAQDAgUg +MEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQEBMCswKQYIKwYBBQUHAgEWHWh0dHBz +Oi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BTMFcGA1UdHwRQME4wTKBKoEiGRmh0dHA6 +Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET0NsaWVudEF1dGhlbnRpY2F0aW9uYW5k +U2VjdXJlRW1haWxDQS5jcmwwgYgGCCsGAQUFBwEBBHwwejBSBggrBgEFBQcwAoZG +aHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPQ2xpZW50QXV0aGVudGljYXRp +b25hbmRTZWN1cmVFbWFpbENBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au +Y29tb2RvY2EuY29tMCMGA1UdEQQcMBqBGGNvbW9kby5jb21Ac2NoaWxkYmFjaC5k +ZTANBgkqhkiG9w0BAQUFAAOCAQEAMFhmP1Zy16m5L9gaGCDy847tJI3btBFFZMu/ +MMqamC5515QayLfwf9K2nmu1W63nehEAKqNw+PR1xTYnhPT4fopw5zFndiNg0L5u +blEbRgSdQYBh1I2dkzzPRDRJig4LfxVzRzL66FbllLEiJ6oR/XgdsH+JFgyjhk3Y +uJt+29sXoZ+ZR29d7l07OikQGI0HWCmp/UiwBcQ4dcTrDB72JYLHyli+OTAkcu9I +rBpsIbWJq+7NjaQ/8CJjvQ2neTgDS1Dq5DzMqqRlhxQwRl4dhfCSCcF81Vf0as4S +vVDNR8vJ9puGlYyGVJHhQ6mEoFEIvpetS7E9ELHnybSC9ev8CA== +-----END CERTIFICATE----- diff --git a/core/out/test/resources/org/pivxj/crypto/startssl-client.crt b/core/out/test/resources/org/pivxj/crypto/startssl-client.crt new file mode 100644 index 000000000..44bed5306 --- /dev/null +++ b/core/out/test/resources/org/pivxj/crypto/startssl-client.crt @@ -0,0 +1,41 @@ +-----BEGIN CERTIFICATE----- +MIIHPjCCBiagAwIBAgICH8wwDQYJKoZIhvcNAQEFBQAwgYwxCzAJBgNVBAYTAklM +MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRh +bCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYDVQQDEy9TdGFydENvbSBDbGFzcyAx +IFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQTAeFw0wODA2MjIyMzA4MTJa +Fw0wOTA2MjIyMzA4MTJaMIHEMQswCQYDVQQGEwJERTEPMA0GA1UECBMGQmF5ZXJu +MREwDwYDVQQHEwhNdWVuY2hlbjEbMBkGA1UEChMSQW5kcmVhcyBTY2hpbGRiYWNo +MR4wHAYDVQQLExVQZXJzb25hIG5vdCB2YWxpZGF0ZWQxKTAnBgNVBAMTIFN0YXJ0 +Q29tIEZyZWUgQ2VydGlmaWNhdGUgTWVtYmVyMSkwJwYJKoZIhvcNAQkBFhpzdGFy +dHNzbC5jb21Ac2NoaWxkYmFjaC5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAOhtSryPHR3gB5E48JZS9y8R3A9I2gRGGon+kRLNh+LCAJJ1hm28Lr41 +leH0uApWs1WP//qzkXaFUoLlilu/XzkDU48J6HCeUq+7zkxFhq7UxK2lq7J1P8fH +tbKYSBWMfzZuVmwhrbaurggfCmq/o5/angbhN7Pn+aV1aPegjAKd8n94HVvVgzkp +DDYTA5vFbX/3241MIeKRU5InYw9KzXAC1aE0BYVM21f5Z/UQ+V4PEfXrSH9OHPVW +3GWasmjzR9h+/u1omJzejkXY6Ygd15tnmatqMoxRRVMWhWS9Hg7D+AgeiZNlEQZV +NTZxIiPA8618x51Wlq0XAiV5UvkMImECAwEAAaOCA24wggNqMAwGA1UdEwQFMAMC +AQAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAd +BgNVHQ4EFgQUeMIc15HHtjl2TDpGnc9X2UkUV2EwgagGA1UdIwSBoDCBnYAUU3Lt +kpzg2ssBXHx+ljVO8tS4UYKhgYGkfzB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNh +dGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHmCAQ0wggFHBgNVHSAEggE+MIIBOjCCATYGCysGAQQBgbU3AQEFMIIBJTAu +BggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjA0 +BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50ZXJtZWRpYXRl +LnBkZjCBvAYIKwYBBQUHAgIwga8wFBYNU3RhcnRDb20gTHRkLjADAgEBGoGWTGlt +aXRlZCBMaWFiaWxpdHksIHJlYWQgdGhlIHNlY3Rpb24gKkxlZ2FsIExpbWl0YXRp +b25zKiBvZiB0aGUgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUG9s +aWN5IGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3ku +cGRmMGMGA1UdHwRcMFowK6ApoCeGJWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2Ny +dHUxLWNybC5jcmwwK6ApoCeGJWh0dHA6Ly9jcmwuc3RhcnRzc2wuY29tL2NydHUx +LWNybC5jcmwwgY4GCCsGAQUFBwEBBIGBMH8wOQYIKwYBBQUHMAGGLWh0dHA6Ly9v +Y3NwLnN0YXJ0c3NsLmNvbS9zdWIvY2xhc3MxL2NsaWVudC9jYTBCBggrBgEFBQcw +AoY2aHR0cDovL3d3dy5zdGFydHNzbC5jb20vY2VydHMvc3ViLmNsYXNzMS5jbGll +bnQuY2EuY3J0MCMGA1UdEgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzAN +BgkqhkiG9w0BAQUFAAOCAQEAIsKaduVCShmIKRsUCqTSeJSDIjgSdRiRmvDig+vT +NkRrfhZhtpkp03lfe71agFlaV6UWtFF2nrgFaoUmq2KxMnCD1gkQPQu01TqrDDwi ++dKFkh4tSGyj++BRCX4jpYgY7pDzh0Dtb261ovpzYB3e36mMO4AiLHby10VHir+k +AUI87JVffsgsKCEEEkywA//KcXqyVfgW3FgicNczCiwXdWCLJcnBAq8aundebdIH +hTFoWB/5BuRRCY2Je9XFR8vb1EUC5SuTL+wT0mGdx2T+qNskNtbZKyHLQSp9fCoD +yupR1THhr7iqF4zRI6r5r8tRuu8jr55NgN5ZA+LCisEJ7A== +-----END CERTIFICATE----- diff --git a/core/out/test/resources/org/pivxj/crypto/startssl-smime.crt b/core/out/test/resources/org/pivxj/crypto/startssl-smime.crt new file mode 100644 index 000000000..ac8ae2711 --- /dev/null +++ b/core/out/test/resources/org/pivxj/crypto/startssl-smime.crt @@ -0,0 +1,40 @@ +-----BEGIN CERTIFICATE----- +MIIHFDCCBfygAwIBAgIDAILwMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ +TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0 +YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg +MSBQcmltYXJ5IEludGVybWVkaWF0ZSBDbGllbnQgQ0EwHhcNMDkwNjA5MDAwMDAx +WhcNMTAwNjA5MjM1OTU5WjB2MR4wHAYDVQQKExVQZXJzb25hIE5vdCBWYWxpZGF0 +ZWQxKTAnBgNVBAMTIFN0YXJ0Q29tIEZyZWUgQ2VydGlmaWNhdGUgTWVtYmVyMSkw +JwYJKoZIhvcNAQkBFhpzdGFydHNzbC5jb21Ac2NoaWxkYmFjaC5kZTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALA4dtu1FlTbhZQ+M9pyTFte40zotk3J +fqvEkDpWLBz3orN4SkMAUDOgTWdvNm+PakX2tEsZGD+nnWzkO3NI8x5ZhrOF3HwW +zeCaYzaDjhhRw4G1K2FKVBHK6TUkZ/LoLimVMsV8AbsAWWlmxTCXB1vyoiOMISiK +rMFsRFAQdtB5wHVuZdtVnO1++yLfQo+ckuTT35RBztpcP63GkVyo0ucFC8DxNQOA ++k8cEIVrfsr9PrLUlhTx+P5jQAaURqcVf0IAR6bNV7WdJmli7yjlWeQm7ymh8YFE +6xsy16TO24GQWR5waBFRqGaJPqRnpAdhiUc+1nbNGuaOYYCD6kATVycCAwEAAaOC +A5IwggOOMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQGCCsGAQUF +BwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQUY819Gv9zSrHpLGP3e9WbCJfzEgAwJQYD +VR0RBB4wHIEac3RhcnRzc2wuY29tQHNjaGlsZGJhY2guZGUwgagGA1UdIwSBoDCB +nYAUU3Ltkpzg2ssBXHx+ljVO8tS4UYKhgYGkfzB9MQswCQYDVQQGEwJJTDEWMBQG +A1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2Vy +dGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHmCAQ0wggFHBgNVHSAEggE+MIIBOjCCATYGCysGAQQBgbU3AQIA +MIIBJTAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5 +LnBkZjA0BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50ZXJt +ZWRpYXRlLnBkZjCBvAYIKwYBBQUHAgIwga8wFBYNU3RhcnRDb20gTHRkLjADAgEB +GoGWTGltaXRlZCBMaWFiaWxpdHksIHJlYWQgdGhlIHNlY3Rpb24gKkxlZ2FsIExp +bWl0YXRpb25zKiBvZiB0aGUgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgUG9saWN5IGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9w +b2xpY3kucGRmMGMGA1UdHwRcMFowK6ApoCeGJWh0dHA6Ly93d3cuc3RhcnRzc2wu +Y29tL2NydHUxLWNybC5jcmwwK6ApoCeGJWh0dHA6Ly9jcmwuc3RhcnRzc2wuY29t +L2NydHUxLWNybC5jcmwwgY4GCCsGAQUFBwEBBIGBMH8wOQYIKwYBBQUHMAGGLWh0 +dHA6Ly9vY3NwLnN0YXJ0c3NsLmNvbS9zdWIvY2xhc3MxL2NsaWVudC9jYTBCBggr +BgEFBQcwAoY2aHR0cDovL3d3dy5zdGFydHNzbC5jb20vY2VydHMvc3ViLmNsYXNz +MS5jbGllbnQuY2EuY3J0MCMGA1UdEgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wu +Y29tLzANBgkqhkiG9w0BAQUFAAOCAQEAaJgOEPjkRcKMVbbofA+GVlc1iMR+kJHk +bQNmojAmgDL1pXabFuNZqx7FVUBk7MQQOUaC1vd3RbyOE+AzdXaq7/pFk5/Zxalv +xn4gSA/wGHDB0oAi+efWQy7ZsskIOWkjg7tKqy0KCRlA6ZlQhL0aTFZe2X6fu/fI +eebFb6gQ3vhOwIgAGz7CZMjRBqPjiqpPrD/Uac2LORUdLw/wowTV1YBnNwsZGnzJ +/WquZB7n/yJjaSqhSL0s37AOg3TvXEXYS2GpoA02lQKfq3Lo86piAxSh7aJf7dpT +JMVnE6/+5FyjpP8Hpl8FARv1m51c9n788cDzS4/qFibKf9s6yt1/0A== +-----END CERTIFICATE----- diff --git a/core/out/test/resources/org/pivxj/protocols/payments/README b/core/out/test/resources/org/pivxj/protocols/payments/README new file mode 100644 index 000000000..024eb16d4 --- /dev/null +++ b/core/out/test/resources/org/pivxj/protocols/payments/README @@ -0,0 +1,6 @@ +# Create key store for CA certificate +keytool -keystore test-cacerts -importcert -file test-cacert.pem -alias test-cacert -deststorepass password + +# Create key store for certificate and private key +openssl pkcs12 -export -in test-valid-cert.pem -inkey test-valid-key.pem -passin pass:password -out test-valid.p12 -passout pass:password -name test-valid +keytool -importkeystore -deststorepass password -destkeypass password -destkeystore test-valid-cert -srckeystore test-valid.p12 -srcstoretype PKCS12 -srcstorepass password -alias test-valid diff --git a/core/out/test/resources/org/pivxj/protocols/payments/pki_test.bitcoinpaymentrequest b/core/out/test/resources/org/pivxj/protocols/payments/pki_test.bitcoinpaymentrequest new file mode 100644 index 000000000..a7390377d Binary files /dev/null and b/core/out/test/resources/org/pivxj/protocols/payments/pki_test.bitcoinpaymentrequest differ diff --git a/core/out/test/resources/org/pivxj/protocols/payments/test-cacert.key b/core/out/test/resources/org/pivxj/protocols/payments/test-cacert.key new file mode 100644 index 000000000..0fd868076 --- /dev/null +++ b/core/out/test/resources/org/pivxj/protocols/payments/test-cacert.key @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,621C9B6A0E9C192A + +zj5A0/qeYJ5rmvJqcNoQxaUyEonVZQgLj9Jxw76Wvc1kIMNXsT7MGq2jHaDaUMVd +LZDhRgNtirGVdfMFvsNGMB+F1SDq3Dftn/w1jKsNRwCXR958r7ciYp37ohldTEuX +0rPQfltHQHkwpCDfi7xOQa06wdSA+Ke8Sek9u77RRhT+nEWOLwJHaIyIbSQr835q +bcdW7oTFpAj7OQnEgpKMi2fU9t89N4X+F3foarfSwWGP+e8o9J7/UKKmrWGkB30Q +H3U4CbZTXP07ti+ALh86/UaBdaZdDp/pXcJK9OyRSUw693NutSRFw5bXcbobessG +lRcgJ5lrKy3F4WhyZMCQNTgr3LzymVn4DkBI3aNCI3a3hbIUi6BRyLF2zUZan5Pl +IhsTQM4HLGpuq1AfbWwPvSWoTh+uI9qM9Fenc9kwZvkiMYDf+7kiY6Pt0e8gg16j +QQoemZeI+TivyBVerUPV1j+0eBru6ogdxiWoBmZFTFjwpqObV05Zm1BxVAjp3x3+ +q2gzaYdV/Gca0IaHnmqlZQHwWv5Z0+79bGFta2ThiUR+7Ofgteh0ojlAmAvpHp0n +cy6NNr4T81z6QpsHM1zeKbiuUgLlCchwEH0fCsHl0u/EJ7i+4bbugyTdAUiULqxH +OpHU2FpuNvSS6BZc2fCmdPflG9yP1jOoAEKb7bcdPRfiJoyMf/ngNaSXsrjzs7NA +Z2fZyKC45wtmfpfcQuHP+svWafDx3DCNhQ7Wo7YFBFacV242cjLaYnkgy8XHFHjM +KW1Wct5Xg5FEnEcyhczLTZbylSwap9vTAk65cUjLmp/7fE8pLKGfvdRA6VLfbJQ/ +lnJvBI8valjtCfEMC8s5dNcsn7ISFyTzKMaxjs8DxBRg5eKwr/BPVeXkP21Cf+sO +OUAZcgOBJxhb/MQ68Rx2pcjTbmOG81LINkCrwfNGez1gVg3CELneIZGi2ZSn2s5r +tFXVJvCrUpSGvx3IC4xKXJ6R6euBE7JdxG0J8aizytlorEhSk294ksupEQUjdeEW +RPHqp3LqVlRO1tFYZQrwZs26vgXa15LYXq63EewUCIM4TjNTm3FuovW1d11mCiFl +dljkCMGYN+14YnHzd3G96JGxkZUlOCFN+y5Xa2I1x4jkUCvdD3gfMXBxGptkyT+K +DlJJQ8JMrRMhRu2K/t8LVorPyHGoYRUoaXLgx/x8xgazLiA8vY8sCJ9A+YM78Bjd +ytGQeuUzt5syAXuW3s6AStuMH0Scos674i0qcsd2j5TY4Td6+svuCluvKvsmWW4/ +pDPNW5c/TXMVU3J9H1AnuHoNQ7rX9++qbptOQHXsf2MY9HtgzYDuY4i/vmJFtTVe +zbUqh3trTJ/ihvzq6to6b/AZqsljit7PzLBkXlmQozvlAqy3ycWvyFnVjPgjyEm5 +9C3uwnD4hiXfmf46nMv+YkaAhYESavLKkbcdQ+cONYnQ2zTJJaKLMHbl+TI5Tjph +azuTmQKG72/V8aQBbIVgppoN7FtlIAvZl+k48uZAj2uN7/15ceIBP9Vh0O07EmNa +birsXDWm2naQNKYBGrbMCRol8NSnqT3MvG075uZ0mXcyKO39YNxJmdfYgQohTosC +dYD20mqdYKbygtvjfucXJoEUJKcB2I795XeZoZl32JgoE0h7q7gLtnUrSnyw8YVo +C4s4DL9wXaxuReXQVGczHwPtW9X1Hjm07iuBbkb10Adbl03bd+5J4XbVtdjlshOw +YVXHXLY5NfS+hu6jErxNNDjHY0lT+rwif4S9eBjepnpXyZWQRwoJ3SooyK9D6YR4 +4wpxc4JEglXOPtzqjErGBYxZZdZSD04eVjDV22+Hf6GVcFyEjEFqaEMl0NzOyi+n +Svf7ixeo6x3xfUnx9T0mv4YqP62t/RkM9nkFcwKQkZ59cNw+/7XD6DgxO6ev5/25 +DemqP83feR2MEgwwfh2txi9N5WM0/zJhfxbyv3hImfKa6Br2UoC3O57uKyRVEQ+7 +dP6wOjJ5swe6kCvk4yj60V/Vr0urVW8xC6IN+2FIfiocJS8mIY5NZRd0CbNkiuZP +ntVJwgQ2xwbIOp/+4Od3vBI6ujWmXyaR8k9EpnhM5wP7fb38PprxKdLjRLuGEPNP +Z+Cov09oh6cR1GrBqM/gH3mggLZgO4h4WD8gKFkmepXit9Xcigd0ytXfDWE2jgx8 +du41SrDqYOwVwbkarRA9NDf5Db9dm/vNnw31/cVwUq10Mb7QD/wXPwSIpQbvyJBt +1tYcH983hNFKQddNRm+hBP9Vz+nhHPneGjTKU6SxDMcQ3Baep3DwRPl9r9x09z0Y +xkBUcCUZ5q+wgFepXYCB9lOBtATnFViFnTdvQuXqvLeOWDjAHBT3TDxzaB+vJMal +qD+S4x3BSO64ZIxepl4CHa1Zajp8qzVWYh1rBlTL/Uqjg3O5MuvfO0DGpRCn/6t0 +CpJF/bcmRBogOvNM7zjMcDSRtIMOVgsfCqqIyXpvA5yZqocwd2o8tdiG0hKQxASV +qxvTNTXQZut/xD0enHtDaoYYTHj2c6Ayu7DZfPHvcx40mdYjGI9ZKvXcSrYkfTqc +mugXa29jah+1abRWfokV/0S9xuFTkBGPt8/Byw4oT7e8nkJGFQorObqj4gSJhCOf +/+wTqhkappSHM0mkF72mNqJLWqMPGFnUq/5x5hws3qNgDbk48TDMWKyM3UEn8IUb +zQViQNNVRxtZGTXO8Yhpqv/LgD3I9nk99xFALcBncrkrBIK121pVVM1Yf4TjsdCx +zqykQY0cghi6zVE8wkDj6f7Sh8uYe5fP1gorp0rzxyKQh1RwsI6po3GmAA12aIiX +3Z5XHE3qL7zeaiN0Mc8EkA7zVVI5Id8Wssdmf3TWRG36J99qzUWxiMsL3lKvgi9d +X5Bbxo5l+3hdC31jqrt1w2vemr4bSs5SyBQMnBL2HEsbk7PWzbxD/NdKWYecyYAz +OtFy7vAtURxYvS0IbX4uRoeAehyJ7+Ak7tulM4MG9O+w/WseBV7VS1beI9NLZg3S +tLLTc/EyLsR9us5AMjDeuIoOSN4mEtFzlq72nyVbUGELN7fXl8Hv75QYh7/SUZt4 +nH+DbSxMon0SybKTywuwuSoFo/K2lwfyZvNb4R0ImlPpJobANG0knKgzKCTA+m5P +-----END RSA PRIVATE KEY----- diff --git a/core/out/test/resources/org/pivxj/protocols/payments/test-cacerts b/core/out/test/resources/org/pivxj/protocols/payments/test-cacerts new file mode 100644 index 000000000..c10128f6f Binary files /dev/null and b/core/out/test/resources/org/pivxj/protocols/payments/test-cacerts differ diff --git a/core/out/test/resources/org/pivxj/protocols/payments/test-expired-cert b/core/out/test/resources/org/pivxj/protocols/payments/test-expired-cert new file mode 100644 index 000000000..a6d7ac533 Binary files /dev/null and b/core/out/test/resources/org/pivxj/protocols/payments/test-expired-cert differ diff --git a/core/out/test/resources/org/pivxj/protocols/payments/test-valid-cert b/core/out/test/resources/org/pivxj/protocols/payments/test-valid-cert new file mode 100644 index 000000000..e9f006710 Binary files /dev/null and b/core/out/test/resources/org/pivxj/protocols/payments/test-valid-cert differ diff --git a/core/out/test/resources/org/pivxj/script/script_invalid.json b/core/out/test/resources/org/pivxj/script/script_invalid.json new file mode 100644 index 000000000..75de4716f --- /dev/null +++ b/core/out/test/resources/org/pivxj/script/script_invalid.json @@ -0,0 +1,377 @@ +[ +["", "DEPTH", "P2SH,STRICTENC", "Test the test: we should have an empty stack after scriptSig evaluation"], +[" ", "DEPTH", "P2SH,STRICTENC", "and multiple spaces should not change that."], +[" ", "DEPTH", "P2SH,STRICTENC"], +[" ", "DEPTH", "P2SH,STRICTENC"], + +["", "", "P2SH,STRICTENC"], +["", "NOP", "P2SH,STRICTENC"], +["", "NOP DEPTH", "P2SH,STRICTENC"], +["NOP", "", "P2SH,STRICTENC"], +["NOP", "DEPTH", "P2SH,STRICTENC"], +["NOP","NOP", "P2SH,STRICTENC"], +["NOP","NOP DEPTH", "P2SH,STRICTENC"], + +["DEPTH", "", "P2SH,STRICTENC"], + +["0x4c01","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA1 with not enough bytes"], +["0x4d0200ff","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA2 with not enough bytes"], +["0x4e03000000ffff","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA4 with not enough bytes"], + +["1", "IF 0x50 ENDIF 1", "P2SH,STRICTENC", "0x50 is reserved"], +["0x52", "0x5f ADD 0x60 EQUAL", "P2SH,STRICTENC", "0x51 through 0x60 push 1 through 16 onto stack"], +["0","NOP", "P2SH,STRICTENC"], +["1", "IF VER ELSE 1 ENDIF", "P2SH,STRICTENC", "VER non-functional"], +["0", "IF VERIF ELSE 1 ENDIF", "P2SH,STRICTENC", "VERIF illegal everywhere"], +["0", "IF ELSE 1 ELSE VERIF ENDIF", "P2SH,STRICTENC", "VERIF illegal everywhere"], +["0", "IF VERNOTIF ELSE 1 ENDIF", "P2SH,STRICTENC", "VERNOTIF illegal everywhere"], +["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "P2SH,STRICTENC", "VERNOTIF illegal everywhere"], + +["1 IF", "1 ENDIF", "P2SH,STRICTENC", "IF/ENDIF can't span scriptSig/scriptPubKey"], +["1 IF 0 ENDIF", "1 ENDIF", "P2SH,STRICTENC"], +["1 ELSE 0 ENDIF", "1", "P2SH,STRICTENC"], +["0 NOTIF", "123", "P2SH,STRICTENC"], + +["0", "DUP IF ENDIF", "P2SH,STRICTENC"], +["0", "IF 1 ENDIF", "P2SH,STRICTENC"], +["0", "DUP IF ELSE ENDIF", "P2SH,STRICTENC"], +["0", "IF 1 ELSE ENDIF", "P2SH,STRICTENC"], +["0", "NOTIF ELSE 1 ENDIF", "P2SH,STRICTENC"], + +["0 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], + +["0 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], + +["1", "IF RETURN ELSE ELSE 1 ENDIF", "P2SH,STRICTENC", "Multiple ELSEs"], +["1", "IF 1 ELSE ELSE RETURN ENDIF", "P2SH,STRICTENC"], + +["1", "ENDIF", "P2SH,STRICTENC", "Malformed IF/ELSE/ENDIF sequence"], +["1", "ELSE ENDIF", "P2SH,STRICTENC"], +["1", "ENDIF ELSE", "P2SH,STRICTENC"], +["1", "ENDIF ELSE IF", "P2SH,STRICTENC"], +["1", "IF ELSE ENDIF ELSE", "P2SH,STRICTENC"], +["1", "IF ELSE ENDIF ELSE ENDIF", "P2SH,STRICTENC"], +["1", "IF ENDIF ENDIF", "P2SH,STRICTENC"], +["1", "IF ELSE ELSE ENDIF ENDIF", "P2SH,STRICTENC"], + +["1", "RETURN", "P2SH,STRICTENC"], +["1", "DUP IF RETURN ENDIF", "P2SH,STRICTENC"], + +["1", "RETURN 'data'", "P2SH,STRICTENC", "canonical prunable txout format"], +["0 IF", "RETURN ENDIF 1", "P2SH,STRICTENC", "still prunable because IF/ENDIF can't span scriptSig/scriptPubKey"], + +["0", "VERIFY 1", "P2SH,STRICTENC"], +["1", "VERIFY", "P2SH,STRICTENC"], +["1", "VERIFY 0", "P2SH,STRICTENC"], + +["1 TOALTSTACK", "FROMALTSTACK 1", "P2SH,STRICTENC", "alt stack not shared between sig/pubkey"], + +["IFDUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["DUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["1", "DUP 1 ADD 2 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], +["NOP", "NIP", "P2SH,STRICTENC"], +["NOP", "1 NIP", "P2SH,STRICTENC"], +["NOP", "1 0 NIP", "P2SH,STRICTENC"], +["NOP", "OVER 1", "P2SH,STRICTENC"], +["1", "OVER", "P2SH,STRICTENC"], +["0 1", "OVER DEPTH 3 EQUALVERIFY", "P2SH,STRICTENC"], +["19 20 21", "PICK 19 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["NOP", "0 PICK", "P2SH,STRICTENC"], +["1", "-1 PICK", "P2SH,STRICTENC"], +["19 20 21", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["19 20 21", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["19 20 21", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["NOP", "0 ROLL", "P2SH,STRICTENC"], +["1", "-1 ROLL", "P2SH,STRICTENC"], +["19 20 21", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["19 20 21", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["19 20 21", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["NOP", "ROT 1", "P2SH,STRICTENC"], +["NOP", "1 ROT 1", "P2SH,STRICTENC"], +["NOP", "1 2 ROT 1", "P2SH,STRICTENC"], +["NOP", "0 1 2 ROT", "P2SH,STRICTENC"], +["NOP", "SWAP 1", "P2SH,STRICTENC"], +["1", "SWAP 1", "P2SH,STRICTENC"], +["0 1", "SWAP 1 EQUALVERIFY", "P2SH,STRICTENC"], +["NOP", "TUCK 1", "P2SH,STRICTENC"], +["1", "TUCK 1", "P2SH,STRICTENC"], +["1 0", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "P2SH,STRICTENC"], +["NOP", "2DUP 1", "P2SH,STRICTENC"], +["1", "2DUP 1", "P2SH,STRICTENC"], +["NOP", "3DUP 1", "P2SH,STRICTENC"], +["1", "3DUP 1", "P2SH,STRICTENC"], +["1 2", "3DUP 1", "P2SH,STRICTENC"], +["NOP", "2OVER 1", "P2SH,STRICTENC"], +["1", "2 3 2OVER 1", "P2SH,STRICTENC"], +["NOP", "2SWAP 1", "P2SH,STRICTENC"], +["1", "2 3 2SWAP 1", "P2SH,STRICTENC"], + +["'a' 'b'", "CAT", "P2SH,STRICTENC", "CAT disabled"], +["'a' 'b' 0", "IF CAT ELSE 1 ENDIF", "P2SH,STRICTENC", "CAT disabled"], +["'abc' 1 1", "SUBSTR", "P2SH,STRICTENC", "SUBSTR disabled"], +["'abc' 1 1 0", "IF SUBSTR ELSE 1 ENDIF", "P2SH,STRICTENC", "SUBSTR disabled"], +["'abc' 2 0", "IF LEFT ELSE 1 ENDIF", "P2SH,STRICTENC", "LEFT disabled"], +["'abc' 2 0", "IF RIGHT ELSE 1 ENDIF", "P2SH,STRICTENC", "RIGHT disabled"], + +["NOP", "SIZE 1", "P2SH,STRICTENC"], + +["'abc'", "IF INVERT ELSE 1 ENDIF", "P2SH,STRICTENC", "INVERT disabled"], +["1 2 0 IF AND ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "AND disabled"], +["1 2 0 IF OR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "OR disabled"], +["1 2 0 IF XOR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "XOR disabled"], +["2 0 IF 2MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "2MUL disabled"], +["2 0 IF 2DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "2DIV disabled"], +["2 2 0 IF MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "MUL disabled"], +["2 2 0 IF DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DIV disabled"], +["2 2 0 IF MOD ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "MOD disabled"], +["2 2 0 IF LSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "LSHIFT disabled"], +["2 2 0 IF RSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "RSHIFT disabled"], + +["0 1","EQUAL", "P2SH,STRICTENC"], +["1 1 ADD", "0 EQUAL", "P2SH,STRICTENC"], +["11 1 ADD 12 SUB", "11 EQUAL", "P2SH,STRICTENC"], + +["2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "arithmetic operands must be in range [-2^31...2^31] "], +["-2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "arithmetic operands must be in range [-2^31...2^31] "], +["2147483647 DUP ADD", "4294967294 NUMEQUAL", "P2SH,STRICTENC", "NUMEQUAL must be in numeric range"], +["'abcdef' NOT", "0 EQUAL", "P2SH,STRICTENC", "NOT is an arithmetic operand"], + +["2 DUP MUL", "4 EQUAL", "P2SH,STRICTENC", "disabled"], +["2 DUP DIV", "1 EQUAL", "P2SH,STRICTENC", "disabled"], +["2 2MUL", "4 EQUAL", "P2SH,STRICTENC", "disabled"], +["2 2DIV", "1 EQUAL", "P2SH,STRICTENC", "disabled"], +["7 3 MOD", "1 EQUAL", "P2SH,STRICTENC", "disabled"], +["2 2 LSHIFT", "8 EQUAL", "P2SH,STRICTENC", "disabled"], +["2 1 RSHIFT", "1 EQUAL", "P2SH,STRICTENC", "disabled"], + +["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "P2SH,STRICTENC"], +["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_11' EQUAL", "P2SH,STRICTENC"], + +["0x50","1", "P2SH,STRICTENC", "opcode 0x50 is reserved"], +["1", "IF 0xba ELSE 1 ENDIF", "P2SH,STRICTENC", "opcodes above NOP10 invalid if executed"], +["1", "IF 0xbb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xbf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xc9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xca ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xcb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xcc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xcd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xce ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xcf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xd9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xda ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xdb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xdc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xdd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xde ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xdf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xe9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xea ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xeb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xec ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xed ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xee ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xef ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xf9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xfa ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xfb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xfc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xfd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xfe ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 0xff ELSE 1 ENDIF", "P2SH,STRICTENC"], + +["1 IF 1 ELSE", "0xff ENDIF", "P2SH,STRICTENC", "invalid because scriptSig and scriptPubKey are processed separately"], + +["NOP", "RIPEMD160", "P2SH,STRICTENC"], +["NOP", "SHA1", "P2SH,STRICTENC"], +["NOP", "SHA256", "P2SH,STRICTENC"], +["NOP", "HASH160", "P2SH,STRICTENC"], +["NOP", "HASH256", "P2SH,STRICTENC"], + +["NOP", +"'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'", +"P2SH,STRICTENC", +">520 byte push"], +["0", +"IF 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' ENDIF 1", +"P2SH,STRICTENC", +">520 byte push in non-executed IF branch"], +["1", +"0x61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", +"P2SH,STRICTENC", +">201 opcodes executed. 0x61 is NOP"], +["0", +"IF 0x6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 ENDIF 1", +"P2SH,STRICTENC", +">201 opcodes including non-executed IF branch. 0x61 is NOP"], +["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"1 2 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"P2SH,STRICTENC", +">1,000 stack size (0x6f is 3DUP)"], +["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"1 TOALTSTACK 2 TOALTSTACK 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"P2SH,STRICTENC", +">1,000 stack+altstack size"], +["NOP", +"0 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", +"P2SH,STRICTENC", +"10,001-byte scriptPubKey"], + +["NOP1","NOP10", "P2SH,STRICTENC"], + +["1","VER", "P2SH,STRICTENC", "OP_VER is reserved"], +["1","VERIF", "P2SH,STRICTENC", "OP_VERIF is reserved"], +["1","VERNOTIF", "P2SH,STRICTENC", "OP_VERNOTIF is reserved"], +["1","RESERVED", "P2SH,STRICTENC", "OP_RESERVED is reserved"], +["1","RESERVED1", "P2SH,STRICTENC", "OP_RESERVED1 is reserved"], +["1","RESERVED2", "P2SH,STRICTENC", "OP_RESERVED2 is reserved"], +["1","0xba", "P2SH,STRICTENC", "0xba == OP_NOP10 + 1"], + +["2147483648", "1ADD 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers"], +["2147483648", "NEGATE 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers"], +["-2147483648", "1ADD 1", "P2SH,STRICTENC", "Because we use a sign bit, -2147483648 is also 5 bytes"], +["2147483647", "1ADD 1SUB 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], +["2147483648", "1SUB 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers, even if the result is 4-bytes"], + +["2147483648 1", "BOOLOR 1", "P2SH,STRICTENC", "We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)"], +["2147483648 1", "BOOLAND 1", "P2SH,STRICTENC", "We cannot do BOOLAND on 5-byte integers"], + +["1", "1 ENDIF", "P2SH,STRICTENC", "ENDIF without IF"], +["1", "IF 1", "P2SH,STRICTENC", "IF without ENDIF"], +["1 IF 1", "ENDIF", "P2SH,STRICTENC", "IFs don't carry over"], + +["NOP", "IF 1 ENDIF", "P2SH,STRICTENC", "The following tests check the if(stack.size() < N) tests in each opcode"], +["NOP", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "They are here to catch copy-and-paste errors"], +["NOP", "VERIFY 1", "P2SH,STRICTENC", "Most of them are duplicated elsewhere,"], + +["NOP", "TOALTSTACK 1", "P2SH,STRICTENC", "but, hey, more is always better, right?"], +["1", "FROMALTSTACK", "P2SH,STRICTENC"], +["1", "2DROP 1", "P2SH,STRICTENC"], +["1", "2DUP", "P2SH,STRICTENC"], +["1 1", "3DUP", "P2SH,STRICTENC"], +["1 1 1", "2OVER", "P2SH,STRICTENC"], +["1 1 1 1 1", "2ROT", "P2SH,STRICTENC"], +["1 1 1", "2SWAP", "P2SH,STRICTENC"], +["NOP", "IFDUP 1", "P2SH,STRICTENC"], +["NOP", "DROP 1", "P2SH,STRICTENC"], +["NOP", "DUP 1", "P2SH,STRICTENC"], +["1", "NIP", "P2SH,STRICTENC"], +["1", "OVER", "P2SH,STRICTENC"], +["1 1 1 3", "PICK", "P2SH,STRICTENC"], +["0", "PICK 1", "P2SH,STRICTENC"], +["1 1 1 3", "ROLL", "P2SH,STRICTENC"], +["0", "ROLL 1", "P2SH,STRICTENC"], +["1 1", "ROT", "P2SH,STRICTENC"], +["1", "SWAP", "P2SH,STRICTENC"], +["1", "TUCK", "P2SH,STRICTENC"], + +["NOP", "SIZE 1", "P2SH,STRICTENC"], + +["1", "EQUAL 1", "P2SH,STRICTENC"], +["1", "EQUALVERIFY 1", "P2SH,STRICTENC"], + +["NOP", "1ADD 1", "P2SH,STRICTENC"], +["NOP", "1SUB 1", "P2SH,STRICTENC"], +["NOP", "NEGATE 1", "P2SH,STRICTENC"], +["NOP", "ABS 1", "P2SH,STRICTENC"], +["NOP", "NOT 1", "P2SH,STRICTENC"], +["NOP", "0NOTEQUAL 1", "P2SH,STRICTENC"], + +["1", "ADD", "P2SH,STRICTENC"], +["1", "SUB", "P2SH,STRICTENC"], +["1", "BOOLAND", "P2SH,STRICTENC"], +["1", "BOOLOR", "P2SH,STRICTENC"], +["1", "NUMEQUAL", "P2SH,STRICTENC"], +["1", "NUMEQUALVERIFY 1", "P2SH,STRICTENC"], +["1", "NUMNOTEQUAL", "P2SH,STRICTENC"], +["1", "LESSTHAN", "P2SH,STRICTENC"], +["1", "GREATERTHAN", "P2SH,STRICTENC"], +["1", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["1", "GREATERTHANOREQUAL", "P2SH,STRICTENC"], +["1", "MIN", "P2SH,STRICTENC"], +["1", "MAX", "P2SH,STRICTENC"], +["1 1", "WITHIN", "P2SH,STRICTENC"], + +["NOP", "RIPEMD160 1", "P2SH,STRICTENC"], +["NOP", "SHA1 1", "P2SH,STRICTENC"], +["NOP", "SHA256 1", "P2SH,STRICTENC"], +["NOP", "HASH160 1", "P2SH,STRICTENC"], +["NOP", "HASH256 1", "P2SH,STRICTENC"], + +["", +"0 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG", +"P2SH,STRICTENC", +"202 CHECKMULTISIGS, fails due to 201 op limit"], + +["1", +"0 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY", +"P2SH,STRICTENC"], + +["", +"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG", +"P2SH,STRICTENC", +"Fails due to 201 sig op limit"], + +["1", +"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY", +"P2SH,STRICTENC"], + + +["0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21", "21 CHECKMULTISIG 1", "P2SH,STRICTENC", "nPubKeys > 20"], +["0 'sig' 1 0", "CHECKMULTISIG 1", "P2SH,STRICTENC", "nSigs > nPubKeys"], + + +["NOP 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "Tests for Script.IsPushOnly()"], +["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC"], + +["0 0x01 0x50", "HASH160 0x14 0xece424a6bb6ddf4db592c0faed60685047a361b1 EQUAL", "P2SH,STRICTENC", "OP_RESERVED in P2SH should fail"], +["0 0x01 VER", "HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "P2SH,STRICTENC", "OP_VER in P2SH should fail"], + +["0x00", "'00' EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"] +] diff --git a/core/out/test/resources/org/pivxj/script/script_valid.json b/core/out/test/resources/org/pivxj/script/script_valid.json new file mode 100644 index 000000000..3b446d2f8 --- /dev/null +++ b/core/out/test/resources/org/pivxj/script/script_valid.json @@ -0,0 +1,525 @@ +[ +["", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "Test the test: we should have an empty stack after scriptSig evaluation"], +[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC", "and multiple spaces should not change that."], +[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +[" ", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC", "Similarly whitespace around and between symbols"], +["1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], +[" 1 2", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], +["1 2 ", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], +[" 1 2 ", "2 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], + +["1", "", "P2SH,STRICTENC"], +["0x02 0x01 0x00", "", "P2SH,STRICTENC", "all bytes are significant, not only the last one"], +["0x09 0x00000000 0x00000000 0x10", "", "P2SH,STRICTENC", "equals zero when cast to Int64"], + +["0x01 0x0b", "11 EQUAL", "P2SH,STRICTENC", "push 1 byte"], +["0x02 0x417a", "'Az' EQUAL", "P2SH,STRICTENC"], +["0x4b 0x417a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a", + "'Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' EQUAL", "P2SH,STRICTENC", "push 75 bytes"], + +["0x4c 0x01 0x07","7 EQUAL", "P2SH,STRICTENC", "0x4c is OP_PUSHDATA1"], +["0x4d 0x0100 0x08","8 EQUAL", "P2SH,STRICTENC", "0x4d is OP_PUSHDATA2"], +["0x4e 0x01000000 0x09","9 EQUAL", "P2SH,STRICTENC", "0x4e is OP_PUSHDATA4"], + +["0x4c 0x00","0 EQUAL", "P2SH,STRICTENC"], +["0x4d 0x0000","0 EQUAL", "P2SH,STRICTENC"], +["0x4e 0x00000000","0 EQUAL", "P2SH,STRICTENC"], +["0x4f 1000 ADD","999 EQUAL", "P2SH,STRICTENC"], +["0", "IF 0x50 ENDIF 1", "P2SH,STRICTENC", "0x50 is reserved (ok if not executed)"], +["0x51", "0x5f ADD 0x60 EQUAL", "P2SH,STRICTENC", "0x51 through 0x60 push 1 through 16 onto stack"], +["1","NOP", "P2SH,STRICTENC"], +["0", "IF VER ELSE 1 ENDIF", "P2SH,STRICTENC", "VER non-functional (ok if not executed)"], +["0", "IF RESERVED RESERVED1 RESERVED2 ELSE 1 ENDIF", "P2SH,STRICTENC", "RESERVED ok in un-executed IF"], + +["1", "DUP IF ENDIF", "P2SH,STRICTENC"], +["1", "IF 1 ENDIF", "P2SH,STRICTENC"], +["1", "DUP IF ELSE ENDIF", "P2SH,STRICTENC"], +["1", "IF 1 ELSE ENDIF", "P2SH,STRICTENC"], +["0", "IF ELSE 1 ENDIF", "P2SH,STRICTENC"], + +["1 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], + +["1 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"], +["1 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], +["0 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"], + +["0", "IF 0 ELSE 1 ELSE 0 ENDIF", "P2SH,STRICTENC", "Multiple ELSE's are valid and executed inverts on each ELSE encountered"], +["1", "IF 1 ELSE 0 ELSE ENDIF", "P2SH,STRICTENC"], +["1", "IF ELSE 0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["1", "IF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "P2SH,STRICTENC"], +["'' 1", "IF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "P2SH,STRICTENC"], + +["1", "NOTIF 0 ELSE 1 ELSE 0 ENDIF", "P2SH,STRICTENC", "Multiple ELSE's are valid and execution inverts on each ELSE encountered"], +["0", "NOTIF 1 ELSE 0 ELSE ENDIF", "P2SH,STRICTENC"], +["0", "NOTIF ELSE 0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "NOTIF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "P2SH,STRICTENC"], +["'' 0", "NOTIF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "P2SH,STRICTENC"], + +["0", "IF 1 IF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 1 IF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "P2SH,STRICTENC", "Nested ELSE ELSE"], +["1", "NOTIF 0 NOTIF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 0 NOTIF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "P2SH,STRICTENC"], + +["0", "IF RETURN ENDIF 1", "P2SH,STRICTENC", "RETURN only works if executed"], + +["1 1", "VERIFY", "P2SH,STRICTENC"], +["1 0x05 0x01 0x00 0x00 0x00 0x00", "VERIFY", "P2SH,STRICTENC", "values >4 bytes can be cast to boolean"], +["1 0x01 0x80", "IF 0 ENDIF", "P2SH,STRICTENC", "negative 0 is false"], + +["10 0 11 TOALTSTACK DROP FROMALTSTACK", "ADD 21 EQUAL", "P2SH,STRICTENC"], +["'gavin_was_here' TOALTSTACK 11 FROMALTSTACK", "'gavin_was_here' EQUALVERIFY 11 EQUAL", "P2SH,STRICTENC"], + +["0 IFDUP", "DEPTH 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], +["1 IFDUP", "DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], +["0x05 0x0100000000 IFDUP", "DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUAL", "P2SH,STRICTENC", "IFDUP dups non ints"], +["0 DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], +["0 1", "NIP", "P2SH,STRICTENC"], +["1 0", "OVER DEPTH 3 EQUALVERIFY", "P2SH,STRICTENC"], +["22 21 20", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "ROT 22 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "ROT DROP 20 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "ROT DROP DROP 21 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "ROT ROT 21 EQUAL", "P2SH,STRICTENC"], +["22 21 20", "ROT ROT ROT 20 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 24 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT DROP 25 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2DROP 20 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2DROP DROP 21 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2DROP 2DROP 22 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2DROP 2DROP DROP 23 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2ROT 22 EQUAL", "P2SH,STRICTENC"], +["25 24 23 22 21 20", "2ROT 2ROT 2ROT 20 EQUAL", "P2SH,STRICTENC"], +["1 0", "SWAP 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], +["0 1", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "P2SH,STRICTENC"], +["13 14", "2DUP ROT EQUALVERIFY EQUAL", "P2SH,STRICTENC"], +["-1 0 1 2", "3DUP DEPTH 7 EQUALVERIFY ADD ADD 3 EQUALVERIFY 2DROP 0 EQUALVERIFY", "P2SH,STRICTENC"], +["1 2 3 5", "2OVER ADD ADD 8 EQUALVERIFY ADD ADD 6 EQUAL", "P2SH,STRICTENC"], +["1 3 5 7", "2SWAP ADD 4 EQUALVERIFY ADD 12 EQUAL", "P2SH,STRICTENC"], +["0", "SIZE 0 EQUAL", "P2SH,STRICTENC"], +["1", "SIZE 1 EQUAL", "P2SH,STRICTENC"], +["127", "SIZE 1 EQUAL", "P2SH,STRICTENC"], +["128", "SIZE 2 EQUAL", "P2SH,STRICTENC"], +["32767", "SIZE 2 EQUAL", "P2SH,STRICTENC"], +["32768", "SIZE 3 EQUAL", "P2SH,STRICTENC"], +["8388607", "SIZE 3 EQUAL", "P2SH,STRICTENC"], +["8388608", "SIZE 4 EQUAL", "P2SH,STRICTENC"], +["2147483647", "SIZE 4 EQUAL", "P2SH,STRICTENC"], +["2147483648", "SIZE 5 EQUAL", "P2SH,STRICTENC"], +["549755813887", "SIZE 5 EQUAL", "P2SH,STRICTENC"], +["549755813888", "SIZE 6 EQUAL", "P2SH,STRICTENC"], +["9223372036854775807", "SIZE 8 EQUAL", "P2SH,STRICTENC"], +["-1", "SIZE 1 EQUAL", "P2SH,STRICTENC"], +["-127", "SIZE 1 EQUAL", "P2SH,STRICTENC"], +["-128", "SIZE 2 EQUAL", "P2SH,STRICTENC"], +["-32767", "SIZE 2 EQUAL", "P2SH,STRICTENC"], +["-32768", "SIZE 3 EQUAL", "P2SH,STRICTENC"], +["-8388607", "SIZE 3 EQUAL", "P2SH,STRICTENC"], +["-8388608", "SIZE 4 EQUAL", "P2SH,STRICTENC"], +["-2147483647", "SIZE 4 EQUAL", "P2SH,STRICTENC"], +["-2147483648", "SIZE 5 EQUAL", "P2SH,STRICTENC"], +["-549755813887", "SIZE 5 EQUAL", "P2SH,STRICTENC"], +["-549755813888", "SIZE 6 EQUAL", "P2SH,STRICTENC"], +["-9223372036854775807", "SIZE 8 EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "SIZE 26 EQUAL", "P2SH,STRICTENC"], + +["42", "SIZE 1 EQUALVERIFY 42 EQUAL", "P2SH,STRICTENC", "SIZE does not consume argument"], + +["2 -2 ADD", "0 EQUAL", "P2SH,STRICTENC"], +["2147483647 -2147483647 ADD", "0 EQUAL", "P2SH,STRICTENC"], +["-1 -1 ADD", "-2 EQUAL", "P2SH,STRICTENC"], + +["0 0","EQUAL", "P2SH,STRICTENC"], +["1 1 ADD", "2 EQUAL", "P2SH,STRICTENC"], +["1 1ADD", "2 EQUAL", "P2SH,STRICTENC"], +["111 1SUB", "110 EQUAL", "P2SH,STRICTENC"], +["111 1 ADD 12 SUB", "100 EQUAL", "P2SH,STRICTENC"], +["0 ABS", "0 EQUAL", "P2SH,STRICTENC"], +["16 ABS", "16 EQUAL", "P2SH,STRICTENC"], +["-16 ABS", "-16 NEGATE EQUAL", "P2SH,STRICTENC"], +["0 NOT", "NOP", "P2SH,STRICTENC"], +["1 NOT", "0 EQUAL", "P2SH,STRICTENC"], +["11 NOT", "0 EQUAL", "P2SH,STRICTENC"], +["0 0NOTEQUAL", "0 EQUAL", "P2SH,STRICTENC"], +["1 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC"], +["111 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC"], +["-111 0NOTEQUAL", "1 EQUAL", "P2SH,STRICTENC"], +["1 1 BOOLAND", "NOP", "P2SH,STRICTENC"], +["1 0 BOOLAND", "NOT", "P2SH,STRICTENC"], +["0 1 BOOLAND", "NOT", "P2SH,STRICTENC"], +["0 0 BOOLAND", "NOT", "P2SH,STRICTENC"], +["16 17 BOOLAND", "NOP", "P2SH,STRICTENC"], +["1 1 BOOLOR", "NOP", "P2SH,STRICTENC"], +["1 0 BOOLOR", "NOP", "P2SH,STRICTENC"], +["0 1 BOOLOR", "NOP", "P2SH,STRICTENC"], +["0 0 BOOLOR", "NOT", "P2SH,STRICTENC"], +["16 17 BOOLOR", "NOP", "P2SH,STRICTENC"], +["11 10 1 ADD", "NUMEQUAL", "P2SH,STRICTENC"], +["11 10 1 ADD", "NUMEQUALVERIFY 1", "P2SH,STRICTENC"], +["11 10 1 ADD", "NUMNOTEQUAL NOT", "P2SH,STRICTENC"], +["111 10 1 ADD", "NUMNOTEQUAL", "P2SH,STRICTENC"], +["11 10", "LESSTHAN NOT", "P2SH,STRICTENC"], +["4 4", "LESSTHAN NOT", "P2SH,STRICTENC"], +["10 11", "LESSTHAN", "P2SH,STRICTENC"], +["-11 11", "LESSTHAN", "P2SH,STRICTENC"], +["-11 -10", "LESSTHAN", "P2SH,STRICTENC"], +["11 10", "GREATERTHAN", "P2SH,STRICTENC"], +["4 4", "GREATERTHAN NOT", "P2SH,STRICTENC"], +["10 11", "GREATERTHAN NOT", "P2SH,STRICTENC"], +["-11 11", "GREATERTHAN NOT", "P2SH,STRICTENC"], +["-11 -10", "GREATERTHAN NOT", "P2SH,STRICTENC"], +["11 10", "LESSTHANOREQUAL NOT", "P2SH,STRICTENC"], +["4 4", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["10 11", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["-11 11", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["-11 -10", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["11 10", "GREATERTHANOREQUAL", "P2SH,STRICTENC"], +["4 4", "GREATERTHANOREQUAL", "P2SH,STRICTENC"], +["10 11", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC"], +["-11 11", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC"], +["-11 -10", "GREATERTHANOREQUAL NOT", "P2SH,STRICTENC"], +["1 0 MIN", "0 NUMEQUAL", "P2SH,STRICTENC"], +["0 1 MIN", "0 NUMEQUAL", "P2SH,STRICTENC"], +["-1 0 MIN", "-1 NUMEQUAL", "P2SH,STRICTENC"], +["0 -2147483647 MIN", "-2147483647 NUMEQUAL", "P2SH,STRICTENC"], +["2147483647 0 MAX", "2147483647 NUMEQUAL", "P2SH,STRICTENC"], +["0 100 MAX", "100 NUMEQUAL", "P2SH,STRICTENC"], +["-100 0 MAX", "0 NUMEQUAL", "P2SH,STRICTENC"], +["0 -2147483647 MAX", "0 NUMEQUAL", "P2SH,STRICTENC"], +["0 0 1", "WITHIN", "P2SH,STRICTENC"], +["1 0 1", "WITHIN NOT", "P2SH,STRICTENC"], +["0 -2147483647 2147483647", "WITHIN", "P2SH,STRICTENC"], +["-1 -100 100", "WITHIN", "P2SH,STRICTENC"], +["11 -100 100", "WITHIN", "P2SH,STRICTENC"], +["-2147483647 -100 100", "WITHIN NOT", "P2SH,STRICTENC"], +["2147483647 -100 100", "WITHIN NOT", "P2SH,STRICTENC"], + +["2147483647 2147483647 SUB", "0 EQUAL", "P2SH,STRICTENC"], +["2147483647 DUP ADD", "4294967294 EQUAL", "P2SH,STRICTENC", ">32 bit EQUAL is valid"], +["2147483647 NEGATE DUP ADD", "-4294967294 EQUAL", "P2SH,STRICTENC"], + +["''", "RIPEMD160 0x14 0x9c1185a5c5e9fc54612808977ee8f548b2258d31 EQUAL", "P2SH,STRICTENC"], +["'a'", "RIPEMD160 0x14 0x0bdc9d2d256b3ee9daae347be6f4dc835a467ffe EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "RIPEMD160 0x14 0xf71c27109c692c1b56bbdceb5b9d2865b3708dbc EQUAL", "P2SH,STRICTENC"], +["''", "SHA1 0x14 0xda39a3ee5e6b4b0d3255bfef95601890afd80709 EQUAL", "P2SH,STRICTENC"], +["'a'", "SHA1 0x14 0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "SHA1 0x14 0x32d10c7b8cf96570ca04ce37f2a19d84240d3a89 EQUAL", "P2SH,STRICTENC"], +["''", "SHA256 0x20 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 EQUAL", "P2SH,STRICTENC"], +["'a'", "SHA256 0x20 0xca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "SHA256 0x20 0x71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 EQUAL", "P2SH,STRICTENC"], +["''", "DUP HASH160 SWAP SHA256 RIPEMD160 EQUAL", "P2SH,STRICTENC"], +["''", "DUP HASH256 SWAP SHA256 SHA256 EQUAL", "P2SH,STRICTENC"], +["''", "NOP HASH160 0x14 0xb472a266d0bd89c13706a4132ccfb16f7c3b9fcb EQUAL", "P2SH,STRICTENC"], +["'a'", "HASH160 NOP 0x14 0x994355199e516ff76c4fa4aab39337b9d84cf12b EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "HASH160 0x4c 0x14 0xc286a1af0947f58d1ad787385b1c2c4a976f9e71 EQUAL", "P2SH,STRICTENC"], +["''", "HASH256 0x20 0x5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456 EQUAL", "P2SH,STRICTENC"], +["'a'", "HASH256 0x20 0xbf5d3affb73efd2ec6c36ad3112dd933efed63c4e1cbffcfa88e2759c144f2d8 EQUAL", "P2SH,STRICTENC"], +["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x4c 0x20 0xca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671 EQUAL", "P2SH,STRICTENC"], + + +["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "P2SH,STRICTENC"], +["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_10' EQUAL", "P2SH,STRICTENC"], + +["0", "IF 0xba ELSE 1 ENDIF", "P2SH,STRICTENC", "opcodes above NOP10 invalid if executed"], +["0", "IF 0xbb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xbf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xc9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xca ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xcb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xcc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xcd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xce ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xcf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xd9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xda ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xdb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xdc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xdd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xde ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xdf ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xe9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xea ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xeb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xec ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xed ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xee ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xef ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf0 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf1 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf2 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf3 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf4 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf5 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf6 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf7 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf8 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xf9 ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xfa ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xfb ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xfc ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xfd ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xfe ELSE 1 ENDIF", "P2SH,STRICTENC"], +["0", "IF 0xff ELSE 1 ENDIF", "P2SH,STRICTENC"], + +["NOP", +"'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'", +"P2SH,STRICTENC", +"520 byte push"], +["1", +"0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", +"P2SH,STRICTENC", +"201 opcodes executed. 0x61 is NOP"], +["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"P2SH,STRICTENC", +"1,000 stack size (0x6f is 3DUP)"], +["1 TOALTSTACK 2 TOALTSTACK 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"1 2 3 4 5 6 7 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"P2SH,STRICTENC", +"1,000 stack size (altstack cleared between scriptSig/scriptPubKey)"], +["'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f", +"'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", +"P2SH,STRICTENC", +"Max-size (10,000-byte), max-push(520 bytes), max-opcodes(201), max stack size(1,000 items). 0x6f is 3DUP, 0x61 is NOP"], + +["0", +"IF 0x5050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050 ENDIF 1", +"P2SH,STRICTENC", +">201 opcodes, but RESERVED (0x50) doesn't count towards opcode limit."], + +["NOP","1", "P2SH,STRICTENC"], + +["1", "0x01 0x01 EQUAL", "P2SH,STRICTENC", "The following is useful for checking implementations of BN_bn2mpi"], +["127", "0x01 0x7F EQUAL", "P2SH,STRICTENC"], +["128", "0x02 0x8000 EQUAL", "P2SH,STRICTENC", "Leave room for the sign bit"], +["32767", "0x02 0xFF7F EQUAL", "P2SH,STRICTENC"], +["32768", "0x03 0x008000 EQUAL", "P2SH,STRICTENC"], +["8388607", "0x03 0xFFFF7F EQUAL", "P2SH,STRICTENC"], +["8388608", "0x04 0x00008000 EQUAL", "P2SH,STRICTENC"], +["2147483647", "0x04 0xFFFFFF7F EQUAL", "P2SH,STRICTENC"], +["2147483648", "0x05 0x0000008000 EQUAL", "P2SH,STRICTENC"], +["549755813887", "0x05 0xFFFFFFFF7F EQUAL", "P2SH,STRICTENC"], +["549755813888", "0x06 0xFFFFFFFF7F EQUAL", "P2SH,STRICTENC"], +["9223372036854775807", "0x08 0xFFFFFFFFFFFFFF7F EQUAL", "P2SH,STRICTENC"], +["-1", "0x01 0x81 EQUAL", "P2SH,STRICTENC", "Numbers are little-endian with the MSB being a sign bit"], +["-127", "0x01 0xFF EQUAL", "P2SH,STRICTENC"], +["-128", "0x02 0x8080 EQUAL", "P2SH,STRICTENC"], +["-32767", "0x02 0xFFFF EQUAL", "P2SH,STRICTENC"], +["-32768", "0x03 0x008080 EQUAL", "P2SH,STRICTENC"], +["-8388607", "0x03 0xFFFFFF EQUAL", "P2SH,STRICTENC"], +["-8388608", "0x04 0x00008080 EQUAL", "P2SH,STRICTENC"], +["-2147483647", "0x04 0xFFFFFFFF EQUAL", "P2SH,STRICTENC"], +["-2147483648", "0x05 0x0000008080 EQUAL", "P2SH,STRICTENC"], +["-4294967295", "0x05 0xFFFFFFFF80 EQUAL", "P2SH,STRICTENC"], +["-549755813887", "0x05 0xFFFFFFFFFF EQUAL", "P2SH,STRICTENC"], +["-549755813888", "0x06 0x000000008080 EQUAL", "P2SH,STRICTENC"], +["-9223372036854775807", "0x08 0xFFFFFFFFFFFFFFFF EQUAL", "P2SH,STRICTENC"], + +["2147483647", "1ADD 2147483648 EQUAL", "P2SH,STRICTENC", "We can do math on 4-byte integers, and compare 5-byte ones"], +["2147483647", "1ADD 1", "P2SH,STRICTENC"], +["-2147483647", "1ADD 1", "P2SH,STRICTENC"], + +["1", "0x02 0x0100 EQUAL NOT", "P2SH,STRICTENC", "Not the same byte array..."], +["1", "0x02 0x0100 NUMEQUAL", "P2SH,STRICTENC", "... but they are numerically equal"], +["11", "0x4c 0x03 0x0b0000 NUMEQUAL", "P2SH,STRICTENC"], +["0", "0x01 0x80 EQUAL NOT", "P2SH,STRICTENC"], +["0", "0x01 0x80 NUMEQUAL", "P2SH,STRICTENC", "Zero numerically equals negative zero"], +["0", "0x02 0x0080 NUMEQUAL", "P2SH,STRICTENC"], +["0x03 0x000080", "0x04 0x00000080 NUMEQUAL", "P2SH,STRICTENC"], +["0x03 0x100080", "0x04 0x10000080 NUMEQUAL", "P2SH,STRICTENC"], +["0x03 0x100000", "0x04 0x10000000 NUMEQUAL", "P2SH,STRICTENC"], + +["NOP", "NOP 1", "P2SH,STRICTENC", "The following tests check the if(stack.size() < N) tests in each opcode"], +["1", "IF 1 ENDIF", "P2SH,STRICTENC", "They are here to catch copy-and-paste errors"], +["0", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "Most of them are duplicated elsewhere,"], +["1", "VERIFY 1", "P2SH,STRICTENC", "but, hey, more is always better, right?"], + +["0", "TOALTSTACK 1", "P2SH,STRICTENC"], +["1", "TOALTSTACK FROMALTSTACK", "P2SH,STRICTENC"], +["0 0", "2DROP 1", "P2SH,STRICTENC"], +["0 1", "2DUP", "P2SH,STRICTENC"], +["0 0 1", "3DUP", "P2SH,STRICTENC"], +["0 1 0 0", "2OVER", "P2SH,STRICTENC"], +["0 1 0 0 0 0", "2ROT", "P2SH,STRICTENC"], +["0 1 0 0", "2SWAP", "P2SH,STRICTENC"], +["1", "IFDUP", "P2SH,STRICTENC"], +["NOP", "DEPTH 1", "P2SH,STRICTENC"], +["0", "DROP 1", "P2SH,STRICTENC"], +["1", "DUP", "P2SH,STRICTENC"], +["0 1", "NIP", "P2SH,STRICTENC"], +["1 0", "OVER", "P2SH,STRICTENC"], +["1 0 0 0 3", "PICK", "P2SH,STRICTENC"], +["1 0", "PICK", "P2SH,STRICTENC"], +["1 0 0 0 3", "ROLL", "P2SH,STRICTENC"], +["1 0", "ROLL", "P2SH,STRICTENC"], +["1 0 0", "ROT", "P2SH,STRICTENC"], +["1 0", "SWAP", "P2SH,STRICTENC"], +["0 1", "TUCK", "P2SH,STRICTENC"], + +["1", "SIZE", "P2SH,STRICTENC"], + +["0 0", "EQUAL", "P2SH,STRICTENC"], +["0 0", "EQUALVERIFY 1", "P2SH,STRICTENC"], +["0 0 1", "EQUAL EQUAL", "P2SH,STRICTENC", "OP_0 and bools must have identical byte representations"], + +["0", "1ADD", "P2SH,STRICTENC"], +["2", "1SUB", "P2SH,STRICTENC"], +["-1", "NEGATE", "P2SH,STRICTENC"], +["-1", "ABS", "P2SH,STRICTENC"], +["0", "NOT", "P2SH,STRICTENC"], +["-1", "0NOTEQUAL", "P2SH,STRICTENC"], + +["1 0", "ADD", "P2SH,STRICTENC"], +["1 0", "SUB", "P2SH,STRICTENC"], +["-1 -1", "BOOLAND", "P2SH,STRICTENC"], +["-1 0", "BOOLOR", "P2SH,STRICTENC"], +["0 0", "NUMEQUAL", "P2SH,STRICTENC"], +["0 0", "NUMEQUALVERIFY 1", "P2SH,STRICTENC"], +["-1 0", "NUMNOTEQUAL", "P2SH,STRICTENC"], +["-1 0", "LESSTHAN", "P2SH,STRICTENC"], +["1 0", "GREATERTHAN", "P2SH,STRICTENC"], +["0 0", "LESSTHANOREQUAL", "P2SH,STRICTENC"], +["0 0", "GREATERTHANOREQUAL", "P2SH,STRICTENC"], +["-1 0", "MIN", "P2SH,STRICTENC"], +["1 0", "MAX", "P2SH,STRICTENC"], +["-1 -1 0", "WITHIN", "P2SH,STRICTENC"], + +["0", "RIPEMD160", "P2SH,STRICTENC"], +["0", "SHA1", "P2SH,STRICTENC"], +["0", "SHA256", "P2SH,STRICTENC"], +["0", "HASH160", "P2SH,STRICTENC"], +["0", "HASH256", "P2SH,STRICTENC"], +["NOP", "CODESEPARATOR 1", "P2SH,STRICTENC"], + +["NOP", "NOP1 1", "P2SH,STRICTENC"], +["NOP", "NOP2 1", "P2SH,STRICTENC"], +["NOP", "NOP3 1", "P2SH,STRICTENC"], +["NOP", "NOP4 1", "P2SH,STRICTENC"], +["NOP", "NOP5 1", "P2SH,STRICTENC"], +["NOP", "NOP6 1", "P2SH,STRICTENC"], +["NOP", "NOP7 1", "P2SH,STRICTENC"], +["NOP", "NOP8 1", "P2SH,STRICTENC"], +["NOP", "NOP9 1", "P2SH,STRICTENC"], +["NOP", "NOP10 1", "P2SH,STRICTENC"], + +["", "0 0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], +["", "0 0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "Zero sigs means no sigs are checked"], +["", "0 0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], + +["", "0 0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "CHECKMULTISIG is allowed to have zero keys and/or sigs"], +["", "0 0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "Zero sigs means no sigs are checked"], +["", "0 0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], + +["", "0 0 'a' 'b' 2 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC", "Test from up to 20 pubkeys, all not checked"], +["", "0 0 'a' 'b' 'c' 3 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 4 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 2 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 3 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 4 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 5 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 6 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 7 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 8 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 9 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 10 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 11 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 12 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 13 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 14 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 15 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 16 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 17 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 18 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 19 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], +["", "0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "P2SH,STRICTENC"], + +["", +"0 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG", +"P2SH,STRICTENC", +"nOpCount is incremented by the number of keys evaluated in addition to the usual one op per op. In this case we have zero keys, so we can execute 201 CHECKMULTISIGS"], + +["1", +"0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY 0 0 0 CHECKMULTISIGVERIFY", +"P2SH,STRICTENC"], + +["", +"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG", +"P2SH,STRICTENC", +"Even though there are no signatures being checked nOpCount is incremented by the number of keys."], + +["1", +"NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY", +"P2SH,STRICTENC"], + +["0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "Very basic P2SH"], +["0x4c 0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC"], + +["0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", +"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", +"P2SH,STRICTENC", +"Basic PUSH signedness check"], + +["0x4c 0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", +"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", +"P2SH,STRICTENC", +"Basic PUSHDATA1 signedness check"], + +["0x00", "SIZE 0 EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"] +] diff --git a/core/out/test/resources/org/pivxj/script/tx_invalid.json b/core/out/test/resources/org/pivxj/script/tx_invalid.json new file mode 100644 index 000000000..13e83a380 --- /dev/null +++ b/core/out/test/resources/org/pivxj/script/tx_invalid.json @@ -0,0 +1,186 @@ +[ +["The following are deserialized transactions which are invalid."], +["They are in the form"], +["[[[prevout hash, prevout index, prevout scriptPubKey], [input 2], ...],"], +["serializedTransaction, verifyFlags]"], +["Objects that are only a single string (like this one) are ignored"], + +["0e1b5688cf179cd9f7cbda1fac0090f6e684bbf8cd946660120197c3f3681809 but with extra junk appended to the end of the scriptPubKey"], +[[["6ca7ec7b1847f6bdbd737176050e6a08d66ccd55bb94ad24f4018024107a5827", 0, "0x41 0x043b640e983c9690a14c039a2037ecc3467b27a0dcd58f19d76c7bc118d09fec45adc5370a1c5bf8067ca9f5557a4cf885fdb0fe0dcc9c3a7137226106fbc779a5 CHECKSIG VERIFY 1"]], +"010000000127587a10248001f424ad94bb55cd6cd6086a0e05767173bdbdf647187beca76c000000004948304502201b822ad10d6adc1a341ae8835be3f70a25201bbff31f59cbb9c5353a5f0eca18022100ea7b2f7074e9aa9cf70aa8d0ffee13e6b45dddabf1ab961bda378bcdb778fa4701ffffffff0100f2052a010000001976a914fc50c5907d86fed474ba5ce8b12a66e0a4c139d888ac00000000", "P2SH"], + +["This is the nearly-standard transaction with CHECKSIGVERIFY 1 instead of CHECKSIG from tx_valid.json"], +["but with the signature duplicated in the scriptPubKey with a non-standard pushdata prefix"], +["See FindAndDelete, which will only remove if it uses the same pushdata prefix as is standard"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x4c 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a01"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"], + +["Same as above, but with the sig in the scriptSig also pushed with the same non-standard OP_PUSHDATA"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x4c 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a01"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006b4c473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"], + +["This is the nearly-standard transaction with CHECKSIGVERIFY 1 instead of CHECKSIG from tx_valid.json"], +["but with the signature duplicated in the scriptPubKey with a different hashtype suffix"], +["See FindAndDelete, which will only remove if the signature, including the hash type, matches"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a81"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"], + +["An invalid P2SH Transaction"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x7a052c840ba73af26755de42cf01cc9e0a49fef0 EQUAL"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000009085768617420697320ffffffff010000000000000000015100000000", "P2SH"], + +["Tests for CheckTransaction()"], +["No inputs"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x7a052c840ba73af26755de42cf01cc9e0a49fef0 EQUAL"]], +"0100000000010000000000000000015100000000", "P2SH"], + +["No outputs"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x05ab9e14d983742513f0f451e105ffb4198d1dd4 EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006d483045022100f16703104aab4e4088317c862daec83440242411b039d14280e03dd33b487ab802201318a7be236672c5c56083eb7a5a195bc57a40af7923ff8545016cd3b571e2a601232103c40e5d339df3f30bf753e7e04450ae4ef76c9e45587d1d993bdc4cd06f0651c7acffffffff0000000000", "P2SH"], + +["Negative output"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0xae609aca8061d77c5e111f6bb62501a6bbe2bfdb EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006d4830450220063222cbb128731fc09de0d7323746539166544d6c1df84d867ccea84bcc8903022100bf568e8552844de664cd41648a031554327aa8844af34b4f27397c65b92c04de0123210243ec37dee0e2e053a9c976f43147e79bc7d9dc606ea51010af1ac80db6b069e1acffffffff01ffffffffffffffff015100000000", "P2SH"], + +["MAX_MONEY + 1 output"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x32afac281462b822adbec5094b8d4d337dd5bd6a EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100e1eadba00d9296c743cb6ecc703fd9ddc9b3cd12906176a226ae4c18d6b00796022100a71aef7d2874deff681ba6080f1b278bac7bb99c61b08a85f4311970ffe7f63f012321030c0588dc44d92bdcbf8e72093466766fdc265ead8db64517b0c542275b70fffbacffffffff010140075af0750700015100000000", "P2SH"], + +["MAX_MONEY output + 1 output"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0xb558cbf4930954aa6a344363a15668d7477ae716 EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006d483045022027deccc14aa6668e78a8c9da3484fbcd4f9dcc9bb7d1b85146314b21b9ae4d86022100d0b43dece8cfb07348de0ca8bc5b86276fa88f7f2138381128b7c36ab2e42264012321029bb13463ddd5d2cc05da6e84e37536cb9525703cfd8f43afdb414988987a92f6acffffffff020040075af075070001510001000000000000015100000000", "P2SH"], + +["Duplicate inputs"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x236d0639db62b0773fd8ac34dc85ae19e9aba80a EQUAL"]], +"01000000020001000000000000000000000000000000000000000000000000000000000000000000006c47304402204bb1197053d0d7799bf1b30cd503c44b58d6240cccbdc85b6fe76d087980208f02204beeed78200178ffc6c74237bb74b3f276bbb4098b5605d814304fe128bf1431012321039e8815e15952a7c3fada1905f8cf55419837133bd7756c0ef14fc8dfe50c0deaacffffffff0001000000000000000000000000000000000000000000000000000000000000000000006c47304402202306489afef52a6f62e90bf750bbcdf40c06f5c6b138286e6b6b86176bb9341802200dba98486ea68380f47ebb19a7df173b99e6bc9c681d6ccf3bde31465d1f16b3012321039e8815e15952a7c3fada1905f8cf55419837133bd7756c0ef14fc8dfe50c0deaacffffffff010000000000000000015100000000", "P2SH"], + +["Coinbase of size 1"], +["Note the input is just required to make the tester happy"], +[[["0000000000000000000000000000000000000000000000000000000000000000", -1, "1"]], +"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0151ffffffff010000000000000000015100000000", "P2SH"], + +["Coinbase of size 101"], +["Note the input is just required to make the tester happy"], +[[["0000000000000000000000000000000000000000000000000000000000000000", -1, "1"]], +"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff655151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151ffffffff010000000000000000015100000000", "P2SH"], + +["Null txin"], +[[["0000000000000000000000000000000000000000000000000000000000000000", -1, "HASH160 0x14 0x02dae7dbbda56097959cba59b1989dd3e47937bf EQUAL"]], +"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff6e49304602210086f39e028e46dafa8e1e3be63906465f4cf038fbe5ed6403dc3e74ae876e6431022100c4625c675cfc5c7e3a0e0d7eaec92ac24da20c73a88eb40d09253e51ac6def5201232103a183ddc41e84753aca47723c965d1b5c8b0e2b537963518355e6dd6cf8415e50acffffffff010000000000000000015100000000", "P2SH"], + +["Same as the transactions in valid with one input SIGHASH_ALL and one SIGHASH_ANYONECANPAY, but we set the _ANYONECANPAY sequence number, invalidating the SIGHASH_ALL signature"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"], + ["0000000000000000000000000000000000000000000000000000000000000200", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"]], + "01000000020001000000000000000000000000000000000000000000000000000000000000000000004948304502203a0f5f0e1f2bdbcd04db3061d18f3af70e07f4f467cbc1b8116f267025f5360b022100c792b6e215afc5afc721a351ec413e714305cb749aae3d7fee76621313418df10101000000000200000000000000000000000000000000000000000000000000000000000000000000484730440220201dc2d030e380e8f9cfb41b442d930fa5a685bb2c8db5906671f865507d0670022018d9e7a8d4c8d86a73c2a724ee38ef983ec249827e0e464841735955c707ece98101000000010100000000000000015100000000", "P2SH"], + +["CHECKMULTISIG with incorrect signature order"], +["Note the input is just required to make the tester happy"], +[[["b3da01dd4aae683c7aee4d5d8b52a540a508e1115f77cd7fa9a291243f501223", 0, "HASH160 0x14 0xb1ce99298d5f07364b57b1e5c9cc00be0b04a954 EQUAL"]], +"01000000012312503f2491a2a97fcd775f11e108a540a5528b5d4dee7a3c68ae4add01dab300000000fdfe000048304502207aacee820e08b0b174e248abd8d7a34ed63b5da3abedb99934df9fddd65c05c4022100dfe87896ab5ee3df476c2655f9fbe5bd089dccbef3e4ea05b5d121169fe7f5f401483045022100f6649b0eddfdfd4ad55426663385090d51ee86c3481bdc6b0c18ea6c0ece2c0b0220561c315b07cffa6f7dd9df96dbae9200c2dee09bf93cc35ca05e6cdf613340aa014c695221031d11db38972b712a9fe1fc023577c7ae3ddb4a3004187d41c45121eecfdbb5b7210207ec36911b6ad2382860d32989c7b8728e9489d7bbc94a6b5509ef0029be128821024ea9fac06f666a4adc3fc1357b7bec1fd0bdece2b9d08579226a8ebde53058e453aeffffffff0180380100000000001976a914c9b99cddf847d10685a4fabaa0baf505f7c3dfab88ac00000000", "P2SH"], + + +["The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], +["It is an OP_CHECKMULTISIG with the dummy value missing"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004847304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH"], + + +["CHECKMULTISIG SCRIPT_VERIFY_NULLDUMMY tests:"], + +["The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], +["It is an OP_CHECKMULTISIG with the dummy value set to something other than an empty string"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a010047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], + +["As above, but using a OP_1"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000495147304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], + +["As above, but using a OP_1NEGATE"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000494f47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], + +["As above, but with the dummy byte missing"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004847304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], + +["CHECKLOCKTIMEVERIFY tests"], + +["By-height locks, with argument just beyond tx nLockTime"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000fe64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], + +["By-time locks, with argument just beyond tx nLockTime (but within numerical boundries)"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000001 NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Argument missing"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Argument negative with by-blockheight nLockTime=0"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Argument negative with by-blocktime nLockTime=500,000,000"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Input locked"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Another input being unlocked isn't sufficient; the CHECKLOCKTIMEVERIFY-using input must be unlocked"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"] , + ["0000000000000000000000000000000000000000000000000000000000000200", 1, "1"]], +"010000000200010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00020000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Argument/tx height/time mismatch, both versions"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Argument 2^32 with nLockTime=2^32-1"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967296 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Same, but with nLockTime=2^31-1"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483648 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffff7f", "P2SH,CHECKLOCKTIMEVERIFY"], + +["6 byte non-minimally-encoded arguments are invalid even in their contents are valid"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x06 0x000000000000 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Failure due to failing CHECKLOCKTIMEVERIFY in scriptSig"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b1000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Failure due to failing CHECKLOCKTIMEVERIFY in redeemScript"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0xc5b93064159b3b2d6ab506a41b1f50463771b988 EQUAL"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000030251b1000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + + +["Empty stack when we try to run CHECKSIG"], +[[["ad503f72c18df5801ee64d76090afe4c607fb2b822e9b7b63c5826c50e22fc3b", 0, "0x21 0x027c3a97665bf283a102a587a62a30a0c102d4d3b141015e2cae6f64e2543113e5 CHECKSIG NOT"]], +"01000000013bfc220ec526583cb6b7e922b8b27f604cfe0a09764de61e80f58dc1723f50ad0000000000ffffffff0101000000000000002321027c3a97665bf283a102a587a62a30a0c102d4d3b141015e2cae6f64e2543113e5ac00000000", "P2SH"], + +["A transaction with a non-standard DER signature."], +[[["b1dbc81696c8a9c0fccd0693ab66d7c368dbc38c0def4e800685560ddd1b2132", 0, "DUP HASH160 0x14 0x4b3bd7eba3bc0284fd3007be7f3be275e94f5826 EQUALVERIFY CHECKSIG"]], +"010000000132211bdd0d568506804eef0d8cc3db68c3d766ab9306cdfcc0a9c89616c8dbb1000000006c493045022100c7bb0faea0522e74ff220c20c022d2cb6033f8d167fb89e75a50e237a35fd6d202203064713491b1f8ad5f79e623d0219ad32510bfaa1009ab30cbee77b59317d6e30001210237af13eb2d84e4545af287b919c2282019c9691cc509e78e196a9d8274ed1be0ffffffff0100000000000000001976a914f1b3ed2eda9a2ebe5a9374f692877cdf87c0f95b88ac00000000", "P2SH,DERSIG"], + +["A transaction with a high-S signature."], +[[["a54b3bff74c910adff4f81b641587440c9f3b02a67c69b06d4eea36c0d199bac", 0, "DUP HASH160 0x14 0x33b9fe6942f268ae728136046e638c8863bed91f EQUALVERIFY CHECKSIG"]], +"0100000001ac9b190d6ca3eed4069bc6672ab0f3c940745841b6814fffad10c974ff3b4ba5000000006c493046022100c16257354c7ec7fedda7ce724abfc6a8f26fd433d08b1a11bd01a8f0f157b1fb0221009069419fa4454cd52f1d3219c395b96c3dc0404257196f96d819d71e4f95b8290121039770779101a01dbbf6c25466df8869e648dc75a51d64ebf5136c824c32fcc9c8ffffffff0100000000000000001976a914aaf0529f46a86271255621ed566e79e67345916d88ac00000000", "P2SH,LOW_S"], + +["Make diffs cleaner by leaving a comment here without comma at the end"] +] diff --git a/core/out/test/resources/org/pivxj/script/tx_valid.json b/core/out/test/resources/org/pivxj/script/tx_valid.json new file mode 100644 index 000000000..47700aec1 --- /dev/null +++ b/core/out/test/resources/org/pivxj/script/tx_valid.json @@ -0,0 +1,236 @@ +[ +["The following are deserialized transactions which are valid."], +["They are in the form"], +["[[[prevout hash, prevout index, prevout scriptPubKey], [input 2], ...],"], +["serializedTransaction, verifyFlags]"], +["Objects that are only a single string (like this one) are ignored"], + +["The following is 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], +["It is of particular interest because it contains an invalidly-encoded signature which OpenSSL accepts"], +["See http://r6.ca/blog/20111119T211504Z.html"], +["It is also the first OP_CHECKMULTISIG transaction in standard form"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH"], + +["The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], +["It is an OP_CHECKMULTISIG with an arbitrary extra byte stuffed into the signature at pos length - 2"], +["The dummy byte is fine however, so the NULLDUMMY flag should be happy"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH,NULLDUMMY"], + +["The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"], +["It is an OP_CHECKMULTISIG with the dummy value set to something other than an empty string"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a01ff47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH"], + +["As above, but using a OP_1"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000495147304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH"], + +["As above, but using a OP_1NEGATE"], +[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]], +"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000494f47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", "P2SH"], + +["The following is c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73"], +["It is of interest because it contains a 0-sequence as well as a signature of SIGHASH type 0 (which is not a real type)"], +[[["406b2b06bcd34d3c8733e6b79f7a394c8a431fbf4ff5ac705c93f4076bb77602", 0, "DUP HASH160 0x14 0xdc44b1164188067c3a32d4780f5996fa14a4f2d9 EQUALVERIFY CHECKSIG"]], +"01000000010276b76b07f4935c70acf54fbf1f438a4c397a9fb7e633873c4dd3bc062b6b40000000008c493046022100d23459d03ed7e9511a47d13292d3430a04627de6235b6e51a40f9cd386f2abe3022100e7d25b080f0bb8d8d5f878bba7d54ad2fda650ea8d158a33ee3cbd11768191fd004104b0e2c879e4daf7b9ab68350228c159766676a14f5815084ba166432aab46198d4cca98fa3e9981d0a90b2effc514b76279476550ba3663fdcaff94c38420e9d5000000000100093d00000000001976a9149a7b0f3b80c6baaeedce0a0842553800f832ba1f88ac00000000", "P2SH"], + +["A nearly-standard transaction with CHECKSIGVERIFY 1 instead of CHECKSIG"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"], + +["Same as above, but with the signature duplicated in the scriptPubKey with the proper pushdata prefix"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a01"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000", "P2SH"], + +["The following is f7fdd091fa6d8f5e7a8c2458f5c38faffff2d3f1406b6e4fe2c99dcc0d2d1cbb"], +["It caught a bug in the workaround for 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63 in an overly simple implementation"], +[[["b464e85df2a238416f8bdae11d120add610380ea07f4ef19c5f9dfd472f96c3d", 0, "DUP HASH160 0x14 0xbef80ecf3a44500fda1bc92176e442891662aed2 EQUALVERIFY CHECKSIG"], +["b7978cc96e59a8b13e0865d3f95657561a7f725be952438637475920bac9eb21", 1, "DUP HASH160 0x14 0xbef80ecf3a44500fda1bc92176e442891662aed2 EQUALVERIFY CHECKSIG"]], +"01000000023d6cf972d4dff9c519eff407ea800361dd0a121de1da8b6f4138a2f25de864b4000000008a4730440220ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e022049cffa1cdc102a0b56e0e04913606c70af702a1149dc3b305ab9439288fee090014104266abb36d66eb4218a6dd31f09bb92cf3cfa803c7ea72c1fc80a50f919273e613f895b855fb7465ccbc8919ad1bd4a306c783f22cd3227327694c4fa4c1c439affffffff21ebc9ba20594737864352e95b727f1a565756f9d365083eb1a8596ec98c97b7010000008a4730440220503ff10e9f1e0de731407a4a245531c9ff17676eda461f8ceeb8c06049fa2c810220c008ac34694510298fa60b3f000df01caa244f165b727d4896eb84f81e46bcc4014104266abb36d66eb4218a6dd31f09bb92cf3cfa803c7ea72c1fc80a50f919273e613f895b855fb7465ccbc8919ad1bd4a306c783f22cd3227327694c4fa4c1c439affffffff01f0da5200000000001976a914857ccd42dded6df32949d4646dfa10a92458cfaa88ac00000000", "P2SH"], + +["The following tests for the presence of a bug in the handling of SIGHASH_SINGLE"], +["It results in signing the constant 1, instead of something generated based on the transaction,"], +["when the input doing the signing has an index greater than the maximum output index"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "DUP HASH160 0x14 0xe52b482f2faa8ecbf0db344f93c84ac908557f33 EQUALVERIFY CHECKSIG"], ["0000000000000000000000000000000000000000000000000000000000000200", 0, "1"]], +"01000000020002000000000000000000000000000000000000000000000000000000000000000000000151ffffffff0001000000000000000000000000000000000000000000000000000000000000000000006b483045022100c9cdd08798a28af9d1baf44a6c77bcc7e279f47dc487c8c899911bc48feaffcc0220503c5c50ae3998a733263c5c0f7061b483e2b56c4c41b456e7d2f5a78a74c077032102d5c25adb51b61339d2b05315791e21bbe80ea470a49db0135720983c905aace0ffffffff010000000000000000015100000000", "P2SH"], + +["An invalid P2SH Transaction"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x7a052c840ba73af26755de42cf01cc9e0a49fef0 EQUAL"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000009085768617420697320ffffffff010000000000000000015100000000", "NONE"], + +["A valid P2SH Transaction using the standard transaction type put forth in BIP 16"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x8febbed40483661de6958d957412f82deed8e2f7 EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100c66c9cdf4c43609586d15424c54707156e316d88b0a1534c9e6b0d4f311406310221009c0fe51dbc9c4ab7cc25d3fdbeccf6679fe6827f08edf2b4a9f16ee3eb0e438a0123210338e8034509af564c62644c07691942e0c056752008a173c89f60ab2a88ac2ebfacffffffff010000000000000000015100000000", "P2SH"], + +["Tests for CheckTransaction()"], +["MAX_MONEY output"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x32afac281462b822adbec5094b8d4d337dd5bd6a EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100e1eadba00d9296c743cb6ecc703fd9ddc9b3cd12906176a226ae4c18d6b00796022100a71aef7d2874deff681ba6080f1b278bac7bb99c61b08a85f4311970ffe7f63f012321030c0588dc44d92bdcbf8e72093466766fdc265ead8db64517b0c542275b70fffbacffffffff010040075af0750700015100000000", "P2SH"], + +["MAX_MONEY output + 0 output"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0xb558cbf4930954aa6a344363a15668d7477ae716 EQUAL"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000006d483045022027deccc14aa6668e78a8c9da3484fbcd4f9dcc9bb7d1b85146314b21b9ae4d86022100d0b43dece8cfb07348de0ca8bc5b86276fa88f7f2138381128b7c36ab2e42264012321029bb13463ddd5d2cc05da6e84e37536cb9525703cfd8f43afdb414988987a92f6acffffffff020040075af075070001510000000000000000015100000000", "P2SH"], + +["Coinbase of size 2"], +["Note the input is just required to make the tester happy"], +[[["0000000000000000000000000000000000000000000000000000000000000000", -1, "1"]], +"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025151ffffffff010000000000000000015100000000", "P2SH"], + +["Coinbase of size 100"], +["Note the input is just required to make the tester happy"], +[[["0000000000000000000000000000000000000000000000000000000000000000", -1, "1"]], +"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff6451515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151ffffffff010000000000000000015100000000", "P2SH"], + +["Simple transaction with first input is signed with SIGHASH_ALL, second with SIGHASH_ANYONECANPAY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"], + ["0000000000000000000000000000000000000000000000000000000000000200", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"]], + "010000000200010000000000000000000000000000000000000000000000000000000000000000000049483045022100d180fd2eb9140aeb4210c9204d3f358766eb53842b2a9473db687fa24b12a3cc022079781799cd4f038b85135bbe49ec2b57f306b2bb17101b17f71f000fcab2b6fb01ffffffff0002000000000000000000000000000000000000000000000000000000000000000000004847304402205f7530653eea9b38699e476320ab135b74771e1c48b81a5d041e2ca84b9be7a802200ac8d1f40fb026674fe5a5edd3dea715c27baa9baca51ed45ea750ac9dc0a55e81ffffffff010100000000000000015100000000", "P2SH"], + +["Same as above, but we change the sequence number of the first input to check that SIGHASH_ANYONECANPAY is being followed"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"], + ["0000000000000000000000000000000000000000000000000000000000000200", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"]], + "01000000020001000000000000000000000000000000000000000000000000000000000000000000004948304502203a0f5f0e1f2bdbcd04db3061d18f3af70e07f4f467cbc1b8116f267025f5360b022100c792b6e215afc5afc721a351ec413e714305cb749aae3d7fee76621313418df101010000000002000000000000000000000000000000000000000000000000000000000000000000004847304402205f7530653eea9b38699e476320ab135b74771e1c48b81a5d041e2ca84b9be7a802200ac8d1f40fb026674fe5a5edd3dea715c27baa9baca51ed45ea750ac9dc0a55e81ffffffff010100000000000000015100000000", "P2SH"], + +["afd9c17f8913577ec3509520bd6e5d63e9c0fd2a5f70c787993b097ba6ca9fae which has several SIGHASH_SINGLE signatures"], +[[["63cfa5a09dc540bf63e53713b82d9ea3692ca97cd608c384f2aa88e51a0aac70", 0, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"], + ["04e8d0fcf3846c6734477b98f0f3d4badfb78f020ee097a0be5fe347645b817d", 1, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"], + ["ee1377aff5d0579909e11782e1d2f5f7b84d26537be7f5516dd4e43373091f3f", 1, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"]], + "010000000370ac0a1ae588aaf284c308d67ca92c69a39e2db81337e563bf40c59da0a5cf63000000006a4730440220360d20baff382059040ba9be98947fd678fb08aab2bb0c172efa996fd8ece9b702201b4fb0de67f015c90e7ac8a193aeab486a1f587e0f54d0fb9552ef7f5ce6caec032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff7d815b6447e35fbea097e00e028fb7dfbad4f3f0987b4734676c84f3fcd0e804010000006b483045022100c714310be1e3a9ff1c5f7cacc65c2d8e781fc3a88ceb063c6153bf950650802102200b2d0979c76e12bb480da635f192cc8dc6f905380dd4ac1ff35a4f68f462fffd032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff3f1f097333e4d46d51f5e77b53264db8f7f5d2e18217e1099957d0f5af7713ee010000006c493046022100b663499ef73273a3788dea342717c2640ac43c5a1cf862c9e09b206fcb3f6bb8022100b09972e75972d9148f2bdd462e5cb69b57c1214b88fc55ca638676c07cfc10d8032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff0380841e00000000001976a914bfb282c70c4191f45b5a6665cad1682f2c9cfdfb88ac80841e00000000001976a9149857cc07bed33a5cf12b9c5e0500b675d500c81188ace0fd1c00000000001976a91443c52850606c872403c0601e69fa34b26f62db4a88ac00000000", "P2SH"], + + ["ddc454a1c0c35c188c98976b17670f69e586d9c0f3593ea879928332f0a069e7, which spends an input that pushes using a PUSHDATA1 that is negative when read as signed"], + [[["c5510a5dd97a25f43175af1fe649b707b1df8e1a41489bac33a23087027a2f48", 0, "0x4c 0xae 0x606563686f2022553246736447566b58312b5a536e587574356542793066794778625456415675534a6c376a6a334878416945325364667657734f53474f36633338584d7439435c6e543249584967306a486956304f376e775236644546673d3d22203e20743b206f70656e73736c20656e63202d7061737320706173733a5b314a564d7751432d707269766b65792d6865785d202d64202d6165732d3235362d636263202d61202d696e207460 DROP DUP HASH160 0x14 0xbfd7436b6265aa9de506f8a994f881ff08cc2872 EQUALVERIFY CHECKSIG"]], + "0100000001482f7a028730a233ac9b48411a8edfb107b749e61faf7531f4257ad95d0a51c5000000008b483045022100bf0bbae9bde51ad2b222e87fbf67530fbafc25c903519a1e5dcc52a32ff5844e022028c4d9ad49b006dd59974372a54291d5764be541574bb0c4dc208ec51f80b7190141049dd4aad62741dc27d5f267f7b70682eee22e7e9c1923b9c0957bdae0b96374569b460eb8d5b40d972e8c7c0ad441de3d94c4a29864b212d56050acb980b72b2bffffffff0180969800000000001976a914e336d0017a9d28de99d16472f6ca6d5a3a8ebc9988ac00000000", "P2SH"], + +["Correct signature order"], +["Note the input is just required to make the tester happy"], +[[["b3da01dd4aae683c7aee4d5d8b52a540a508e1115f77cd7fa9a291243f501223", 0, "HASH160 0x14 0xb1ce99298d5f07364b57b1e5c9cc00be0b04a954 EQUAL"]], +"01000000012312503f2491a2a97fcd775f11e108a540a5528b5d4dee7a3c68ae4add01dab300000000fdfe0000483045022100f6649b0eddfdfd4ad55426663385090d51ee86c3481bdc6b0c18ea6c0ece2c0b0220561c315b07cffa6f7dd9df96dbae9200c2dee09bf93cc35ca05e6cdf613340aa0148304502207aacee820e08b0b174e248abd8d7a34ed63b5da3abedb99934df9fddd65c05c4022100dfe87896ab5ee3df476c2655f9fbe5bd089dccbef3e4ea05b5d121169fe7f5f4014c695221031d11db38972b712a9fe1fc023577c7ae3ddb4a3004187d41c45121eecfdbb5b7210207ec36911b6ad2382860d32989c7b8728e9489d7bbc94a6b5509ef0029be128821024ea9fac06f666a4adc3fc1357b7bec1fd0bdece2b9d08579226a8ebde53058e453aeffffffff0180380100000000001976a914c9b99cddf847d10685a4fabaa0baf505f7c3dfab88ac00000000", "P2SH"], + +["cc60b1f899ec0a69b7c3f25ddf32c4524096a9c5b01cbd84c6d0312a0c478984, which is a fairly strange transaction which relies on OP_CHECKSIG returning 0 when checking a completely invalid sig of length 0"], +[[["cbebc4da731e8995fe97f6fadcd731b36ad40e5ecb31e38e904f6e5982fa09f7", 0, "0x2102085c6600657566acc2d6382a47bc3f324008d2aa10940dd7705a48aa2a5a5e33ac7c2103f5d0fb955f95dd6be6115ce85661db412ec6a08abcbfce7da0ba8297c6cc0ec4ac7c5379a820d68df9e32a147cffa36193c6f7c43a1c8c69cda530e1c6db354bfabdcfefaf3c875379a820f531f3041d3136701ea09067c53e7159c8f9b2746a56c3d82966c54bbc553226879a5479827701200122a59a5379827701200122a59a6353798277537982778779679a68"]], +"0100000001f709fa82596e4f908ee331cb5e0ed46ab331d7dcfaf697fe95891e73dac4ebcb000000008c20ca42095840735e89283fec298e62ac2ddea9b5f34a8cbb7097ad965b87568100201b1b01dc829177da4a14551d2fc96a9db00c6501edfa12f22cd9cefd335c227f483045022100a9df60536df5733dd0de6bc921fab0b3eee6426501b43a228afa2c90072eb5ca02201c78b74266fac7d1db5deff080d8a403743203f109fbcabf6d5a760bf87386d20100ffffffff01c075790000000000232103611f9a45c18f28f06f19076ad571c344c82ce8fcfe34464cf8085217a2d294a6ac00000000", "P2SH"], + +["Empty pubkey"], +[[["229257c295e7f555421c1bfec8538dd30a4b5c37c1c8810bbe83cafa7811652c", 0, "0x00 CHECKSIG NOT"]], +"01000000012c651178faca83be0b81c8c1375c4b0ad38d53c8fe1b1c4255f5e795c25792220000000049483045022100d6044562284ac76c985018fc4a90127847708c9edb280996c507b28babdc4b2a02203d74eca3f1a4d1eea7ff77b528fde6d5dc324ec2dbfdb964ba885f643b9704cd01ffffffff010100000000000000232102c2410f8891ae918cab4ffc4bb4a3b0881be67c7a1e7faa8b5acf9ab8932ec30cac00000000", "P2SH"], + +["Empty signature"], +[[["9ca93cfd8e3806b9d9e2ba1cf64e3cc6946ee0119670b1796a09928d14ea25f7", 0, "0x21 0x028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02 CHECKSIG NOT"]], +"0100000001f725ea148d92096a79b1709611e06e94c63c4ef61cbae2d9b906388efd3ca99c000000000100ffffffff0101000000000000002321028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02ac00000000", "P2SH"], + +[[["444e00ed7840d41f20ecd9c11d3f91982326c731a02f3c05748414a4fa9e59be", 0, "1 0x00 0x21 0x02136b04758b0b6e363e7a6fbe83aaf527a153db2b060d36cc29f7f8309ba6e458 2 CHECKMULTISIG"]], +"0100000001be599efaa4148474053c2fa031c7262398913f1dc1d9ec201fd44078ed004e44000000004900473044022022b29706cb2ed9ef0cb3c97b72677ca2dfd7b4160f7b4beb3ba806aa856c401502202d1e52582412eba2ed474f1f437a427640306fd3838725fab173ade7fe4eae4a01ffffffff010100000000000000232103ac4bba7e7ca3e873eea49e08132ad30c7f03640b6539e9b59903cf14fd016bbbac00000000", "P2SH"], + +[[["e16abbe80bf30c080f63830c8dbf669deaef08957446e95940227d8c5e6db612", 0, "1 0x21 0x03905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9f 0x00 2 CHECKMULTISIG"]], +"010000000112b66d5e8c7d224059e946749508efea9d66bf8d0c83630f080cf30be8bb6ae100000000490047304402206ffe3f14caf38ad5c1544428e99da76ffa5455675ec8d9780fac215ca17953520220779502985e194d84baa36b9bd40a0dbd981163fa191eb884ae83fc5bd1c86b1101ffffffff010100000000000000232103905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9fac00000000", "P2SH"], + +[[["ebbcf4bfce13292bd791d6a65a2a858d59adbf737e387e40370d4e64cc70efb0", 0, "2 0x21 0x033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194 0x21 0x03a88b326f8767f4f192ce252afe33c94d25ab1d24f27f159b3cb3aa691ffe1423 2 CHECKMULTISIG NOT"]], +"0100000001b0ef70cc644e0d37407e387e73bfad598d852a5aa6d691d72b2913cebff4bceb000000004a00473044022068cd4851fc7f9a892ab910df7a24e616f293bcb5c5fbdfbc304a194b26b60fba022078e6da13d8cb881a22939b952c24f88b97afd06b4c47a47d7f804c9a352a6d6d0100ffffffff0101000000000000002321033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194ac00000000", "P2SH"], + +[[["ba4cd7ae2ad4d4d13ebfc8ab1d93a63e4a6563f25089a18bf0fc68f282aa88c1", 0, "2 0x21 0x037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1 0x21 0x02edc823cd634f2c4033d94f5755207cb6b60c4b1f1f056ad7471c47de5f2e4d50 2 CHECKMULTISIG NOT"]], +"0100000001c188aa82f268fcf08ba18950f263654a3ea6931dabc8bf3ed1d4d42aaed74cba000000004b0000483045022100940378576e069aca261a6b26fb38344e4497ca6751bb10905c76bb689f4222b002204833806b014c26fd801727b792b1260003c55710f87c5adbd7a9cb57446dbc9801ffffffff0101000000000000002321037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1ac00000000", "P2SH"], + + +["OP_CODESEPARATOR tests"], + +["Test that SignatureHash() removes OP_CODESEPARATOR with FindAndDelete()"], +[[["bc7fd132fcf817918334822ee6d9bd95c889099c96e07ca2c1eb2cc70db63224", 0, "CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG"]], +"01000000012432b60dc72cebc1a27ce0969c0989c895bdd9e62e8234839117f8fc32d17fbc000000004a493046022100a576b52051962c25e642c0fd3d77ee6c92487048e5d90818bcf5b51abaccd7900221008204f8fb121be4ec3b24483b1f92d89b1b0548513a134e345c5442e86e8617a501ffffffff010000000000000000016a00000000", "P2SH"], +[[["83e194f90b6ef21fa2e3a365b63794fb5daa844bdc9b25de30899fcfe7b01047", 0, "CODESEPARATOR CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG"]], +"01000000014710b0e7cf9f8930de259bdc4b84aa5dfb9437b665a3e3a21ff26e0bf994e183000000004a493046022100a166121a61b4eeb19d8f922b978ff6ab58ead8a5a5552bf9be73dc9c156873ea02210092ad9bc43ee647da4f6652c320800debcf08ec20a094a0aaf085f63ecb37a17201ffffffff010000000000000000016a00000000", "P2SH"], + +["Hashed data starts at the CODESEPARATOR"], +[[["326882a7f22b5191f1a0cc9962ca4b878cd969cf3b3a70887aece4d801a0ba5e", 0, "0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CODESEPARATOR CHECKSIG"]], +"01000000015ebaa001d8e4ec7a88703a3bcf69d98c874bca6299cca0f191512bf2a7826832000000004948304502203bf754d1c6732fbf87c5dcd81258aefd30f2060d7bd8ac4a5696f7927091dad1022100f5bcb726c4cf5ed0ed34cc13dadeedf628ae1045b7cb34421bc60b89f4cecae701ffffffff010000000000000000016a00000000", "P2SH"], + +["But only if execution has reached it"], +[[["a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944", 0, "0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 1"]], +"010000000144490eda355be7480f2ec828dcc1b9903793a8008fad8cfe9b0c6b4d2f0355a900000000924830450221009c0a27f886a1d8cb87f6f595fbc3163d28f7a81ec3c4b252ee7f3ac77fd13ffa02203caa8dfa09713c8c4d7ef575c75ed97812072405d932bd11e6a1593a98b679370148304502201e3861ef39a526406bad1e20ecad06be7375ad40ddb582c9be42d26c3a0d7b240221009d0a3985e96522e59635d19cc4448547477396ce0ef17a58e7d74c3ef464292301ffffffff010000000000000000016a00000000", "P2SH"], + +["CHECKSIG is legal in scriptSigs"], +[[["ccf7f4053a02e653c36ac75c891b7496d0dc5ce5214f6c913d9cf8f1329ebee0", 0, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]], +"0100000001e0be9e32f1f89c3d916c4f21e55cdcd096741b895cc76ac353e6023a05f4f7cc00000000d86149304602210086e5f736a2c3622ebb62bd9d93d8e5d76508b98be922b97160edc3dcca6d8c47022100b23c312ac232a4473f19d2aeb95ab7bdf2b65518911a0d72d50e38b5dd31dc820121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac4730440220508fa761865c8abd81244a168392876ee1d94e8ed83897066b5e2df2400dad24022043f5ee7538e87e9c6aef7ef55133d3e51da7cc522830a9c4d736977a76ef755c0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"], + +["Same semantics for OP_CODESEPARATOR"], +[[["10c9f0effe83e97f80f067de2b11c6a00c3088a4bce42c5ae761519af9306f3c", 1, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]], +"01000000013c6f30f99a5161e75a2ce4bca488300ca0c6112bde67f0807fe983feeff0c91001000000e608646561646265656675ab61493046022100ce18d384221a731c993939015e3d1bcebafb16e8c0b5b5d14097ec8177ae6f28022100bcab227af90bab33c3fe0a9abfee03ba976ee25dc6ce542526e9b2e56e14b7f10121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac493046022100c3b93edcc0fd6250eb32f2dd8a0bba1754b0f6c3be8ed4100ed582f3db73eba2022100bf75b5bd2eff4d6bf2bda2e34a40fcc07d4aa3cf862ceaa77b47b81eff829f9a01ab21038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"], + +["Signatures are removed from the script they are in by FindAndDelete() in the CHECKSIG code; even multiple instances of one signature can be removed."], +[[["6056ebd549003b10cbbd915cea0d82209fe40b8617104be917a26fa92cbe3d6f", 0, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]], +"01000000016f3dbe2ca96fa217e94b1017860be49f20820dea5c91bdcb103b0049d5eb566000000000fd1d0147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac47304402203757e937ba807e4a5da8534c17f9d121176056406a6465054bdd260457515c1a02200f02eccf1bec0f3a0d65df37889143c2e88ab7acec61a7b6f5aa264139141a2b0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"], + +["That also includes ahead of the opcode being executed."], +[[["5a6b0021a6042a686b6b94abc36b387bef9109847774e8b1e51eb8cc55c53921", 1, "DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG"]], +"01000000012139c555ccb81ee5b1e87477840991ef7b386bc3ab946b6b682a04a621006b5a01000000fdb40148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f2204148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390175ac4830450220646b72c35beeec51f4d5bc1cbae01863825750d7f490864af354e6ea4f625e9c022100f04b98432df3a9641719dbced53393022e7249fb59db993af1118539830aab870148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a580039017521038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000", "P2SH"], + +["Finally CHECKMULTISIG removes all signatures prior to hashing the script containing those signatures. In conjunction with the SIGHASH_SINGLE bug this lets us test whether or not FindAndDelete() is actually present in scriptPubKey/redeemScript evaluation by including a signature of the digest 0x01 We can compute in advance for our pubkey, embed it it in the scriptPubKey, and then also using a normal SIGHASH_ALL signature. If FindAndDelete() wasn't run, the 'bugged' signature would still be in the hashed script, and the normal signature would fail."], + +["Here's an example on mainnet within a P2SH redeemScript. Remarkably it's a standard transaction in <0.9"], +[[["b5b598de91787439afd5938116654e0b16b7a0d0f82742ba37564219c5afcbf9", 0, "DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG"], + ["ab9805c6d57d7070d9a42c5176e47bb705023e6b67249fb6760880548298e742", 0, "HASH160 0x14 0xd8dacdadb7462ae15cd906f1878706d0da8660e6 EQUAL"]], +"0100000002f9cbafc519425637ba4227f8d0a0b7160b4e65168193d5af39747891de98b5b5000000006b4830450221008dd619c563e527c47d9bd53534a770b102e40faa87f61433580e04e271ef2f960220029886434e18122b53d5decd25f1f4acb2480659fea20aabd856987ba3c3907e0121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffff42e7988254800876b69f24676b3e0205b77be476512ca4d970707dd5c60598ab00000000fd260100483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a53034930460221008431bdfa72bc67f9d41fe72e94c88fb8f359ffa30b33c72c121c5a877d922e1002210089ef5fc22dd8bfc6bf9ffdb01a9862d27687d424d1fefbab9e9c7176844a187a014c9052483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c7153aeffffffff01a08601000000000017a914d8dacdadb7462ae15cd906f1878706d0da8660e68700000000", "P2SH"], + +["Same idea, but with bare CHECKMULTISIG"], +[[["ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db", 0, "DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG"], + ["ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db", 1, "2 0x48 0x3045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 3 CHECKMULTISIG"]], +"0100000002dbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce000000006b4830450221009627444320dc5ef8d7f68f35010b4c050a6ed0d96b67a84db99fda9c9de58b1e02203e4b4aaa019e012e65d69b487fdf8719df72f488fa91506a80c49a33929f1fd50121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffffdbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce010000009300483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303ffffffff01a0860100000000001976a9149bc0bbdd3024da4d0c38ed1aecf5c68dd1d3fa1288ac00000000", "P2SH"], + +["CHECKLOCKTIMEVERIFY tests"], + +["By-height locks, with argument == 0 and == tx nLockTime"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], + +["By-time locks, with argument just beyond tx nLockTime (but within numerical boundries)"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Any non-maxint nSequence is fine"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["The argument can be calculated rather than created directly by a PUSHDATA"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 1ADD NOP2 1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Perhaps even by an ADD producing a 5-byte result that is out of bounds for other opcodes"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483647 2147483647 ADD NOP2 1"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"], + +["5 byte non-minimally-encoded arguments are valid"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x05 0x0000000000 NOP2 1"]], +"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Valid CHECKLOCKTIMEVERIFY in scriptSig"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]], +"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b1000000000100000000000000000001000000", "P2SH,CHECKLOCKTIMEVERIFY"], + +["Valid CHECKLOCKTIMEVERIFY in redeemScript"], +[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0xc5b93064159b3b2d6ab506a41b1f50463771b988 EQUAL"]], +"0100000001000100000000000000000000000000000000000000000000000000000000000000000000030251b1000000000100000000000000000001000000", "P2SH,CHECKLOCKTIMEVERIFY"], + + +["A transaction with a non-standard DER signature."], +[[["b1dbc81696c8a9c0fccd0693ab66d7c368dbc38c0def4e800685560ddd1b2132", 0, "DUP HASH160 0x14 0x4b3bd7eba3bc0284fd3007be7f3be275e94f5826 EQUALVERIFY CHECKSIG"]], +"010000000132211bdd0d568506804eef0d8cc3db68c3d766ab9306cdfcc0a9c89616c8dbb1000000006c493045022100c7bb0faea0522e74ff220c20c022d2cb6033f8d167fb89e75a50e237a35fd6d202203064713491b1f8ad5f79e623d0219ad32510bfaa1009ab30cbee77b59317d6e30001210237af13eb2d84e4545af287b919c2282019c9691cc509e78e196a9d8274ed1be0ffffffff0100000000000000001976a914f1b3ed2eda9a2ebe5a9374f692877cdf87c0f95b88ac00000000", "P2SH"], + +["A transaction with a low-S signature."], +[[["a54b3bff74c910adff4f81b641587440c9f3b02a67c69b06d4eea36c0d199bac", 0, "DUP HASH160 0x14 0x33b9fe6942f268ae728136046e638c8863bed91f EQUALVERIFY CHECKSIG"]], +"0100000001ac9b190d6ca3eed4069bc6672ab0f3c940745841b6814fffad10c974ff3b4ba5000000006b483045022100c16257354c7ec7fedda7ce724abfc6a8f26fd433d08b1a11bd01a8f0f157b1fb02206f96be605bbab32ad0e2cde63c6a46927cee9ca4582f30a4e7b8876e80a089180121039770779101a01dbbf6c25466df8869e648dc75a51d64ebf5136c824c32fcc9c8ffffffff0100000000000000001976a914aaf0529f46a86271255621ed566e79e67345916d88ac00000000", "P2SH,LOW_S"], + +["A transaction with a high-S signature."], +[[["a54b3bff74c910adff4f81b641587440c9f3b02a67c69b06d4eea36c0d199bac", 0, "DUP HASH160 0x14 0x33b9fe6942f268ae728136046e638c8863bed91f EQUALVERIFY CHECKSIG"]], +"0100000001ac9b190d6ca3eed4069bc6672ab0f3c940745841b6814fffad10c974ff3b4ba5000000006c493046022100c16257354c7ec7fedda7ce724abfc6a8f26fd433d08b1a11bd01a8f0f157b1fb0221009069419fa4454cd52f1d3219c395b96c3dc0404257196f96d819d71e4f95b8290121039770779101a01dbbf6c25466df8869e648dc75a51d64ebf5136c824c32fcc9c8ffffffff0100000000000000001976a914aaf0529f46a86271255621ed566e79e67345916d88ac00000000", "P2SH"], + +["Make diffs cleaner by leaving a comment here without comma at the end"] +] diff --git a/core/src/main/java/org/pivxj/zerocoin/GenWitMessage.java b/core/src/main/java/host/furszy/zerocoinj/protocol/GenWitMessage.java similarity index 85% rename from core/src/main/java/org/pivxj/zerocoin/GenWitMessage.java rename to core/src/main/java/host/furszy/zerocoinj/protocol/GenWitMessage.java index a1e4ded30..f92685c55 100644 --- a/core/src/main/java/org/pivxj/zerocoin/GenWitMessage.java +++ b/core/src/main/java/host/furszy/zerocoinj/protocol/GenWitMessage.java @@ -1,5 +1,6 @@ -package org.pivxj.zerocoin; +package host.furszy.zerocoinj.protocol; +import com.zerocoinj.core.CoinDenomination; import org.pivxj.core.*; import java.io.ByteArrayOutputStream; @@ -10,12 +11,12 @@ public class GenWitMessage extends Message { private BloomFilter bloomFilter; private int startHeight; - private LibZerocoin.CoinDenomination den; + private CoinDenomination den; public GenWitMessage( NetworkParameters params, int startHeight, - LibZerocoin.CoinDenomination den, + CoinDenomination den, int elements, double falsePositiveRate, long randomNonce @@ -44,7 +45,7 @@ public byte[] bitcoinSerialize() { try(ByteArrayOutputStream buf = new ByteArrayOutputStream()){ bloomFilter.bitcoinSerialize(buf); Utils.uint32ToByteStreamLE(startHeight, buf); - Utils.uint32ToByteStreamLE(den.getDenomination(), buf); + Utils.uint32ToByteStreamLE(den.getDenomination(), buf); return buf.toByteArray(); } catch (IOException e) { throw new RuntimeException(e); diff --git a/core/src/main/java/org/pivxj/zerocoin/PubcoinsMessage.java b/core/src/main/java/host/furszy/zerocoinj/protocol/PubcoinsMessage.java similarity index 97% rename from core/src/main/java/org/pivxj/zerocoin/PubcoinsMessage.java rename to core/src/main/java/host/furszy/zerocoinj/protocol/PubcoinsMessage.java index b5cf850db..175dac7bd 100644 --- a/core/src/main/java/org/pivxj/zerocoin/PubcoinsMessage.java +++ b/core/src/main/java/host/furszy/zerocoinj/protocol/PubcoinsMessage.java @@ -1,4 +1,4 @@ -package org.pivxj.zerocoin; +package host.furszy.zerocoinj.protocol; import org.pivxj.core.*; import java.io.ByteArrayOutputStream; diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/MultiWallet.java b/core/src/main/java/host/furszy/zerocoinj/wallet/MultiWallet.java new file mode 100644 index 000000000..44215400f --- /dev/null +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/MultiWallet.java @@ -0,0 +1,108 @@ +package host.furszy.zerocoinj.wallet; + +import com.zerocoinj.core.context.ZerocoinContext; +import org.pivxj.core.*; +import org.pivxj.crypto.DeterministicKey; +import org.pivxj.wallet.*; + +import static org.pivxj.wallet.DeterministicKeyChain.KeyChainType.BIP44_PIV; + +public class MultiWallet{ + + private Wallet pivWallet; + private ZWallet zWallet; + + public MultiWallet(NetworkParameters params, ZerocoinContext zContext, DeterministicSeed seed){ + KeyChainGroup keyChainGroupPiv = new KeyChainGroup(params, seed, BIP44_PIV); + + pivWallet = new Wallet(params,keyChainGroupPiv); + zWallet = new ZWallet(params, zContext, seed); + } + + ////////////////////////// Basic ///////////////////////////////// + + public void addPeergroup(PeerGroup peerGroup){ + peerGroup.addWallet(pivWallet); + zWallet.addPeergroup(peerGroup); + } + + public void removePeergroup(PeerGroup peerGroup){ + peerGroup.removeWallet(pivWallet); + zWallet.removePeergroup(peerGroup); + } + + public void commitTx(Transaction tx) { + boolean isZcMint = false; + for (TransactionOutput output : tx.getOutputs()) { + if(output.isZcMint()){ + isZcMint = true; + break; + } + } + // If it's a zc_mint then commit it to both wallets + if (isZcMint){ + pivWallet.commitTx(tx); + zWallet.commitTx(tx); + } + + } + + + ////////////////////////// PIV /////////////////////////////////// + + /** + * Returns a key that has not been returned by this method before (fresh). You can think of this as being + * a newly created key, although the notion of "create" is not really valid for a + * {@link org.pivxj.wallet.DeterministicKeyChain}. When the parameter is + * {@link org.pivxj.wallet.KeyChain.KeyPurpose#RECEIVE_FUNDS} the returned key is suitable for being put + * into a receive coins wizard type UI. You should use this when the user is definitely going to hand this key out + * to someone who wishes to send money. + */ + public DeterministicKey freshPIVKey(KeyChain.KeyPurpose purpose) { + return pivWallet.freshKey(purpose); + } + + public Address freshReceiveAddress() { + return pivWallet.freshReceiveAddress(); + } + + public Address getCurrentReceiveAddress() { + return pivWallet.currentReceiveAddress(); + } + + public void completeSend(SendRequest sendRequest) throws InsufficientMoneyException { + pivWallet.completeTx(sendRequest); + } + + + //////////////////////////// Zerocoin ///////////////////////////////////////////// + + /** + * TODO: Add fee here... + * @param amount + * @return + * @throws InsufficientMoneyException + */ + public SendRequest createMintRequest(Coin amount) throws InsufficientMoneyException { + Transaction tx = zWallet.createMint(amount); + SendRequest request = SendRequest.forTx(tx); + pivWallet.completeTx(request); + return request; + } + + + + //////////////////////////// Testing ////////////////////////////////////// + + public Wallet getPivWallet(){ + return pivWallet; + } + + public Wallet getZpivWallet(){ + return zWallet.getWallet(); + } + + public ZWallet getZPivWallet() { + return zWallet; + } +} diff --git a/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java b/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java new file mode 100644 index 000000000..64aca8686 --- /dev/null +++ b/core/src/main/java/host/furszy/zerocoinj/wallet/ZWallet.java @@ -0,0 +1,101 @@ +package host.furszy.zerocoinj.wallet; + +import com.zerocoinj.core.CoinDenomination; +import com.zerocoinj.core.ZCoin; +import com.zerocoinj.core.context.ZerocoinContext; +import com.zerocoinj.core.exceptions.InvalidSerialException; +import org.pivxj.core.*; +import org.pivxj.script.Script; +import org.pivxj.script.ScriptBuilder; +import org.pivxj.script.ScriptOpCodes; +import org.pivxj.wallet.DeterministicSeed; +import org.pivxj.wallet.KeyChain; +import org.pivxj.wallet.KeyChainGroup; +import org.pivxj.wallet.Wallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.pivxj.wallet.DeterministicKeyChain.KeyChainType.BIP44_ZPIV; + +public class ZWallet { + + private Logger logger = LoggerFactory.getLogger(ZWallet.class); + + private ZerocoinContext zContext; + private NetworkParameters params; + private Wallet zPivWallet; + + public ZWallet(NetworkParameters params, ZerocoinContext zContext, DeterministicSeed seed) { + this.params = params; + this.zContext = zContext; + KeyChainGroup keyChainGroupZpiv = new KeyChainGroup(params, seed, BIP44_ZPIV); + zPivWallet = new Wallet(params,keyChainGroupZpiv); + } + + public void addPeergroup(PeerGroup peerGroup) { + peerGroup.addWallet(zPivWallet); + } + + public void removePeergroup(PeerGroup peerGroup) { + peerGroup.removeWallet(zPivWallet); + } + + public void commitTx(Transaction tx) { + zPivWallet.commitTx(tx); + } + + public Transaction createMint(Coin amount){ + Transaction tx = new Transaction(params); + List denominations = new ArrayList<>(); + Coin temp = Coin.valueOf(amount.value); + // Easy algo, we start with the maximum amount and decreasing.. + for (CoinDenomination coinDenomination : CoinDenomination.invertedValues()) { + if (temp.isZero()) break; + Coin den = Coin.valueOf(coinDenomination.getDenomination(),0); + if (den.isZero()) continue; + if (temp.value < den.value) continue; + long mod = temp.value % den.value; + Coin divisibleForDenomination = temp.minus(Coin.valueOf(mod)); + for (int i = 0; i < divisibleForDenomination.divide(den); i++) { + denominations.add(coinDenomination); + } + temp = Coin.valueOf(mod); + } + List coinsToUse = zPivWallet.freshZcoins(KeyChain.KeyPurpose.RECEIVE_FUNDS, denominations.size()); + for (int i = 0; i < denominations.size(); i++) { + ZCoin zCoin = coinsToUse.get(i); + zCoin.setCoinDenomination(denominations.get(i)); + completeMint(tx, zCoin); + } + return tx; + } + + private void completeMint(Transaction tx, ZCoin zCoin){ + byte[] encodedCommitment = zCoin.getCommitment().serialize(); + Script script = new ScriptBuilder() + .op(ScriptOpCodes.OP_ZEROCOINMINT) + .number(encodedCommitment.length) + .data(encodedCommitment) + .build(); + TransactionOutput mintOutput = new TransactionOutput(params, tx, Coin.COIN, script.getProgram()); + mintOutput.setValue(Coin.valueOf(zCoin.getCoinDenomination().getDenomination(), 0)); + tx.addOutput(mintOutput); + } + + @Override + public String toString() { + return "ZWallet{" + + "zPivWallet=" + zPivWallet + + '}'; + } + + //////////////// Testing ///////////////////////// + + public Wallet getWallet() { + return zPivWallet; + } +} diff --git a/core/src/main/java/org/pivxj/core/BitcoinSerializer.java b/core/src/main/java/org/pivxj/core/BitcoinSerializer.java index d69f0bccd..aa80f15e0 100644 --- a/core/src/main/java/org/pivxj/core/BitcoinSerializer.java +++ b/core/src/main/java/org/pivxj/core/BitcoinSerializer.java @@ -17,8 +17,8 @@ package org.pivxj.core; -import org.pivxj.zerocoin.GenWitMessage; -import org.pivxj.zerocoin.PubcoinsMessage; +import host.furszy.zerocoinj.protocol.GenWitMessage; +import host.furszy.zerocoinj.protocol.PubcoinsMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spongycastle.util.encoders.Hex; diff --git a/core/src/main/java/org/pivxj/core/Block.java b/core/src/main/java/org/pivxj/core/Block.java index 774746d50..fbe67ca3d 100644 --- a/core/src/main/java/org/pivxj/core/Block.java +++ b/core/src/main/java/org/pivxj/core/Block.java @@ -305,9 +305,9 @@ protected void parse() throws ProtocolException { //System.out.println("payload size: "+payload.length); //System.out.println("Hash payload "+Arrays.toString(copy)); // hash = Sha256Hash.wrapReversed(Sha256Hash.hashTwice(copy)); - // System.out.println("zerocoin hash parsed: "+hash.toString()); + // System.out.println("protocol hash parsed: "+hash.toString()); hash = Sha256Hash.wrapReversed(Sha256Hash.hashTwice(payload, offset, cursor - offset)); - //System.out.println("zerocoin test hash parsed 2: "+hash.toString()); + //System.out.println("protocol test hash parsed 2: "+hash.toString()); //hash = Sha256Hash.wrapReversed(Sha256Hash.hashTwice(payload, offset, cursor - offset)); } else { diff --git a/core/src/main/java/org/pivxj/core/CoinDefinition.java b/core/src/main/java/org/pivxj/core/CoinDefinition.java index 5a56c7cbc..70a4b10b2 100644 --- a/core/src/main/java/org/pivxj/core/CoinDefinition.java +++ b/core/src/main/java/org/pivxj/core/CoinDefinition.java @@ -95,6 +95,13 @@ public static final int getTargetTimespan(int height, boolean testNet) { public static final long TESTNET_ZEROCOIN_STARTING_BLOCK_HEIGHT = 201564; public static final long MAINNET_ZEROCOIN_STARTING_BLOCK_HEIGHT = 863787; + //high fee required for zerocoin mints + public static final Coin MIN_ZEROCOIN_MINT_FEE = Coin.CENT; + //the maximum amount of confirmations until accumulated in 19 + 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; + // // Production // @@ -126,7 +133,7 @@ public static final int getTargetTimespan(int height, boolean testNet) { public static int minBroadcastConnections = 3; //0 for default; we need more peers. // - // TestNet - DASH + // TestNet - PIVX // public static final boolean supportsTestNet = true; public static final int testnetAddressHeader = 139; //base58.h CBitcoinAddress::PUBKEY_ADDRESS_TEST @@ -191,7 +198,7 @@ public static void initCheckpoints(Map checkpoints) } //Unit Test Information - public static final String UNITTEST_ADDRESS = "XgxQxd6B8iYgEEryemnJrpvoWZ3149MCkK"; + public static final String UNITTEST_ADDRESS = "DBu6Bx11S5xRoG7DxaSDg9uBGoi6X2KA8D"; public static final String UNITTEST_ADDRESS_PRIVATE_KEY = "XDtvHyDHk4S3WJvwjxSANCpZiLLkKzoDnjrcRhca2iLQRtGEz1JZ"; } diff --git a/core/src/main/java/org/pivxj/core/Context.java b/core/src/main/java/org/pivxj/core/Context.java index 544c900e3..bc3fe7719 100644 --- a/core/src/main/java/org/pivxj/core/Context.java +++ b/core/src/main/java/org/pivxj/core/Context.java @@ -14,6 +14,7 @@ package org.pivxj.core; +import com.zerocoinj.core.context.ZerocoinContext; import org.pivxj.core.listeners.BlockChainListener; import org.pivxj.store.FlatDB; import org.pivxj.store.HashStore; @@ -50,6 +51,8 @@ public class Context { private static final Logger log = LoggerFactory.getLogger(Context.class); + public ZerocoinContext zerocoinContext = new ZerocoinContext(); + private TxConfidenceTable confidenceTable; private NetworkParameters params; private int eventHorizon = 100; diff --git a/core/src/main/java/org/pivxj/core/InsufficientMoneyException.java b/core/src/main/java/org/pivxj/core/InsufficientMoneyException.java index 755fe7321..d3338cad0 100644 --- a/core/src/main/java/org/pivxj/core/InsufficientMoneyException.java +++ b/core/src/main/java/org/pivxj/core/InsufficientMoneyException.java @@ -28,7 +28,7 @@ public class InsufficientMoneyException extends Exception { @Nullable public final Coin missing; - protected InsufficientMoneyException() { + public InsufficientMoneyException() { this.missing = null; } diff --git a/core/src/main/java/org/pivxj/core/Peer.java b/core/src/main/java/org/pivxj/core/Peer.java index 1ead842e1..25e7ca8c0 100644 --- a/core/src/main/java/org/pivxj/core/Peer.java +++ b/core/src/main/java/org/pivxj/core/Peer.java @@ -34,12 +34,11 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import net.jcip.annotations.GuardedBy; -import org.pivxj.zerocoin.PubcoinsMessage; +import host.furszy.zerocoinj.protocol.PubcoinsMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nullable; -import java.math.BigInteger; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; diff --git a/core/src/main/java/org/pivxj/core/StoredBlock.java b/core/src/main/java/org/pivxj/core/StoredBlock.java index 916e989be..cb755a01e 100644 --- a/core/src/main/java/org/pivxj/core/StoredBlock.java +++ b/core/src/main/java/org/pivxj/core/StoredBlock.java @@ -46,7 +46,7 @@ public class StoredBlock { public static final int COMPACT_SERIALIZED_SIZE = Block.HEADER_SIZE + CHAIN_WORK_BYTES + 4; // for height public static final int COMPACT_SERIALIZED_SIZE_ZEROCOIN = Block.ZEROCOIN_HEADER_SIZE + CHAIN_WORK_BYTES + 4; // for height - /** Compact size (regular or zerocoin) */ + /** Compact size (regular or protocol) */ private int compactHeaderSize; private Block header; diff --git a/core/src/main/java/org/pivxj/core/TransactionInput.java b/core/src/main/java/org/pivxj/core/TransactionInput.java index 7ec4349b2..df4b5bce6 100644 --- a/core/src/main/java/org/pivxj/core/TransactionInput.java +++ b/core/src/main/java/org/pivxj/core/TransactionInput.java @@ -17,6 +17,7 @@ package org.pivxj.core; +import com.zerocoinj.core.CoinDenomination; import org.pivxj.script.Script; import org.pivxj.wallet.DefaultRiskAnalysis; import org.pivxj.wallet.KeyBag; @@ -24,7 +25,6 @@ import com.google.common.base.Joiner; import com.google.common.base.Objects; -import org.pivxj.zerocoin.LibZerocoin; import javax.annotation.Nullable; import java.io.IOException; @@ -157,7 +157,7 @@ public boolean isCoinBase() { // Check for zcspend/zcmint if (ret){ try { - LibZerocoin.CoinDenomination.fromValue((int) sequence); + CoinDenomination.fromValue((int) sequence); return false; }catch (Exception e){ // Nothing.. @@ -167,12 +167,12 @@ public boolean isCoinBase() { } /** - * Check for zerocoin spend + * Check for protocol spend * @return */ public boolean isZcspend() { try { - LibZerocoin.CoinDenomination.fromValue((int) sequence); + CoinDenomination.fromValue((int) sequence); return true; }catch (Exception e){ // Nothing.. diff --git a/core/src/main/java/org/pivxj/core/TransactionOutput.java b/core/src/main/java/org/pivxj/core/TransactionOutput.java index c9b819d66..2eff8747a 100644 --- a/core/src/main/java/org/pivxj/core/TransactionOutput.java +++ b/core/src/main/java/org/pivxj/core/TransactionOutput.java @@ -323,8 +323,11 @@ public boolean isMine(TransactionBag transactionBag) { if (script.isSentToRawPubKey()) { byte[] pubkey = script.getPubKey(); return transactionBag.isPubKeyMine(pubkey); - } if (script.isPayToScriptHash()) { + }else if (script.isPayToScriptHash()) { return transactionBag.isPayToScriptHashMine(script.getPubKeyHash()); + } else if (script.isZcMint() || script.isZcSpend()){ + // TODO: Check if this method is right or i should create a new one.. + return transactionBag.isWatchedScript(script); } else { byte[] pubkeyHash = script.getPubKeyHash(); return transactionBag.isPubKeyHashMine(pubkeyHash); @@ -427,4 +430,8 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(value, parent, Arrays.hashCode(scriptBytes)); } + + public boolean isZcMint() { + return getScriptPubKey().isZcMint(); + } } diff --git a/core/src/main/java/org/pivxj/core/listeners/OnGetDataResponseEventListener.java b/core/src/main/java/org/pivxj/core/listeners/OnGetDataResponseEventListener.java index 5fa9d0c16..8671f6ddd 100644 --- a/core/src/main/java/org/pivxj/core/listeners/OnGetDataResponseEventListener.java +++ b/core/src/main/java/org/pivxj/core/listeners/OnGetDataResponseEventListener.java @@ -1,6 +1,6 @@ package org.pivxj.core.listeners; -import org.pivxj.zerocoin.PubcoinsMessage; +import host.furszy.zerocoinj.protocol.PubcoinsMessage; public interface OnGetDataResponseEventListener { diff --git a/core/src/main/java/org/pivxj/crypto/DeterministicKey.java b/core/src/main/java/org/pivxj/crypto/DeterministicKey.java index 4f3f2da1b..7832169f0 100644 --- a/core/src/main/java/org/pivxj/crypto/DeterministicKey.java +++ b/core/src/main/java/org/pivxj/crypto/DeterministicKey.java @@ -505,7 +505,7 @@ public static DeterministicKey deserializeB58(String base58, NetworkParameters p * @throws IllegalArgumentException if the base58 encoded key could not be parsed. */ public static DeterministicKey deserializeB58(@Nullable DeterministicKey parent, String base58, NetworkParameters params) { - return deserialize(params, Base58.decodeChecked(base58), parent, DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY); + return deserialize(params, Base58.decodeChecked(base58), parent, DeterministicKeyChain.KeyChainType.BIP44_PIV); } public static DeterministicKey deserializeB58(@Nullable DeterministicKey parent, String base58, NetworkParameters params, DeterministicKeyChain.KeyChainType keyChainType) { @@ -516,7 +516,14 @@ public static DeterministicKey deserializeB58(@Nullable DeterministicKey parent, * Deserialize an HD Key with no parent */ public static DeterministicKey deserialize(NetworkParameters params, byte[] serializedKey) { - return deserialize(params, serializedKey, null, DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY); + return deserialize(params, serializedKey, null, DeterministicKeyChain.KeyChainType.BIP44_PIV); + } + + /** + * Deserialize an HD Key with no parent + */ + public static DeterministicKey deserialize(NetworkParameters params, byte[] serializedKey, DeterministicKeyChain.KeyChainType keyChainType) { + return deserialize(params, serializedKey, null, keyChainType); } /** @@ -548,7 +555,7 @@ public static DeterministicKey deserialize(NetworkParameters params, byte[] seri // This can happen when deserializing an account key for a watching wallet. In this case, we assume that // the client wants to conceal the key's position in the hierarchy. The path is truncated at the // parent's node. - if (keyChainType == DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY){ + if (keyChainType == DeterministicKeyChain.KeyChainType.BIP44_PIV){ // this is for bip44 only path = HDUtils.append(DeterministicKeyChain.BIP44_ACCOUNT_ZERO_PATH,childNumber); }else diff --git a/core/src/main/java/org/pivxj/crypto/MnemonicCode.java b/core/src/main/java/org/pivxj/crypto/MnemonicCode.java index b942aac64..05ad5d067 100644 --- a/core/src/main/java/org/pivxj/crypto/MnemonicCode.java +++ b/core/src/main/java/org/pivxj/crypto/MnemonicCode.java @@ -134,7 +134,7 @@ public static byte[] toSeed(List words, String passphrase) { byte[] seed = PBKDF2SHA512.derive(pass, salt, PBKDF2_ROUNDS, 64); watch.stop(); log.info("PBKDF2 took {}", watch); - System.out.println("MnemonicCode class: "+ Arrays.toString(words.toArray())+", passphrase: "+passphrase+ ", \ntoSeed: "+HEX.encode(seed)); + //System.out.println("MnemonicCode class: "+ Arrays.toString(words.toArray())+", passphrase: "+passphrase+ ", \ntoSeed: "+HEX.encode(seed)); return seed; } diff --git a/core/src/main/java/org/pivxj/script/Script.java b/core/src/main/java/org/pivxj/script/Script.java index 14f51fd19..687bac4ee 100644 --- a/core/src/main/java/org/pivxj/script/Script.java +++ b/core/src/main/java/org/pivxj/script/Script.java @@ -201,7 +201,7 @@ private void parse(byte[] program) throws ScriptException { if (bis.available() < 4) throw new ScriptException("Unexpected end of script"); dataToRead = ((long)bis.read()) | (((long)bis.read()) << 8) | (((long)bis.read()) << 16) | (((long)bis.read()) << 24); } else if (opcode == OP_ZEROCOINSPEND) { - // Whole data is from zerocoin. + // Whole data is from protocol. dataToRead = bis.available(); } @@ -845,6 +845,14 @@ public boolean isUnspendable() { return chunks.size() > 1 && chunks.get(0).equalsOpCode(OP_RETURN); } + public boolean isZcMint() { + return chunks.get(0).opcode == OP_ZEROCOINMINT; + } + + public boolean isZcSpend() { + return chunks.get(0).opcode == OP_ZEROCOINSPEND; + } + /** * Exposes the script interpreter. Normally you should not use this directly, instead use * {@link org.pivxj.core.TransactionInput#verify(org.pivxj.core.TransactionOutput)} or diff --git a/core/src/main/java/org/pivxj/script/ScriptOpCodes.java b/core/src/main/java/org/pivxj/script/ScriptOpCodes.java index f0c2dc9f7..82c5c91bb 100644 --- a/core/src/main/java/org/pivxj/script/ScriptOpCodes.java +++ b/core/src/main/java/org/pivxj/script/ScriptOpCodes.java @@ -161,7 +161,7 @@ public class ScriptOpCodes { public static final int OP_NOP10 = 0xb9; public static final int OP_INVALIDOPCODE = 0xff; - // zerocoin + // protocol public static final int OP_ZEROCOINMINT = 0xc1; public static final int OP_ZEROCOINSPEND = 0xc2; diff --git a/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java b/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java index 2127d68f8..51555b7b6 100644 --- a/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java +++ b/core/src/main/java/org/pivxj/wallet/DeterministicKeyChain.java @@ -17,20 +17,21 @@ package org.pivxj.wallet; -import com.google.common.collect.Lists; -import org.pivxj.core.BloomFilter; -import org.pivxj.core.ECKey; -import org.pivxj.core.NetworkParameters; -import org.pivxj.core.Utils; +import com.google.common.collect.*; +import com.hashengineering.crypto.Sha512Hash; +import com.zerocoinj.core.CoinDenomination; +import com.zerocoinj.core.Commitment; +import com.zerocoinj.core.HashWriter; +import com.zerocoinj.core.ZCoin; +import com.zerocoinj.core.context.ZerocoinContext; +import com.zerocoinj.core.exceptions.InvalidSerialException; +import org.pivxj.core.*; import org.pivxj.crypto.*; import org.pivxj.script.Script; import org.pivxj.utils.Threading; import org.pivxj.wallet.listeners.KeyChainEventListener; import com.google.common.base.Stopwatch; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterators; -import com.google.common.collect.PeekingIterator; import com.google.protobuf.ByteString; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -124,9 +125,13 @@ public class DeterministicKeyChain implements EncryptableKeyChain { // PIVX BIP44 public static final ChildNumber BIP44_MASTER_KEY = new ChildNumber(44, true); public static final ChildNumber PIVX_PATH = new ChildNumber(119,true); + public static final ChildNumber ZPIVX_PATH = new ChildNumber(37361148,true); public static final ImmutableList BIP44_ACCOUNT_ZERO_PATH = ImmutableList.of(BIP44_MASTER_KEY, PIVX_PATH, ChildNumber.ZERO_HARDENED); + public static final ImmutableList BIP44_ACCOUNT_ZERO_PATH_ZPIV = + ImmutableList.of(BIP44_MASTER_KEY, ZPIVX_PATH, ChildNumber.ZERO_HARDENED); + // We try to ensure we have at least this many keys ready and waiting to be handed out via getKey(). // See docs for getLookaheadSize() for more info on what this is for. The -1 value means it hasn't been calculated // yet. For new chains it's set to whatever the default is, unless overridden by setLookaheadSize. For deserialized @@ -166,13 +171,15 @@ private int calcDefaultLookaheadThreshold() { // and always 1 for other transaction types protected int sigsRequiredToSpend = 1; // Key Chain type to support bip32 or bip44 - private KeyChainType keyChainType = KeyChainType.BIP44_PIVX_ONLY; + private KeyChainType keyChainType = KeyChainType.BIP44_PIV; // Key Chain version to support BIP44 fixed without refactor this code too much - public static enum KeyChainType{ - BIP32,BIP44_PIVX_ONLY + public enum KeyChainType{ + BIP32, BIP44_PIV, BIP44_ZPIV } + // Coins associated with keys + private final Map zcoins = Maps.newHashMap(); public static class Builder> { @@ -267,7 +274,7 @@ public DeterministicKeyChain build() { chain = new DeterministicKeyChain(seed); } else { watchingKey.setCreationTimeSeconds(seedCreationTimeSecs); - chain = new DeterministicKeyChain(watchingKey,KeyChainType.BIP44_PIVX_ONLY); + chain = new DeterministicKeyChain(watchingKey,KeyChainType.BIP44_PIV); } return chain; @@ -330,7 +337,7 @@ protected DeterministicKeyChain(DeterministicSeed seed,KeyChainType keyChainType * if the starting seed is the same. */ protected DeterministicKeyChain(DeterministicSeed seed) { - this(seed, null,KeyChainType.BIP44_PIVX_ONLY); + this(seed, null,KeyChainType.BIP44_PIV); } /** @@ -341,7 +348,7 @@ protected DeterministicKeyChain(DeterministicSeed seed) { public DeterministicKeyChain(DeterministicKey watchingKey,KeyChainType keyChainType) { this.keyChainType = keyChainType; checkArgument(watchingKey.isPubKeyOnly(), "Private subtrees not currently supported: if you got this key from DKC.getWatchingKey() then use .dropPrivate().dropParent() on it first."); - if (keyChainType != KeyChainType.BIP44_PIVX_ONLY) + if (keyChainType != KeyChainType.BIP44_PIV) checkArgument( watchingKey.getPath().size() == getAccountPath().size(), "You can only watch an account key currently"); basicKeyChain = new BasicKeyChain(); this.seed = null; @@ -357,7 +364,7 @@ public DeterministicKeyChain(DeterministicKey watchingKey,KeyChainType keyChainT *

Watch key has to be an account key.

*/ protected DeterministicKeyChain(DeterministicKey watchKey, boolean isFollowing) { - this(watchKey,KeyChainType.BIP44_PIVX_ONLY); + this(watchKey,KeyChainType.BIP44_PIV); this.isFollowing = isFollowing; } @@ -374,7 +381,7 @@ public static DeterministicKeyChain watchAndFollow(DeterministicKey watchKey) { * Creates a key chain that watches the given account key. */ public static DeterministicKeyChain watch(DeterministicKey accountKey) { - return new DeterministicKeyChain(accountKey,KeyChainType.BIP44_PIVX_ONLY); + return new DeterministicKeyChain(accountKey,KeyChainType.BIP44_PIV); } /** @@ -482,10 +489,12 @@ protected ImmutableList getAccountPath() { switch (keyChainType){ case BIP32: return ACCOUNT_ZERO_PATH; - case BIP44_PIVX_ONLY: + case BIP44_PIV: return BIP44_ACCOUNT_ZERO_PATH; + case BIP44_ZPIV: + return BIP44_ACCOUNT_ZERO_PATH_ZPIV; default: - throw new IllegalStateException("Uknown keyChainType"); + throw new IllegalStateException("Unknown keyChainType"); } } @@ -505,7 +514,7 @@ private DeterministicKey encryptNonLeaf(KeyParameter aesKey, DeterministicKeyCha // Derives the account path keys and inserts them into the basic key chain. This is important to preserve their // order for serialization, amongst other things. private void initializeHierarchyUnencrypted(DeterministicKey baseKey) { - if (baseKey.isPubKeyOnly() && keyChainType == KeyChainType.BIP44_PIVX_ONLY){ + if (baseKey.isPubKeyOnly() && (keyChainType == KeyChainType.BIP44_PIV || keyChainType == KeyChainType.BIP44_ZPIV )){ externalParentKey = baseKey; internalParentKey = baseKey; addToBasicChain(externalParentKey); @@ -709,7 +718,7 @@ public DeterministicKey getKeyByPath(List path, boolean create) { public DeterministicKey getWatchingKey() { List childNumbers = Lists.newArrayList(getAccountPath()); // first account only - if (keyChainType == KeyChainType.BIP44_PIVX_ONLY){ + if (keyChainType == KeyChainType.BIP44_PIV || keyChainType == KeyChainType.BIP44_ZPIV){ childNumbers.add(ChildNumber.ZERO); } return getKeyByPath(childNumbers,true); @@ -866,16 +875,28 @@ public static List fromProtobuf(List keys, @N int sigsRequiredToSpend = 1; // Determine KeyChainType - KeyChainType keyChainType = KeyChainType.BIP44_PIVX_ONLY; + KeyChainType keyChainType = KeyChainType.BIP44_PIV; // Quick loop to see if the first key correspond to a BIP44 path. + boolean checkNext = false; for (Protos.Key key : keys) { // Deserialize the path through the tree. LinkedList path = newLinkedList(); for (int i : key.getDeterministicKey().getPathList()) path.add(new ChildNumber(i)); - if (!path.isEmpty() && path.get(0).equals(BIP44_MASTER_KEY)){ - // is BIP44 - keyChainType = KeyChainType.BIP44_PIVX_ONLY; + + if (!checkNext) { + if (!path.isEmpty() && path.get(0).equals(BIP44_MASTER_KEY)) { + // is BIP44 + checkNext = true; + continue; + } + }else { + ChildNumber coinType = path.get(1); + if (coinType.equals(PIVX_PATH)) { + keyChainType = KeyChainType.BIP44_PIV; + } else if (coinType.equals(ZPIVX_PATH)) { + keyChainType = KeyChainType.BIP44_ZPIV; + } break; } } @@ -1049,7 +1070,7 @@ public DeterministicKeyChain toEncrypted(CharSequence password) { @Override public DeterministicKeyChain toEncrypted(KeyCrypter keyCrypter, KeyParameter aesKey) { - return toEncrypted(keyCrypter,aesKey,KeyChainType.BIP44_PIVX_ONLY); + return toEncrypted(keyCrypter,aesKey,KeyChainType.BIP44_PIV); } public DeterministicKeyChain toEncrypted(KeyCrypter keyCrypter, KeyParameter aesKey, KeyChainType keyChainType) { @@ -1261,8 +1282,9 @@ private List maybeLookAhead(DeterministicKey parent, int issue if (needed <= lookaheadThreshold) return new ArrayList(); - log.info("{} keys needed for {} = {} issued + {} lookahead size + {} lookahead threshold - {} num children", - needed, parent.getPathAsString(), issued, lookaheadSize, lookaheadThreshold, numChildren); + boolean createZcoins = keyChainType == KeyChainType.BIP44_ZPIV; + log.info("{} keys needed for {} = {} issued + {} lookahead size + {} lookahead threshold - {} num children - Zcoins flag {} ", + needed, parent.getPathAsString(), issued, lookaheadSize, lookaheadThreshold, numChildren, createZcoins); List result = new ArrayList(needed); final Stopwatch watch = Stopwatch.createStarted(); @@ -1273,12 +1295,52 @@ private List maybeLookAhead(DeterministicKey parent, int issue hierarchy.putKey(key); result.add(key); nextChild = key.getChildNumber().num() + 1; + // zcoin TODO: Check this.. the map is not well.. + if (createZcoins){ + try{ + generateZcoin(key); + } catch (InvalidSerialException e) { + log.info("invalid serial",e); + } + } } watch.stop(); log.info("Took {}", watch); return result; } + private void generateZcoin(DeterministicKey key) throws InvalidSerialException { + ZerocoinContext context = Context.get().zerocoinContext; + Sha256Hash trimmedRandomness = Sha256Hash.twiceOf(key.getPrivKeyBytes()); // Here the core is using a Sha512.. + BigInteger randomness = HashWriter.toUint256(trimmedRandomness.getReversedBytes()).mod(context.coinCommitmentGroup.getGroupOrder()); + BigInteger serial = ZCoin.generateSerial(key); + Commitment commitment = new Commitment(serial, randomness, context.coinCommitmentGroup); + + BigInteger attempts = BigInteger.ZERO; + while (!ZCoin.isCoinValueValid(context, commitment.getCommitmentValue())){ + attempts = attempts.add(BigInteger.ONE); + byte[] seed = trimmedRandomness.getReversedBytes(); + byte[] r = Utils.serializeBigInteger(attempts); + randomness = + HashWriter.toUint256( + Sha256Hash.hashTwice( + seed, 0, seed.length, + r, 0, r.length + ) + ).mod(context.coinCommitmentGroup.getGroupOrder()); + commitment = new Commitment(serial, randomness, context.coinCommitmentGroup); + } + + zcoins.put( + key, ZCoin.mintCoinH( + Context.get().zerocoinContext, + key, + CoinDenomination.ZQ_ERROR, + commitment + ) + ); + } + /** Housekeeping call to call when lookahead might be needed. Normally called automatically by KeychainGroup. */ public void maybeLookAheadScripts() { } @@ -1412,6 +1474,10 @@ public RedeemData getRedeemData(DeterministicKey followedKey) { throw new UnsupportedOperationException(); } + public ZCoin getZcoinsAssociated(DeterministicKey key) { + return zcoins.get(key); + } + /** Create a new key and return the matching output script. Only applicable to married keychains. */ public Script freshOutputScript(KeyPurpose purpose) { throw new UnsupportedOperationException(); diff --git a/core/src/main/java/org/pivxj/wallet/KeyChainGroup.java b/core/src/main/java/org/pivxj/wallet/KeyChainGroup.java index a02180d62..90124e929 100644 --- a/core/src/main/java/org/pivxj/wallet/KeyChainGroup.java +++ b/core/src/main/java/org/pivxj/wallet/KeyChainGroup.java @@ -19,12 +19,14 @@ import com.google.common.collect.*; import com.google.protobuf.*; +import com.zerocoinj.core.ZCoin; import org.pivxj.core.*; import org.pivxj.crypto.*; import org.pivxj.script.*; import org.pivxj.utils.*; import org.pivxj.wallet.listeners.KeyChainEventListener; import org.slf4j.*; +import org.spongycastle.crypto.Commitment; import org.spongycastle.crypto.params.*; import javax.annotation.*; @@ -267,6 +269,15 @@ public final DeterministicKeyChain getActiveKeyChain() { return chains.get(chains.size() - 1); } + /** + * + * @param key + * @return + */ + public ZCoin getZcoinsAssociated(DeterministicKey key) { + return getActiveKeyChain().getZcoinsAssociated(key); + } + /** * Sets the lookahead buffer size for ALL deterministic key chains as well as for following key chains if any exist, * see {@link DeterministicKeyChain#setLookaheadSize(int)} @@ -827,4 +838,5 @@ public int getCombinedKeyLookaheadEpochs() { epoch += chain.getKeyLookaheadEpoch(); return epoch; } + } diff --git a/core/src/main/java/org/pivxj/wallet/Wallet.java b/core/src/main/java/org/pivxj/wallet/Wallet.java index aad2a7eae..3cc730251 100644 --- a/core/src/main/java/org/pivxj/wallet/Wallet.java +++ b/core/src/main/java/org/pivxj/wallet/Wallet.java @@ -23,6 +23,7 @@ import com.google.common.primitives.*; import com.google.common.util.concurrent.*; import com.google.protobuf.*; +import com.zerocoinj.core.ZCoin; import net.jcip.annotations.*; import org.pivxj.core.*; import org.pivxj.core.Message; @@ -42,6 +43,7 @@ import org.pivxj.wallet.listeners.WalletEventListener; import org.pivxj.wallet.listeners.WalletReorganizeEventListener; import org.slf4j.*; +import org.spongycastle.crypto.Commitment; import org.spongycastle.crypto.params.*; import javax.annotation.*; @@ -307,7 +309,7 @@ private Wallet(Context context, KeyChainGroup keyChainGroup) { if (this.keyChainGroup.numKeys() == 0) this.keyChainGroup.createAndActivateNewHDChain(); // wallet version 1 if the key chain is a bip44 - //this.version = this.keyChainGroup.getActiveKeyChain().getKeyChainType() == DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY? 1 : 0; + //this.version = this.keyChainGroup.getActiveKeyChain().getKeyChainType() == DeterministicKeyChain.KeyChainType.BIP44_PIV? 1 : 0; watchedScripts = Sets.newHashSet(); unspent = new HashMap(); spent = new HashMap(); @@ -472,6 +474,30 @@ public List freshKeys(KeyChain.KeyPurpose purpose, int numberO return keys; } + /** + * + * @param purpose + * @param numberOfKeys + * @return + */ + public List freshZcoins(KeyChain.KeyPurpose purpose, int numberOfKeys) { + List keysCommitments = new ArrayList<>(); + List keys; + keyChainGroupLock.lock(); + try { + keys = keyChainGroup.freshKeys(purpose, numberOfKeys); + for (DeterministicKey key : keys) { + keysCommitments.add(keyChainGroup.getZcoinsAssociated(key)); + } + } finally { + keyChainGroupLock.unlock(); + } + // Do we really need an immediate hard save? Arguably all this is doing is saving the 'current' key + // and that's not quite so important, so we could coalesce for more performance. + saveNow(); + return keysCommitments; + } + /** * An alias for calling {@link #freshKey(org.pivxj.wallet.KeyChain.KeyPurpose)} with * {@link org.pivxj.wallet.KeyChain.KeyPurpose#RECEIVE_FUNDS} as the parameter. @@ -3990,8 +4016,12 @@ public void completeTx(SendRequest req) throws InsufficientMoneyException { checkArgument(!req.completed, "Given SendRequest has already been completed."); // Calculate the amount of value we need to import. Coin value = Coin.ZERO; + int zcMintAmount = 0; for (TransactionOutput output : req.tx.getOutputs()) { value = value.add(output.getValue()); + if (output.isZcMint()){ + zcMintAmount++; + } } log.info("Completing send tx with {} outputs totalling {} (not including fees)", @@ -4031,7 +4061,7 @@ public void completeTx(SendRequest req) throws InsufficientMoneyException { TransactionOutput bestChangeOutput = null; if (!req.emptyWallet) { // This can throw InsufficientMoneyException. - FeeCalculation feeCalculation = calculateFee(req, value, originalInputs, req.ensureMinRequiredFee, candidates); + FeeCalculation feeCalculation = calculateFee(req, value, originalInputs, req.ensureMinRequiredFee, candidates, zcMintAmount); bestCoinSelection = feeCalculation.bestCoinSelection; bestChangeOutput = feeCalculation.bestChangeOutput; } else { @@ -4888,7 +4918,7 @@ private static class FeeCalculation { //region Fee calculation code public FeeCalculation calculateFee(SendRequest req, Coin value, List originalInputs, - boolean needAtLeastReferenceFee, List candidates) throws InsufficientMoneyException { + boolean needAtLeastReferenceFee, List candidates, int amountOfZcMints) throws InsufficientMoneyException { checkState(lock.isHeldByCurrentThread()); // There are 3 possibilities for what adding change might do: // 1) No effect @@ -4919,6 +4949,10 @@ public FeeCalculation calculateFee(SendRequest req, Coin value, List 0){ + fees = CoinDefinition.MIN_ZEROCOIN_MINT_FEE.times(amountOfZcMints); + } valueNeeded = value.add(fees); if (additionalValueForNextCategory != null) diff --git a/core/src/main/java/org/pivxj/zerocoin/LibZerocoin.java b/core/src/main/java/org/pivxj/zerocoin/LibZerocoin.java deleted file mode 100644 index 30195024b..000000000 --- a/core/src/main/java/org/pivxj/zerocoin/LibZerocoin.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.pivxj.zerocoin; - -public class LibZerocoin { - - public enum CoinDenomination { - ZQ_ERROR(0), - ZQ_ONE(1), - ZQ_FIVE(5), - ZQ_TEN(10), - ZQ_FIFTY(50), - ZQ_ONE_HUNDRED(100), - ZQ_FIVE_HUNDRED(500), - ZQ_ONE_THOUSAND(1000), - ZQ_FIVE_THOUSAND(5000); - - private int denomination; - - CoinDenomination(int denomination) { - this.denomination = denomination; - } - - public int getDenomination() { - return denomination; - } - - public static CoinDenomination fromValue(int value){ - for (CoinDenomination coinDenomination : values()) { - if (coinDenomination.denomination == value){ - return coinDenomination; - } - } - throw new IllegalArgumentException("Coin denomination doesn't exists"); - } - }; - -} diff --git a/core/src/test/java/org/pivxj/core/AddressTest.java b/core/src/test/java/org/pivxj/core/AddressTest.java index 192034463..a68b90d94 100644 --- a/core/src/test/java/org/pivxj/core/AddressTest.java +++ b/core/src/test/java/org/pivxj/core/AddressTest.java @@ -23,6 +23,7 @@ import org.pivxj.script.Script; import org.pivxj.script.ScriptBuilder; import org.junit.Test; +import org.spongycastle.util.encoders.Hex; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -40,14 +41,14 @@ public class AddressTest { @Test public void testJavaSerialization() throws Exception { - Address testAddress = Address.fromBase58(testParams, "n4eA2nbYqErp7H6jebchxAN59DmNpksexv"); + Address testAddress = Address.fromBase58(testParams, "y4EmHcSgo7Tent6cWkehtG1QZdEmxJwMBG"); ByteArrayOutputStream os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(testAddress); VersionedChecksummedBytes testAddressCopy = (VersionedChecksummedBytes) new ObjectInputStream( new ByteArrayInputStream(os.toByteArray())).readObject(); assertEquals(testAddress, testAddressCopy); - Address mainAddress = Address.fromBase58(mainParams, "17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL"); + Address mainAddress = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); os = new ByteArrayOutputStream(); new ObjectOutputStream(os).writeObject(mainAddress); VersionedChecksummedBytes mainAddressCopy = (VersionedChecksummedBytes) new ObjectInputStream( @@ -57,10 +58,11 @@ public void testJavaSerialization() throws Exception { @Test public void stringification() throws Exception { + if(CoinDefinition.supportsTestNet) { // Test a testnet address. - Address a = new Address(testParams, HEX.decode("fda79a24e50ff70ff42f7d89585da5bd19d9e5cc")); - assertEquals("n4eA2nbYqErp7H6jebchxAN59DmNpksexv", a.toString()); + Address a = new Address(testParams, HEX.decode("4f9b4c8a7412b41eb7f2b471edcf83b8fd22d41c")); + assertEquals("y4EmHcSgo7Tent6cWkehtG1QZdEmxJwMBG", a.toString()); assertFalse(a.isP2SHAddress()); } Address b = new Address(mainParams, HEX.decode("4a22c3c4cbb31e4d03b15550636762bda0baf85a")); @@ -71,11 +73,11 @@ public void stringification() throws Exception { @Test public void decoding() throws Exception { - Address a = Address.fromBase58(testParams, "n4eA2nbYqErp7H6jebchxAN59DmNpksexv"); - assertEquals("fda79a24e50ff70ff42f7d89585da5bd19d9e5cc", Utils.HEX.encode(a.getHash160())); + Address a = Address.fromBase58(testParams, "y4EmHcSgo7Tent6cWkehtG1QZdEmxJwMBG"); + assertEquals("4f9b4c8a7412b41eb7f2b471edcf83b8fd22d41c", Utils.HEX.encode(a.getHash160())); - Address b = Address.fromBase58(mainParams, "17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL"); - assertEquals("4a22c3c4cbb31e4d03b15550636762bda0baf85a", Utils.HEX.encode(b.getHash160())); + Address b = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); + assertEquals("d88fb72e7b7478af88c095061ce6153ca22c203c", Utils.HEX.encode(b.getHash160())); } @Test public void errorPaths() { @@ -101,7 +103,7 @@ public void errorPaths() { // Check the case of a mismatched network. try { - Address.fromBase58(testParams, "17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL"); + Address.fromBase58(testParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); fail(); } catch (WrongNetworkException e) { // Success. @@ -118,7 +120,7 @@ public void getNetwork() throws Exception { assertEquals(MainNetParams.get().getId(), params.getId()); if(CoinDefinition.supportsTestNet) { - params = Address.getParametersFromAddress("n4eA2nbYqErp7H6jebchxAN59DmNpksexv"); + params = Address.getParametersFromAddress("y4EmHcSgo7Tent6cWkehtG1QZdEmxJwMBG"); assertEquals(TestNet3Params.get().getId(), params.getId()); } } @@ -142,7 +144,7 @@ class AltNetwork extends MainNetParams { NetworkParameters params = Address.getParametersFromAddress("LLxSnHLN2CYyzB5eWTR9K9rS9uWtbTQFb6"); assertEquals(altNetwork.getId(), params.getId()); // Check if main network works as before - params = Address.getParametersFromAddress("17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL"); + params = Address.getParametersFromAddress("DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); assertEquals(MainNetParams.get().getId(), params.getId()); // Unregister network Networks.unregister(altNetwork); @@ -155,48 +157,48 @@ class AltNetwork extends MainNetParams { @Test public void p2shAddress() throws Exception { // Test that we can construct P2SH addresses - Address mainNetP2SHAddress = Address.fromBase58(MainNetParams.get(), "35b9vsyH1KoFT5a5KtrKusaCcPLkiSo1tU"); + Address mainNetP2SHAddress = Address.fromBase58(MainNetParams.get(), "6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1"); assertEquals(mainNetP2SHAddress.version, MainNetParams.get().p2shHeader); assertTrue(mainNetP2SHAddress.isP2SHAddress()); - Address testNetP2SHAddress = Address.fromBase58(TestNet3Params.get(), "2MuVSxtfivPKJe93EC1Tb9UhJtGhsoWEHCe"); + Address testNetP2SHAddress = Address.fromBase58(TestNet3Params.get(), "8pPApY8B9mrA1EsaQxfjxGV7doPAKPKgWj"); assertEquals(testNetP2SHAddress.version, TestNet3Params.get().p2shHeader); assertTrue(testNetP2SHAddress.isP2SHAddress()); // Test that we can determine what network a P2SH address belongs to - NetworkParameters mainNetParams = Address.getParametersFromAddress("35b9vsyH1KoFT5a5KtrKusaCcPLkiSo1tU"); + NetworkParameters mainNetParams = Address.getParametersFromAddress("6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1"); assertEquals(MainNetParams.get().getId(), mainNetParams.getId()); - NetworkParameters testNetParams = Address.getParametersFromAddress("2MuVSxtfivPKJe93EC1Tb9UhJtGhsoWEHCe"); + NetworkParameters testNetParams = Address.getParametersFromAddress("8pPApY8B9mrA1EsaQxfjxGV7doPAKPKgWj"); assertEquals(TestNet3Params.get().getId(), testNetParams.getId()); // Test that we can convert them from hashes - byte[] hex = HEX.decode("2ac4b0b501117cc8119c5797b519538d4942e90e"); + byte[] hex = HEX.decode("bdddbfdf7f8cc7ab7d42361324d036004204cf83"); Address a = Address.fromP2SHHash(mainParams, hex); - assertEquals("35b9vsyH1KoFT5a5KtrKusaCcPLkiSo1tU", a.toString()); - Address b = Address.fromP2SHHash(testParams, HEX.decode("18a0e827269b5211eb51a4af1b2fa69333efa722")); - assertEquals("2MuVSxtfivPKJe93EC1Tb9UhJtGhsoWEHCe", b.toString()); + assertEquals("6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1", a.toString()); + Address b = Address.fromP2SHHash(testParams, HEX.decode("6d425404bc3a9e8ed54fad0a0b4e42a84df49bc3")); + assertEquals("8pPApY8B9mrA1EsaQxfjxGV7doPAKPKgWj", b.toString()); Address c = Address.fromP2SHScript(mainParams, ScriptBuilder.createP2SHOutputScript(hex)); - assertEquals("35b9vsyH1KoFT5a5KtrKusaCcPLkiSo1tU", c.toString()); + assertEquals("6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1", c.toString()); } @Test public void p2shAddressCreationFromKeys() throws Exception { // import some keys from this example: https://gist.github.com/gavinandresen/3966071 - ECKey key1 = DumpedPrivateKey.fromBase58(mainParams, "5JaTXbAUmfPYZFRwrYaALK48fN6sFJp4rHqq2QSXs8ucfpE4yQU").getKey(); + ECKey key1 = DumpedPrivateKey.fromBase58(mainParams, "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ").getKey(); key1 = ECKey.fromPrivate(key1.getPrivKeyBytes()); - ECKey key2 = DumpedPrivateKey.fromBase58(mainParams, "5Jb7fCeh1Wtm4yBBg3q3XbT6B525i17kVhy3vMC9AqfR6FH2qGk").getKey(); + ECKey key2 = DumpedPrivateKey.fromBase58(mainParams, "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ").getKey(); key2 = ECKey.fromPrivate(key2.getPrivKeyBytes()); - ECKey key3 = DumpedPrivateKey.fromBase58(mainParams, "5JFjmGo5Fww9p8gvx48qBYDJNAzR9pmH5S389axMtDyPT8ddqmw").getKey(); + ECKey key3 = DumpedPrivateKey.fromBase58(mainParams, "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ").getKey(); key3 = ECKey.fromPrivate(key3.getPrivKeyBytes()); List keys = Arrays.asList(key1, key2, key3); Script p2shScript = ScriptBuilder.createP2SHOutputScript(2, keys); Address address = Address.fromP2SHScript(mainParams, p2shScript); - assertEquals("3N25saC4dT24RphDAwLtD8LUN4E2gZPJke", address.toString()); + assertEquals("6EbNF32C3ZRTkuRAA71rPaujLRouXq59HF", address.toString()); } @Test public void cloning() throws Exception { - Address a = new Address(testParams, HEX.decode("fda79a24e50ff70ff42f7d89585da5bd19d9e5cc")); + Address a = new Address(testParams, HEX.decode("4f9b4c8a7412b41eb7f2b471edcf83b8fd22d41c")); Address b = a.clone(); assertEquals(a, b); @@ -205,13 +207,13 @@ public void cloning() throws Exception { @Test public void roundtripBase58() throws Exception { - String base58 = "17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL"; + String base58 = "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"; assertEquals(base58, Address.fromBase58(null, base58).toBase58()); } @Test public void comparisonCloneEqualTo() throws Exception { - Address a = Address.fromBase58(mainParams, "1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX"); + Address a = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); Address b = a.clone(); int result = a.compareTo(b); @@ -220,7 +222,7 @@ public void comparisonCloneEqualTo() throws Exception { @Test public void comparisonEqualTo() throws Exception { - Address a = Address.fromBase58(mainParams, "1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX"); + Address a = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); Address b = a.clone(); int result = a.compareTo(b); @@ -229,8 +231,8 @@ public void comparisonEqualTo() throws Exception { @Test public void comparisonLessThan() throws Exception { - Address a = Address.fromBase58(mainParams, "1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX"); - Address b = Address.fromBase58(mainParams, "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P"); + Address a = Address.fromBase58(mainParams, "DMdKx4UdSdsK85nUqVmmrH6JgTLPk3xDtz"); + Address b = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); int result = a.compareTo(b); assertTrue(result < 0); @@ -238,8 +240,8 @@ public void comparisonLessThan() throws Exception { @Test public void comparisonGreaterThan() throws Exception { - Address a = Address.fromBase58(mainParams, "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P"); - Address b = Address.fromBase58(mainParams, "1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX"); + Address a = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); + Address b = Address.fromBase58(mainParams, "DMdKx4UdSdsK85nUqVmmrH6JgTLPk3xDtz"); int result = a.compareTo(b); assertTrue(result > 0); @@ -248,8 +250,8 @@ public void comparisonGreaterThan() throws Exception { @Test public void comparisonBytesVsString() throws Exception { // TODO: To properly test this we need a much larger data set - Address a = Address.fromBase58(mainParams, "1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX"); - Address b = Address.fromBase58(mainParams, "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P"); + Address a = Address.fromBase58(mainParams, "DMdKx4UdSdsK85nUqVmmrH6JgTLPk3xDtz"); + Address b = Address.fromBase58(mainParams, "DQtAfE2omdMov3s8kviAASj3PBqz2f5Wtm"); int resultBytes = a.compareTo(b); int resultsString = a.toString().compareTo(b.toString()); diff --git a/core/src/test/java/org/pivxj/core/BitcoinSerializerTest.java b/core/src/test/java/org/pivxj/core/BitcoinSerializerTest.java index 2e039ca6f..9225bc413 100644 --- a/core/src/test/java/org/pivxj/core/BitcoinSerializerTest.java +++ b/core/src/test/java/org/pivxj/core/BitcoinSerializerTest.java @@ -29,6 +29,9 @@ import static org.pivxj.core.Utils.HEX; import static org.junit.Assert.*; +/** + * TODO: FIXME + */ public class BitcoinSerializerTest { private static final byte[] ADDRESS_MESSAGE_BYTES = HEX.decode("f9beb4d96164647200000000000000001f000000" + "ed52399b01e215104d010000000000000000000000000000000000ffff0a000001208d"); diff --git a/core/src/test/java/org/pivxj/core/DumpedPrivateKeyTest.java b/core/src/test/java/org/pivxj/core/DumpedPrivateKeyTest.java index 9b9deb45a..3f4579f2c 100644 --- a/core/src/test/java/org/pivxj/core/DumpedPrivateKeyTest.java +++ b/core/src/test/java/org/pivxj/core/DumpedPrivateKeyTest.java @@ -35,12 +35,12 @@ public class DumpedPrivateKeyTest { @Test public void checkNetwork() throws Exception { - DumpedPrivateKey.fromBase58(MAINNET, "5HtUCLMFWNueqN9unpgX2DzjMg6SDNZyKRb8s3LJgpFg5ubuMrk"); + DumpedPrivateKey.fromBase58(MAINNET, "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ"); } @Test(expected = WrongNetworkException.class) public void checkNetworkWrong() throws Exception { - DumpedPrivateKey.fromBase58(TESTNET, "5HtUCLMFWNueqN9unpgX2DzjMg6SDNZyKRb8s3LJgpFg5ubuMrk"); + DumpedPrivateKey.fromBase58(TESTNET, "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ"); } @Test @@ -66,7 +66,7 @@ public void cloning() throws Exception { @Test public void roundtripBase58() throws Exception { - String base58 = "5HtUCLMFWNueqN9unpgX2DzjMg6SDNZyKRb8s3LJgpFg5ubuMrk"; + String base58 = "YQsMtn5eGmNsn8GpUH7r8JRsPW2unPjNZ8AGAjX7uXGUzuN2SzCQ"; assertEquals(base58, DumpedPrivateKey.fromBase58(null, base58).toBase58()); } } diff --git a/core/src/test/java/org/pivxj/core/MatiTest.java b/core/src/test/java/org/pivxj/core/MatiTest.java index b81c8dbca..93f0f3687 100644 --- a/core/src/test/java/org/pivxj/core/MatiTest.java +++ b/core/src/test/java/org/pivxj/core/MatiTest.java @@ -1,1231 +1,1219 @@ -package org.pivxj.core; - -import com.google.common.base.Charsets; -import com.google.common.base.Stopwatch; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import com.hashengineering.crypto.Hash9; -import org.junit.Assert; -import org.pivxj.core.listeners.*; -import org.pivxj.crypto.*; -import org.pivxj.net.discovery.DnsDiscovery; -import org.pivxj.net.discovery.PeerDiscovery; -import org.pivxj.net.discovery.PeerDiscoveryException; -import org.pivxj.params.MainNetParams; -import org.pivxj.params.TestNet3Params; -import org.pivxj.script.Script; -import org.pivxj.script.ScriptBuilder; -import org.pivxj.script.ScriptChunk; -import org.pivxj.script.ScriptOpCodes; -import org.pivxj.store.BlockStore; -import org.pivxj.store.BlockStoreException; -import org.pivxj.store.LevelDBBlockStore; -import org.pivxj.utils.BriefLogFormatter; -import org.pivxj.wallet.*; -import org.junit.Test; -import org.pivxj.zerocoin.GenWitMessage; -import org.pivxj.zerocoin.LibZerocoin; -import org.pivxj.zerocoin.PubcoinsMessage; -import org.slf4j.Logger; -import org.slf4j.event.Level; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.util.encoders.Hex; -import sun.applet.Main; - -import javax.annotation.Nullable; -import java.io.*; -import java.lang.reflect.Method; -import java.math.BigInteger; -import java.net.InetSocketAddress; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.security.SecureRandom; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.logging.FileHandler; -import java.util.logging.Handler; -import java.util.logging.SimpleFormatter; - -/** - * Created by furszy on 6/23/17. - */ -public class MatiTest { - - @Test - public void connectAndGetPubcoinsdata(){ - - final NetworkParameters params = MainNetParams.get(); - PeerGroup peerGroup = new PeerGroup(params); - peerGroup.start(); - Peer peer = peerGroup.connectTo(new InetSocketAddress(7776)); - - peer.addOnGetDataResponseEventListener(new OnGetDataResponseEventListener() { - @Override - public void onResponseReceived(PubcoinsMessage pubcoinsMessage) { - System.out.println("size: " + pubcoinsMessage.getList().size()); - } - }); - - peer.addConnectedEventListener(new PeerConnectedEventListener() { - @Override - public void onPeerConnected(Peer peer, int i) { - System.out.println("Peer connected, seinding getdata"); - //GetDataMessage getDataMessage = new GetDataMessage(params); - //getDataMessage.addPubcoinsBlockHash( - // Sha256Hash.wrap("ed56ff1e1abd88e5dce0b52f8951970c86d94ec526c0007bf2bad4ca10ba3ac4") - //); - GenWitMessage genWitMessage = new GenWitMessage( - params, - 1245475, - LibZerocoin.CoinDenomination.ZQ_ONE, - 1, 0.001, (long) (Math.random() * Long.MAX_VALUE) - ); - BigInteger bnValue = new BigInteger("49562934426197246361341302937888166535958820127560563046688232084681663408334057925442609971010765290980273589195421234926681824529604731044735511851429332795902473030281542943546216458161997423614193390428379820294894150716196038837775465627137407450997323837703190642031432725966841831797669052225113685451"); - genWitMessage.insert(bnValue); - peer.sendMessage(genWitMessage); - } - }); - - while (true){ - try { - TimeUnit.SECONDS.sleep(90); - } catch (InterruptedException e) { - e.printStackTrace(); - } - break; - } - } - - @Test - public void hash() throws UnsupportedEncodingException { - byte[] bytes = "add".getBytes("UTF-8"); - byte[] res = Hash9.digest(bytes); - System.out.println(Hex.toHexString(res)); - } - - @Test - public void connectTestnetPeer(){ - NetworkParameters networkParameters = TestNet3Params.get(); - Context context = new Context(networkParameters); - VersionMessage versionMessage = new VersionMessage(networkParameters, 0); - versionMessage.relayTxesBeforeFilter=false; - Peer peer = new Peer(networkParameters,versionMessage,new PeerAddress("warrows.fr",51474),null); - peer.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - System.out.println("left: "+blocksLeft); - } - }); - peer.addConnectedEventListener(new PeerConnectedEventListener() { - @Override - public void onPeerConnected(Peer peer, int peerCount) { - System.out.println("connected"); - } - }); - peer.startBlockChainDownload(); - } - - @Test - public void connectPeer(){ - NetworkParameters networkParameters = MainNetParams.get(); - Context context = new Context(networkParameters); - VersionMessage versionMessage = new VersionMessage(networkParameters, 0); - versionMessage.relayTxesBeforeFilter=false; - Peer peer = new Peer(networkParameters,versionMessage,new PeerAddress("localhost",51472),null); - peer.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - System.out.println("left: "+blocksLeft); - } - }); - peer.addConnectedEventListener(new PeerConnectedEventListener() { - @Override - public void onPeerConnected(Peer peer, int peerCount) { - System.out.println("connected"); - } - }); - } - - @Test - public void accountDetailsTest(){ - - NetworkParameters networkParameters = MainNetParams.get(); - String words = "bronze crop radio roof bright tomorrow jump hover drift habit title pistol shine piano truly afraid atom salon easily fork toward action ancient clerk"; - List list = new ArrayList(); - list.addAll(Arrays.asList(words.split(" "))); - DeterministicSeed seed = new DeterministicSeed(list, null, "", System.currentTimeMillis()); - Wallet wallet = Wallet.fromSeed( - networkParameters, - seed, - DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY - ); - - System.out.println("Wallet version: "+wallet.getVersion()); - - DeterministicKeyChain deterministicKeyChain = wallet.getActiveKeyChain(); - DeterministicKey account = deterministicKeyChain.getWatchingKey(); - System.out.println("path: "+account.getPath()); - System.out.println("xpub: "+account.serializePubB58(networkParameters)); - System.out.println("xpriv: "+account.serializePrivB58(networkParameters)); - - List mnemonic = deterministicKeyChain.getSeed().getMnemonicCode(); - StringBuilder stringBuilder = new StringBuilder(); - for (String s : mnemonic) { - stringBuilder.append(s).append(" "); - } - System.out.println("words: "+stringBuilder.toString()); - - System.out.println("printing some addresses.."); - DeterministicKey addressKey1 = wallet.freshReceiveKey(); - System.out.println("address path: "+addressKey1.getPath()+" "+addressKey1.toAddress(networkParameters).toBase58()); - DeterministicKey addressKey2 = wallet.freshReceiveKey(); - System.out.println("address path: "+addressKey2.getPath()+" "+addressKey2.toAddress(networkParameters).toBase58()); - DeterministicKey addressKey3 = wallet.freshReceiveKey(); - System.out.println("address path: "+addressKey3.getPath()+" "+addressKey3.toAddress(networkParameters).toBase58()); - DeterministicKey addressKey4 = wallet.freshReceiveKey(); - System.out.println("address path: "+addressKey4.getPath()+" "+addressKey4.toAddress(networkParameters).toBase58()); - - Protos.Wallet protoWallet = new WalletProtobufSerializer().walletToProto(wallet); - System.out.println("Proto wallet version: " + protoWallet.getVersion()); - - InputStream is = null; - try { - is = new ByteArrayInputStream(protoWallet.toByteArray()); - final Wallet wallet2 = new WalletProtobufSerializer().readWallet(is, true, null); - - System.out.println("Restore wallet working"); - - } catch (UnreadableWalletException e) { - e.printStackTrace(); - }catch (Exception e){ - e.printStackTrace(); - }finally { - try { - if (is != null) { - is.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - @Test - public void publicKeyToAddress(){ - - NetworkParameters params = MainNetParams.get(); - String pubKey = "0244c064ee0b6bd3763736ad3ba60bf1d5a9c72d26b57ee13f4658476d6c6e1bec"; - DeterministicKey key = DeterministicKey.deserialize(params,Hex.decode(pubKey)); - //Address address = Address.fromP2SHHash(params,); - - System.out.printf("address: "+key.toAddress(params).toBase58()); - - } - - public Wallet restore(NetworkParameters networkParameters) throws IOException { - String filename = "2.0.32_pivx-wallet-backup_org.pivx.production-2017-11-20"; - //"1.01_pivx-wallet-backup_org.pivx.production-2017-07-26 (2)"; - String password = "123";//"12345678"; - - - File file = new File(filename); - final BufferedReader cipherIn = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8)); - final StringBuilder cipherText = new StringBuilder(); - copy(cipherIn, cipherText, 10000000); - cipherIn.close(); - - final byte[] plainText = Crypto.decryptBytes(cipherText.toString(), password.toCharArray()); - final InputStream is = new ByteArrayInputStream(plainText); - - Wallet wallet = restoreWalletFromProtobufOrBase58(is, networkParameters, 10000000); - return wallet; - } - - @Test - public void restoreFromBackup() throws IOException { - NetworkParameters networkParameters = MainNetParams.get(); - - Wallet wallet = restore(networkParameters); - - String seed = wallet.getKeyChainSeed().toHexString(); - String watchingKey = wallet.getWatchingKey().serializePubB58(networkParameters); - System.out.println("seed: "+seed); - System.out.println("watching key: "+watchingKey); - System.out.println("mnemonic code: "+Arrays.toString(wallet.getActiveKeyChain().getMnemonicCode().toArray())); - - - System.out.println("#############################################"); - - List mnemonicTwo = wallet.getActiveKeyChain().getMnemonicCode(); - DeterministicSeed seedBase = new DeterministicSeed(mnemonicTwo, null, "", 0); - Wallet wallet2 = Wallet.fromSeed( - networkParameters, - seedBase, - DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY - ); - - String seed2 = wallet2.getKeyChainSeed().toHexString(); - String watchingKey2 = wallet2.getWatchingKey().serializePubB58(networkParameters); - System.out.println("seed2: "+seed2); - System.out.println("watching2 key: "+watchingKey2); - System.out.println("mnemonic2 code: "+Arrays.toString(wallet2.getActiveKeyChain().getMnemonicCode().toArray())); - - assert seed.equals(seed2) : "seeds are not equals"; - assert watchingKey2.equals(watchingKey) : "key are not the same"; - } - - @Test - public void restoreFromMnemonic(){ - - NetworkParameters networkParameters = MainNetParams.get(); - - String mnemonic = "predict, will, purchase, figure, actor, laptop, marine, blind, upper, valve, carry, coyote, side, that, home, purchase, tide, mixture, hospital, front, fun, sniff, draft, execute"; - mnemonic = mnemonic.trim().replace(",",""); - List list = new ArrayList(); - list.addAll(Arrays.asList(mnemonic.split(" "))); - DeterministicSeed seed = new DeterministicSeed(list, null, "", 0); - Wallet wallet = Wallet.fromSeed( - networkParameters, - seed, - DeterministicKeyChain.KeyChainType.BIP32 - ); - - DeterministicKey xpubKey = wallet.getWatchingKey(); - String xpub = xpubKey.serializePubB58(networkParameters); - System.out.println("xpub: "+xpub); - System.out.println("key path: "+xpubKey.getPathAsString()); - System.out.println("chaincode: "+ Hex.toHexString(xpubKey.getChainCode())); - System.out.println("first address: "+wallet.freshReceiveAddress().toBase58()); - } - - @Test - public void watchOnlyTest(){ - - NetworkParameters networkParameters = MainNetParams.get(); - - String words = "bronze crop radio roof bright tomorrow jump hover drift habit title pistol shine piano truly afraid atom salon easily fork toward action ancient clerk"; - List list = new ArrayList(); - list.addAll(Arrays.asList(words.split(" "))); - DeterministicSeed seed = new DeterministicSeed(list, null, "", System.currentTimeMillis()); - Wallet wallet = Wallet.fromSeed( - networkParameters, - seed, - DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY - ); - - DeterministicKey xpubKey = wallet.getWatchingKey(); - String xpub = xpubKey.serializePubB58(networkParameters); - System.out.println("xpub: "+xpub); - System.out.println("key path: "+xpubKey.getPathAsString()); - System.out.println("chaincode: "+ Hex.toHexString(xpubKey.getChainCode())); - System.out.println("first address: "+wallet.freshReceiveAddress().toBase58()); - - Wallet watchingWallet = Wallet.fromWatchingKeyB58(networkParameters,xpub,0, DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY); - DeterministicKey xpubKey2 = watchingWallet.getWatchingKey(); - System.out.println("Watching key: "+xpubKey2.serializePubB58(networkParameters)); - System.out.println("key path: "+xpubKey2.getPathAsString()); - System.out.println("Watching first address: "+watchingWallet.freshReceiveAddress().toBase58()); - - - for (int i = 0; i < 10; i++) { - assert watchingWallet.freshReceiveAddress().toBase58().equals(wallet.freshReceiveAddress().toBase58()):"address doesn't match"; - } - - } - - @Test - public void syncWatchingKey() throws IOException, BlockStoreException { - NetworkParameters params = TestNet3Params.get(); - //String pubKey = "ToEA6nz3Vu6K2cvMHSRBTTipz7iyMt1fs9tFcZPDm4usjo1VrHQabxkBVEyvDo2HtxNmABF6wFxKkYmgCkeMmdtbTCWvHeqQLxdjsX1ceL72zMo"; - //Wallet watchingWallet = Wallet.fromWatchingKeyB58(params,pubKey,0, DeterministicKeyChain.KeyChainType.BIP44_PIVX_ONLY); - //DeterministicKey xpubKey2 = watchingWallet.getWatchingKey(); - - - Wallet watchingWallet = new Wallet(params); - BriefLogFormatter.init(); - - FileHandler fh = new FileHandler("MyLogFile.log"); - java.util.logging.Logger logger = java.util.logging.Logger.getLogger(""); - logger.addHandler(fh); - SimpleFormatter formatter = new SimpleFormatter(); - fh.setFormatter(formatter); - - Context context = new Context(params); - //File dir = new File("dir"); - //dir.mkdir(); - File walletFile = new File("wallet_testnet_3.dat"); - watchingWallet.saveToFile(walletFile); - watchingWallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { - @Override - public void onBeforeAutoSave(File tempFile) { - - } - - @Override - public void onAfterAutoSave(File newlySavedFile) { - - } - }); - BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("watching_blockstore_2.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); - //InputStream inputStream = new FileInputStream(new File("checkpoints")); - //CheckpointManager.checkpoint(networkParameters, inputStream, spvBlockStore, System.currentTimeMillis()); - final BlockChain blockChain = new BlockChain(context,watchingWallet,spvBlockStore); - PeerGroup peerGroup = new PeerGroup(params,blockChain); - //peerGroup.addPeerDiscovery(new DnsDiscovery(networkParameters)); - peerGroup.addPeerDiscovery(new PeerDiscovery() { - @Override - public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { - return new InetSocketAddress[]{ - //new InetSocketAddress("202.5.21.31",51474), - new InetSocketAddress("warrows.fr",51474) - //new InetSocketAddress("localhost",51474) - //new InetSocketAddress("88.198.192.110",51474) - }; - } - - @Override - public void shutdown() { - - } - }); - peerGroup.setDownloadTxDependencies(0); - peerGroup.addWallet(watchingWallet); - peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); - } - }); - peerGroup.setMaxPeersToDiscoverCount(1); - peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - if ((blocksLeft/10000) == 0) { - System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); - } - } - }); - peerGroup.startAsync(); - peerGroup.downloadBlockChain(); - - System.out.println(watchingWallet.toString()); - System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); - System.out.println(); - - // ######################### - - String password = "mati"; - // Encrypt - watchingWallet.encrypt(password); - - Assert.assertTrue("Wallet not encrypted", watchingWallet.isEncrypted()); - - logger.info("wallet encrypted "); - - // decrypt - watchingWallet.decrypt(password); - - logger.info("Wallet decrypted"); - Assert.assertTrue("Wallet not decrypted" , !watchingWallet.isEncrypted()); - - while (true){ - - } - - - } - - @Test - public void testEncryption(){ - - NetworkParameters params = TestNet3Params.get(); - Context.getOrCreate(params); - - Wallet wallet = new Wallet(params); - - - - } - - @Test - public void test() throws BlockStoreException { - NetworkParameters networkParameters = TestNet3Params.get(); - Context context = Context.getOrCreate(networkParameters); - String hexBlock = "04000000582c73cb7d33b1a2b2269d6b00ca1f6cfa32a36bcdf7c7f85e3a3da30ed421c51ed3c5a492ad97faf6d12b806a089c26215c08bdbaa599daad45dc1908b0d4d5af4c83597093001b0000000075ff318975ff3189f97be5115f5976571afd276fa0c37215605ddbd61d37e2f40201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff06037613030101ffffffff010000000000000000000000000001000000017a35864e454019b1192a5b7a58355edeb264923bcb8461313c677387258ecc67010000004847304402206a3c6a655e858d74b566885e72f7b7f91258f16c944b4f6c74df10f3fc0ec7860220350426a3b1318958402756b483ee703c590b034d61841a79eb56e59244550f8b01ffffffff04000000000000000000409277e45d000000232102af62f4bc029ec391b71074dd222c771f0ad17b38256c901af13adb0075cd8d74ac78f089005d000000232102af62f4bc029ec391b71074dd222c771f0ad17b38256c901af13adb0075cd8d74ac40defce3000000001976a9142f28328985dfa52fa9213a6ead9c2583e2f7251588ac00000000473045022100e077082775a52855eaa6e11464b38993e1be0096d41fbff0497187d60a07b007022070300f34df7cd43e1cfb895c5179a281c9505396c8c769857ad8f3783efd4201"; - byte[] payload = Hex.decode(hexBlock); - - - BitcoinSerializer serializer = new BitcoinSerializer(networkParameters,false); - Block block = serializer.makeBlock(payload); - - System.out.println(block); - - - LevelDBBlockStore levelDBBlockStore = new LevelDBBlockStore(context,new File("blockstore.dat")); - - //StoredBlock storedBlock0 = new StoredBlock(block,block.getWork(),201590); - - //levelDBBlockStore.put(storedBlock0); - - StoredBlock storedBlock = levelDBBlockStore.get(block.getHash()); - - System.out.println("##############"); - System.out.println(storedBlock); - - } - - /** - * Minimum entropy - */ - private static final int SEED_ENTROPY_EXTRA = 256; - private static final int ENTROPY_SIZE_DEBUG = -1; - - public static List generateMnemonic(int entropyBitsSize){ - byte[] entropy; - if (ENTROPY_SIZE_DEBUG > 0){ - entropy = new byte[ENTROPY_SIZE_DEBUG]; - }else { - entropy = new byte[entropyBitsSize / 8]; - } - SecureRandom secureRandom = new SecureRandom(); - secureRandom.nextBytes(entropy); - return bytesToMnemonic(entropy); - } - - public static List bytesToMnemonic(byte[] bytes){ - List mnemonic; - try{ - mnemonic = MnemonicCode.INSTANCE.toMnemonic(bytes); - } catch (MnemonicException.MnemonicLengthException e) { - throw new RuntimeException(e); // should not happen, we have 16 bytes of entropy - } - return mnemonic; - } - - @Test - public void zerocoinTransactionTest(){ - - NetworkParameters params = MainNetParams.get(); - String zerocoinTxHex = "473044022018d79ecf0de1c1b6a6b2869d574c0c4f1517613e48bdd7661e632c48c0cecd4b02203c840273520b8cc15792202a288b964fc3b5986fceb87d8f39b7c82a73987c5b012102bbc42e2dcfe0aa8e9341254a6dd138915727dab4e1c89a3a196a161c2fbe49c6"; - byte[] btes = Hex.decode(zerocoinTxHex); - byte[] hash = Hex.decode("b45e049f36e3f0f39f0b30f30f5f75a68632b92e4b4242769c78b82a55a24322"); - BitcoinSerializer serializer = new BitcoinSerializer(params,false); - Transaction transaction = serializer.makeTransaction(btes,0,btes.length,hash); - - System.out.println(transaction.toString()); - } - - @Test - public void testConversion(){ - - byte[] payload = Hex.decode("ffffff"); - long res = Utils.readUint32(payload,0); - System.out.println("Res: "+res); - } - - @Test - public void parseTxHexTest(){ - - - - - } - - @Test - public void getZerocoinSpendTx(){ - BriefLogFormatter.init(); - - final NetworkParameters params = MainNetParams.get(); - Context.getOrCreate(params); - - - PeerGroup peerGroup = new PeerGroup(params); - peerGroup.addConnectedEventListener(new PeerConnectedEventListener() { - @Override - public void onPeerConnected(Peer peer, int peerCount) { - System.out.println("connected"); - // request the tx - Sha256Hash txHash = Sha256Hash.wrap("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922"); - InventoryItem item = new InventoryItem(InventoryItem.Type.Transaction,txHash); - - GetDataMessage getdata = new GetDataMessage(params); - getdata.addItem(item); - peer.sendMessage(getdata); - } - }); - - peerGroup.addGetDataEventListener(new GetDataEventListener() { - @Nullable - @Override - public List getData(Peer peer, GetDataMessage m) { - System.out.println(m); - return null; - } - }); - peerGroup.start(); - Peer peer = peerGroup.connectToLocalHost(); - - while (true){ - - } - - } - - - public Wallet createWallet(NetworkParameters networkParameters,File walletFile) throws IOException { - Wallet wallet; - if (!walletFile.exists()){ - wallet = new Wallet(networkParameters); - }else { - try { - wallet = Wallet.loadFromFile(walletFile); - } catch (UnreadableWalletException e) { - e.printStackTrace(); - throw new RuntimeException(); - } - } - return wallet; - } - - @Test - public void parseZerocoinSpend(){ - - try { - - NetworkParameters params = MainNetParams.get(); - Context.getOrCreate(params); - - byte[] encoded = Files.readAllBytes(Paths.get("zc_transaction.txt")); - String text = new String(encoded, "UTF-8"); - System.out.println(text); - byte[] zcTransaction = Hex.decode(text); - // hash - byte[] transactionHash = Sha256Hash.wrap("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922").getReversedBytes(); - // Serialized - BitcoinSerializer bitcoinSerializer = new BitcoinSerializer(params,true); - Transaction transaction = bitcoinSerializer.makeTransaction(zcTransaction,0,zcTransaction.length,transactionHash); - System.out.println(transaction.toString()); - - assert transaction.getHashAsString().equals("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922") : "Hash is not the same"; - - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (Exception e){ - e.printStackTrace(); - } - } - - @Test - public void newEcKeyWallet() throws IOException { - NetworkParameters params = MainNetParams.get(); - Context.getOrCreate(params); - File walletFile = new File("wallet_new_eckey.dat"); - Wallet wallet = createWallet(params,walletFile); - wallet.saveToFile(walletFile); - wallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { - @Override - public void onBeforeAutoSave(File tempFile) { - - } - - @Override - public void onAfterAutoSave(File newlySavedFile) { - - } - }); - - for (ECKey key : wallet.getIssuedReceiveKeys()) { - System.out.println(key.toStringWithPrivate(params)); - } - } - - @Test - public void signMultiSigTransaction(){ - - NetworkParameters params = MainNetParams.get(); - - // First key, my key - ECKey key1 = new ECKey(Hex.decode("57148e68f6e774204b8c0ba6921a9342d601413ca3cccc7453112f025410a7ad"),Hex.decode("023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae7")); - - - // Use the redeem script we have saved somewhere to start building the transaction - String redeemScriptStr = "5221023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae72103a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c52ae"; - Script redeemScript = new Script(Hex.decode(redeemScriptStr)); - - // Start building the transaction by adding the unspent inputs we want to use - // The data is taken from blockchain.info, and can be found here: https://blockchain.info/rawtx/ca1884b8f2e0ba88249a86ec5ddca04f937f12d4fac299af41a9b51643302077 - Transaction spendTx = new Transaction(params); - ScriptBuilder scriptBuilder = new ScriptBuilder(); - // The output that we want to redeem.. - scriptBuilder.data(new String("a91492363c63a03bdd9d532c81a2defb9f2dfdea121587").getBytes()); // Script of this output - // tx hash - String txHash = "f0bb04058d212955a3d479ea498e901fb004013c6ca863a1c07d820c1735a8ae"; - TransactionInput input = spendTx.addInput(Sha256Hash.wrap(txHash), 1, scriptBuilder.build()); - - // Add outputs to the person receiving pivx - Address receiverAddress = Address.fromBase58(params, "D9VYtFMfhcCdRtWrY3m7Dc17yeSrn9R94k"); - Coin charge = Coin.valueOf(190000); // 0.019 mPIV - Script outputScript = ScriptBuilder.createOutputScript(receiverAddress); - spendTx.addOutput(charge, outputScript); - - // Sign the first part of the transaction using private key #1 - Sha256Hash sighash = spendTx.hashForSignature(0, redeemScript, Transaction.SigHash.ALL, false); - ECKey.ECDSASignature ecdsaSignature = key1.sign(sighash); - TransactionSignature transactionSignarture = new TransactionSignature(ecdsaSignature, Transaction.SigHash.ALL, false); - - // Create p2sh multisig input script - Script inputScript = ScriptBuilder.createP2SHMultiSigInputScript(Arrays.asList(transactionSignarture), redeemScript); - - // Add the script signature to the input - input.setScriptSig(inputScript); - System.out.println(Hex.toHexString(spendTx.bitcoinSerialize())); - } - - @Test - public void signWithSecondKey(){ - NetworkParameters params = MainNetParams.get(); - String txStr= "0100000001aea835170c827dc0a163a86c3c0104b01f908e49ea79d4a35529218d0504bbf0010000009200483045022100a11fac3165ef51adc12324d281384f7528effe83627340e3370e9c7edf2cb4d502205c24923f16d5c0a607bd137de31a1df552adcc265644fac5bab5079ed410796d01475221023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae72103a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c52aeffffffff0130e60200000000001976a9142fbed053e4cd6a6d78a36da33cd797fc7572d53c88ac00000000"; - Transaction spendTx = new Transaction(params,Hex.decode(txStr)); - - // Get the input chunks - Script inputScript = spendTx.getInput(0).getScriptSig(); - List scriptChunks = inputScript.getChunks(); - - // Create a list of all signatures. Start by extracting the existing ones from the list of script schunks. - // The last signature in the script chunk list is the redeemScript - List signatureList = new ArrayList(); - Iterator iterator = scriptChunks.iterator(); - Script redeemScript = null; - - while (iterator.hasNext()) - { - ScriptChunk chunk = iterator.next(); - - if (iterator.hasNext() && chunk.opcode != 0) - { - TransactionSignature transactionSignarture = TransactionSignature.decodeFromBitcoin(chunk.data, false); - signatureList.add(transactionSignarture); - } else - { - redeemScript = new Script(chunk.data); - } - } - - // Create the sighash using the redeem script - Sha256Hash sighash = spendTx.hashForSignature(0, redeemScript, Transaction.SigHash.ALL, false); - ECKey.ECDSASignature secondSignature; - - // Take out the key and sign the signhash - ECKey key2 = new ECKey(Hex.decode("e9cd2c5daff035f1692e72c5d3c6ef9518d8a317e92cbe178bd5d1019fbf1cc9"),Hex.decode("03a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c")); - secondSignature = key2.sign(sighash); - - // Add the second signature to the signature list - TransactionSignature transactionSignarture = new TransactionSignature(secondSignature, Transaction.SigHash.ALL, false); - signatureList.add(transactionSignarture); - - // Rebuild p2sh multisig input script - inputScript = ScriptBuilder.createP2SHMultiSigInputScript(signatureList, redeemScript); - spendTx.getInput(0).setScriptSig(inputScript); - - System.out.println(Hex.toHexString(spendTx.bitcoinSerialize())); - - } - - private static AtomicBoolean flag = new AtomicBoolean(false); - - @Test - public void multiSig() throws IOException, BlockStoreException { - BriefLogFormatter.init(); - final NetworkParameters params = MainNetParams.get(); - Context context = Context.getOrCreate(params); - File walletFile = new File("wallet_4_multi_sig.dat"); - Wallet wallet = createWallet(params,walletFile); - - - // Add watched address - wallet.addWatchedAddress(Address.fromBase58(params,"6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1")); - Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); - Script p2sh = ScriptBuilder.createP2SHOutputScript(redeemScript); - wallet.addWatchedScripts(Lists.newArrayList(redeemScript,p2sh)); - - BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("blockstore_multi_sig1.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); - //InputStream inputStream = new FileInputStream(new File("checkpoints")); - - try { - String filename = "checkpoints"; - String suffix = params instanceof MainNetParams ? "":"-testnet"; - final InputStream checkpointsInputStream = new FileInputStream(new File(filename)); //context.openAssestsStream(filename+suffix); - CheckpointManager.checkpoint(params, checkpointsInputStream, spvBlockStore, 1519731317); - - }catch (final IOException x) { - x.printStackTrace(); - }catch (Exception e){ - e.printStackTrace(); - } - - final BlockChain blockChain = new BlockChain(context,wallet,spvBlockStore); - final PeerGroup peerGroup = new PeerGroup(params,blockChain); - - peerGroup.addPeerDiscovery(new PeerDiscovery() { - @Override - public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { - return new InetSocketAddress[]{ - //new InetSocketAddress("202.5.21.31",51474), - new InetSocketAddress("185.101.98.175",8443) - //new InetSocketAddress("localhost",51474) - //new InetSocketAddress("88.198.192.110",51474) - }; - } - - @Override - public void shutdown() { - - } - }); - peerGroup.setDownloadTxDependencies(0); - peerGroup.addWallet(wallet); - peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); - } - }); - peerGroup.setMaxPeersToDiscoverCount(1); - - peerGroup.addConnectedEventListener(new PeerConnectedEventListener() { - @Override - public void onPeerConnected(Peer peer, int peerCount) { - - } - }); - - peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - if ((blocksLeft/10000) == 0) { - System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); - } - } - }); - peerGroup.startAsync(); - peerGroup.downloadBlockChain(); - - System.out.println(wallet.toString(false,true,false,blockChain)); - System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); - - - System.out.println("########################"); - System.out.println("########################"); - System.out.println("########################"); - - for (TransactionOutput transactionOutput : wallet.getUnspents()) { - System.out.println("---------------"); - System.out.println(transactionOutput.getOutPointFor().toString()); - System.out.println("---------------"); - } - - while (true){ - } - - } - - @Test - public void checkTx() throws IOException { - BriefLogFormatter.init(); - final NetworkParameters params = MainNetParams.get(); - Context context = Context.getOrCreate(params); - File walletFile = new File("wallet_4_multi_sig.dat"); - Wallet wallet = createWallet(params,walletFile); - - - // Add watched address - wallet.addWatchedAddress(Address.fromBase58(params,"6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1")); - Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); - Script p2sh = ScriptBuilder.createP2SHOutputScript(redeemScript); - wallet.addWatchedScripts(Lists.newArrayList(redeemScript,p2sh)); - - System.out.println(wallet.toString(false,true,false,null)); - System.out.println("########################"); - System.out.println("########################"); - System.out.println("########################"); - System.out.println(Arrays.toString(wallet.getUnspents().toArray())); - } - - @Test - public void connect() throws BlockStoreException, IOException, InsufficientMoneyException { - - BriefLogFormatter.init(); - - FileHandler fh = new FileHandler("MyLogFile.log"); - java.util.logging.Logger logger = java.util.logging.Logger.getLogger(""); - logger.addHandler(fh); - SimpleFormatter formatter = new SimpleFormatter(); - fh.setFormatter(formatter); - - NetworkParameters networkParameters = MainNetParams.get(); - Context context = new Context(networkParameters); - //File dir = new File("dir"); - //dir.mkdir(); - File walletFile = new File("wallet_2.dat"); - Wallet wallet = createWallet(networkParameters,walletFile); - //Wallet wallet = restore(networkParameters); - System.out.println("Wallet keys: "+Arrays.toString(wallet.getWatchedAddresses().toArray())); - wallet.saveToFile(walletFile); - wallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { - @Override - public void onBeforeAutoSave(File tempFile) { - - } - - @Override - public void onAfterAutoSave(File newlySavedFile) { - - } - }); - // add the zspend - wallet.addWatchedAddress(Address.fromBase58(networkParameters,"DFuEgkFtkXrMQfFoZXckm88LuqzAAukGK3")); - - BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("blockstore_m3.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); - //InputStream inputStream = new FileInputStream(new File("checkpoints")); - //CheckpointManager.checkpoint(networkParameters, inputStream, spvBlockStore, System.currentTimeMillis()); - final BlockChain blockChain = new BlockChain(context,wallet,spvBlockStore); - PeerGroup peerGroup = new PeerGroup(networkParameters,blockChain); - //peerGroup.addPeerDiscovery(new DnsDiscovery(networkParameters)); - peerGroup.addPeerDiscovery(new PeerDiscovery() { - @Override - public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { - return new InetSocketAddress[]{ - //new InetSocketAddress("202.5.21.31",51474), - new InetSocketAddress("185.101.98.175",8443) - //new InetSocketAddress("localhost",51474) - //new InetSocketAddress("88.198.192.110",51474) - }; - } - - @Override - public void shutdown() { - - } - }); - peerGroup.setDownloadTxDependencies(0); - peerGroup.addWallet(wallet); - peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); - } - }); - peerGroup.setMaxPeersToDiscoverCount(1); - peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ - @Override - public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { - if ((blocksLeft/10000) == 0) { - System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); - } - } - }); - peerGroup.startAsync(); - peerGroup.downloadBlockChain(); - - System.out.println(wallet.toString(false,true,false,blockChain)); - System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); - - while (true){ - - } - - } - - public Transaction buildTx(Wallet wallet,NetworkParameters networkParameters,Address to,Coin amount) throws InsufficientMoneyException { - SendRequest sendRequest = SendRequest.to(to,amount); - sendRequest.useInstantSend = true; - wallet.completeTx(sendRequest); - return sendRequest.tx; - } - - @Test - public void decodeTx(){ - Context context = new Context(MainNetParams.get()); - byte[] txBytes = Utils.HEX.decode("01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5e04ffff001d01044c55552e532e204e657773202620576f726c64205265706f7274204a616e203238203230313620576974682048697320416273656e63652c205472756d7020446f6d696e6174657320416e6f7468657220446562617465ffffffff0100ba1dd205000000434104c10e83b2703ccf322f7dbd62dd5855ac7c10bd055814ce121ba32607d573b8810c02c0582aed05b4deb9c4b77b26d92428c61256cd42774babea0a073b2ed0c9ac00000000"); - Transaction tx = new Transaction(MainNetParams.get(),txBytes); - - TransactionInput transactionInput = tx.getInput(0); - System.out.println("Input: \nsequence "+transactionInput.getSequenceNumber()); - System.out.println(Hex.toHexString(transactionInput.getScriptBytes())); - System.out.println("\n\n"); - TransactionOutput transactionOutput = tx.getOutput(0); - System.out.println("Output:"); - System.out.println(transactionOutput.getScriptPubKey()); - - byte[] pubKey = Utils.HEX.decode("04c10e83b2703ccf322f7dbd62dd5855ac7c10bd055814ce121ba32607d573b8810c02c0582aed05b4deb9c4b77b26d92428c61256cd42774babea0a073b2ed0c9"); - ScriptBuilder scriptBuilder = new ScriptBuilder().addChunk(new ScriptChunk(65,pubKey)).op(ScriptOpCodes.OP_CHECKSIG); - Script script = scriptBuilder.build(); - System.out.println(script); - - //TransactionOutput transactionOutput1 = new TransactionOutput(MainNetParams.get(),tx,) - } - - @Test - public void verifyScript(){ - - Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); - - System.out.println("redeemScript: "+redeemScript.toString()); - - // Hash of the redeem script - byte[] hash = Utils.sha256hash160(redeemScript.getProgram()); - String hashedRedeemScriptHex = Hex.toHexString(hash); - - System.out.println(hashedRedeemScriptHex); - - assert hashedRedeemScriptHex.equals("bdddbfdf7f8cc7ab7d42361324d036004204cf83") : "Fatal error" ; - - - } - - @Test - public void decodeMultiSigAndCheckvalidity(){ - NetworkParameters param = MainNetParams.get(); - Context.getOrCreate(param); - Transaction tx = new Transaction( - param, - Hex.decode("0100000001105f6bb76efbca8be0a35674c8ece30b48772d8315d6e2f6d30234b6d0cd873101000000db00483045022100ff5fdac77de16e4f4761c7be657bf4eecb773add010bb475f05109d9ffbe4e4a02207b52af3d16aec0c4c9257175aaef1511b9cc6e790bf6223dda79e57d3d80a58f01483045022100b81b7ac2e1db8542415de6d2fa2293226e3b3dedb7b0a55943f6bfdefb25018f02203f00a0509bf1fe8235b84fd0343e02e508ae466db391fcba3740f4202a944e290147522102eed43149a2d0d681ceec269ff64f0380ce011f3d42fdaf47b0cc9b9ff0944c802103fb8ea7eb154134e796d68cf5ac24aff7f9e0c89be91315338acc6b995b8e174552aeffffffff0278ff73ad020000001976a914b4d8da98ed0efa48ed3c453415d7c5eea19b1c9988ac78ff73ad020000001976a9145fd67df219b31729a2137a4a5a512298520fce0e88ac00000000") - ); - - // Change redeem script.. - Script scriptSig = tx.getInput(0).getScriptSig(); - ScriptBuilder scriptBuilder = new ScriptBuilder(); - for (ScriptChunk scriptChunk : scriptSig.getChunks()) { - System.out.println("Chunk: "+scriptChunk); - // Check if it's the redeem script - if (scriptChunk.opcode == 71){ - // redeem script - scriptBuilder.data(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); - }else { - scriptBuilder.addChunk(scriptChunk); - } - } - - Script newScript = scriptBuilder.build(); - tx.getInput(0).setScriptSig(newScript); - - - System.out.println("new script: "+newScript.toString()); - - - System.out.println(tx); - - Transaction txToRedeem = new Transaction( - param, - Hex.decode("01000000010ea11e99335a551e5b21d673d024347b32b843cfdeb90efa5681d8745e9437f2010000006a47304402201d7e0e552384ce0ff7d6ab386e3274b4be13c0f111048983712558044986e216022055bc59664fb6ecbc80476c94d05999efa221e1e4ca7b984e20eb00aad254d5ea012103ae5432f9a8bb7183c80390a83bbfb67b9b281a1aa180bbd793275611750b446dffffffff02c08df262020000001976a9149b49c6d2da780f5fa1e969398539d749b68d8e9d88ac0026e85a0500000017a914bdddbfdf7f8cc7ab7d42361324d036004204cf838700000000") - ); - tx.getInput(0).connect(txToRedeem,null); - System.out.println( - "####################\n"+tx); - //tx.getInput(0).verify(new TransactionOutput(param,null,Hex.decode(),0)); - tx.getInput(0).verify(); - } - - @Test - public void testDecodeAndVerify(){ - NetworkParameters param = MainNetParams.get(); - Context.getOrCreate(param); - Transaction tx = new Transaction( - param, - Hex.decode("0100000001105f6bb76efbca8be0a35674c8ece30b48772d8315d6e2f6d30234b6d0cd87310100000091004730440220086ed6fe550915bc5d81f29de3c940145078ef1f41e2e128e1b1010f0eac9e7602202ea850bb112bf02a87ee6e058859138930727072d0f9771b8edc5dfa22ac912e01475221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352aeffffffff0278ff73ad020000001976a914b4d8da98ed0efa48ed3c453415d7c5eea19b1c9988ac78ff73ad020000001976a9145fd67df219b31729a2137a4a5a512298520fce0e88ac00000000") - ); - - Transaction txToRedeem = new Transaction( - param, - Hex.decode("01000000010ea11e99335a551e5b21d673d024347b32b843cfdeb90efa5681d8745e9437f2010000006a47304402201d7e0e552384ce0ff7d6ab386e3274b4be13c0f111048983712558044986e216022055bc59664fb6ecbc80476c94d05999efa221e1e4ca7b984e20eb00aad254d5ea012103ae5432f9a8bb7183c80390a83bbfb67b9b281a1aa180bbd793275611750b446dffffffff02c08df262020000001976a9149b49c6d2da780f5fa1e969398539d749b68d8e9d88ac0026e85a0500000017a914bdddbfdf7f8cc7ab7d42361324d036004204cf838700000000") - ); - tx.getInput(0).connect(txToRedeem,null); - System.out.println( - "####################\n"+tx); - //tx.getInput(0).verify(new TransactionOutput(param,null,Hex.decode(),0)); - tx.getInput(0).verify(); - - } - - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public static void chmod(final File path, final int mode) { - try { - final Class fileUtils = Class.forName("android.os.FileUtils"); - final Method setPermissions = fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class); - setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1); - } - catch (final Exception x) { - System.out.println("problem using undocumented chmod api "+ x); - } - } - - public static final long copy(final Reader reader, final StringBuilder builder) throws IOException - { - return copy(reader, builder, 0); - } - - public static final long copy(final Reader reader, final StringBuilder builder, final long maxChars) throws IOException - { - final char[] buffer = new char[256]; - long count = 0; - int n = 0; - while (-1 != (n = reader.read(buffer))) - { - builder.append(buffer, 0, n); - count += n; - - if (maxChars != 0 && count > maxChars) - throw new IOException("Read more than the limit of " + maxChars + " characters"); - } - return count; - } - - public static final long copy(final InputStream is, final OutputStream os) throws IOException - { - final byte[] buffer = new byte[1024]; - long count = 0; - int n = 0; - while (-1 != (n = is.read(buffer))) - { - os.write(buffer, 0, n); - count += n; - } - return count; - } - - public static Wallet restoreWalletFromProtobufOrBase58(final InputStream is, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException - { - is.mark((int) backupMaxChars); - - try - { - return restoreWalletFromProtobuf(is, expectedNetworkParameters); - } - catch (final IOException x) - { - try - { - is.reset(); - return restorePrivateKeysFromBase58(is, expectedNetworkParameters,backupMaxChars); - } - catch (final IOException x2) - { - throw new IOException("cannot read protobuf (" + x.getMessage() + ") or base58 (" + x2.getMessage() + ")", x); - } - } - } - - public static Wallet restoreWalletFromProtobuf(final InputStream is, final NetworkParameters expectedNetworkParameters) throws IOException { - try { - final Wallet wallet = new WalletProtobufSerializer().readWallet(is, true, null); - if (!wallet.getParams().equals(expectedNetworkParameters)) - throw new IOException("bad wallet backup network parameters: " + wallet.getParams().getId()); - if (!wallet.isConsistent()) - throw new IOException("inconsistent wallet backup"); - - return wallet; - } catch (final UnreadableWalletException x) { - throw new IOException("unreadable wallet", x); - } - } - - public static Wallet restorePrivateKeysFromBase58(final InputStream is, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException - { - final BufferedReader keyReader = new BufferedReader(new InputStreamReader(is, Charsets.UTF_8)); - - // create non-HD wallet - final KeyChainGroup group = new KeyChainGroup(expectedNetworkParameters); - group.importKeys(readKeys(keyReader, expectedNetworkParameters,backupMaxChars)); - return new Wallet(expectedNetworkParameters, group); - } - - public static List readKeys(final BufferedReader in, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException - { - try - { - final DateFormat format = Iso8601Format.newDateTimeFormatT(); - - final List keys = new LinkedList(); - - long charCount = 0; - while (true) - { - final String line = in.readLine(); - if (line == null) - break; // eof - charCount += line.length(); - if (charCount > backupMaxChars) - throw new IOException("read more than the limit of " + backupMaxChars + " characters"); - if (line.trim().isEmpty() || line.charAt(0) == '#') - continue; // skip comment - - final String[] parts = line.split(" "); - - final ECKey key = DumpedPrivateKey.fromBase58(expectedNetworkParameters, parts[0]).getKey(); - key.setCreationTimeSeconds(parts.length >= 2 ? format.parse(parts[1]).getTime() / TimeUnit.SECONDS.toMillis(1) : 0); //DateUtils.SECOND_IN_MILLIS - - keys.add(key); - } - - return keys; - } - catch (final AddressFormatException x) - { - throw new IOException("cannot read keys", x); - } - catch (final ParseException x) - { - throw new IOException("cannot read keys", x); - } - } - - public static class Iso8601Format extends SimpleDateFormat { - private static final TimeZone UTC = TimeZone.getTimeZone("UTC"); - - private Iso8601Format(final String formatString) { - super(formatString); - - setTimeZone(UTC); - } - - public static DateFormat newTimeFormat() { - return new Iso8601Format("HH:mm:ss"); - } - - public static DateFormat newDateFormat() { - return new Iso8601Format("yyyy-MM-dd"); - } - - public static DateFormat newDateTimeFormat() { - return new Iso8601Format("yyyy-MM-dd HH:mm:ss"); - } - - public static String formatDateTime(final Date date) { - return newDateTimeFormat().format(date); - } - - public static Date parseDateTime(final String source) throws ParseException { - return newDateTimeFormat().parse(source); - } - - public static DateFormat newDateTimeFormatT() { - return new Iso8601Format("yyyy-MM-dd'T'HH:mm:ss'Z'"); - } - - public static String formatDateTimeT(final Date date) { - return newDateTimeFormatT().format(date); - } - - public static Date parseDateTimeT(final String source) throws ParseException { - return newDateTimeFormatT().parse(source); - } - } -} +//package org.pivxj.core; +// +//import com.google.common.base.Charsets; +//import com.google.common.collect.Lists; +//import com.hashengineering.crypto.Hash9; +//import org.junit.Assert; +//import org.pivxj.core.listeners.*; +//import org.pivxj.crypto.*; +//import org.pivxj.net.discovery.PeerDiscovery; +//import org.pivxj.net.discovery.PeerDiscoveryException; +//import org.pivxj.params.MainNetParams; +//import org.pivxj.params.TestNet3Params; +//import org.pivxj.script.Script; +//import org.pivxj.script.ScriptBuilder; +//import org.pivxj.script.ScriptChunk; +//import org.pivxj.script.ScriptOpCodes; +//import org.pivxj.store.BlockStore; +//import org.pivxj.store.BlockStoreException; +//import org.pivxj.store.LevelDBBlockStore; +//import org.pivxj.utils.BriefLogFormatter; +//import org.pivxj.wallet.*; +//import org.junit.Test; +//import org.spongycastle.util.encoders.Hex; +// +//import javax.annotation.Nullable; +//import java.io.*; +//import java.lang.reflect.Method; +//import java.math.BigInteger; +//import java.net.InetSocketAddress; +//import java.nio.file.Files; +//import java.nio.file.Paths; +//import java.security.SecureRandom; +//import java.text.DateFormat; +//import java.text.ParseException; +//import java.text.SimpleDateFormat; +//import java.util.*; +//import java.util.concurrent.TimeUnit; +//import java.util.concurrent.atomic.AtomicBoolean; +//import java.util.logging.FileHandler; +//import java.util.logging.SimpleFormatter; +// +///** +// * Created by furszy on 6/23/17. +// */ +//public class MatiTest { +// +// @Test +// public void connectAndGetPubcoinsdata(){ +//// +//// final NetworkParameters params = MainNetParams.get(); +//// PeerGroup peerGroup = new PeerGroup(params); +//// peerGroup.start(); +//// Peer peer = peerGroup.connectTo(new InetSocketAddress(7776)); +//// +//// peer.addOnGetDataResponseEventListener(new OnGetDataResponseEventListener() { +//// @Override +//// public void onResponseReceived(PubcoinsMessage pubcoinsMessage) { +//// System.out.println("size: " + pubcoinsMessage.getList().size()); +//// } +//// }); +//// +//// peer.addConnectedEventListener(new PeerConnectedEventListener() { +//// @Override +//// public void onPeerConnected(Peer peer, int i) { +//// System.out.println("Peer connected, seinding getdata"); +//// //GetDataMessage getDataMessage = new GetDataMessage(params); +//// //getDataMessage.addPubcoinsBlockHash( +//// // Sha256Hash.wrap("ed56ff1e1abd88e5dce0b52f8951970c86d94ec526c0007bf2bad4ca10ba3ac4") +//// //); +//// GenWitMessage genWitMessage = new GenWitMessage( +//// params, +//// 1245475, +//// LibZerocoin.CoinDenomination.ZQ_ONE, +//// 1, 0.001, (long) (Math.random() * Long.MAX_VALUE) +//// ); +//// BigInteger bnValue = new BigInteger("49562934426197246361341302937888166535958820127560563046688232084681663408334057925442609971010765290980273589195421234926681824529604731044735511851429332795902473030281542943546216458161997423614193390428379820294894150716196038837775465627137407450997323837703190642031432725966841831797669052225113685451"); +//// genWitMessage.insert(bnValue); +//// peer.sendMessage(genWitMessage); +//// } +//// }); +//// +//// while (true){ +//// try { +//// TimeUnit.SECONDS.sleep(90); +//// } catch (InterruptedException e) { +//// e.printStackTrace(); +//// } +//// break; +//// } +// } +// +// @Test +// public void hash() throws UnsupportedEncodingException { +// byte[] bytes = "add".getBytes("UTF-8"); +// byte[] res = Hash9.digest(bytes); +// System.out.println(Hex.toHexString(res)); +// } +// +// @Test +// public void connectTestnetPeer(){ +// NetworkParameters networkParameters = TestNet3Params.get(); +// Context context = new Context(networkParameters); +// VersionMessage versionMessage = new VersionMessage(networkParameters, 0); +// versionMessage.relayTxesBeforeFilter=false; +// Peer peer = new Peer(networkParameters,versionMessage,new PeerAddress("warrows.fr",51474),null); +// peer.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// System.out.println("left: "+blocksLeft); +// } +// }); +// peer.addConnectedEventListener(new PeerConnectedEventListener() { +// @Override +// public void onPeerConnected(Peer peer, int peerCount) { +// System.out.println("connected"); +// } +// }); +// peer.startBlockChainDownload(); +// } +// +// @Test +// public void connectPeer(){ +// NetworkParameters networkParameters = MainNetParams.get(); +// Context context = new Context(networkParameters); +// VersionMessage versionMessage = new VersionMessage(networkParameters, 0); +// versionMessage.relayTxesBeforeFilter=false; +// Peer peer = new Peer(networkParameters,versionMessage,new PeerAddress("localhost",51472),null); +// peer.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// System.out.println("left: "+blocksLeft); +// } +// }); +// peer.addConnectedEventListener(new PeerConnectedEventListener() { +// @Override +// public void onPeerConnected(Peer peer, int peerCount) { +// System.out.println("connected"); +// } +// }); +// } +// +// @Test +// public void accountDetailsTest(){ +// +// NetworkParameters networkParameters = MainNetParams.get(); +// String words = "bronze crop radio roof bright tomorrow jump hover drift habit title pistol shine piano truly afraid atom salon easily fork toward action ancient clerk"; +// List list = new ArrayList(); +// list.addAll(Arrays.asList(words.split(" "))); +// DeterministicSeed seed = new DeterministicSeed(list, null, "", System.currentTimeMillis()); +// Wallet wallet = Wallet.fromSeed( +// networkParameters, +// seed, +// DeterministicKeyChain.KeyChainType.BIP44_PIV +// ); +// +// System.out.println("Wallet version: "+wallet.getVersion()); +// +// DeterministicKeyChain deterministicKeyChain = wallet.getActiveKeyChain(); +// DeterministicKey account = deterministicKeyChain.getWatchingKey(); +// System.out.println("path: "+account.getPath()); +// System.out.println("xpub: "+account.serializePubB58(networkParameters)); +// System.out.println("xpriv: "+account.serializePrivB58(networkParameters)); +// +// List mnemonic = deterministicKeyChain.getSeed().getMnemonicCode(); +// StringBuilder stringBuilder = new StringBuilder(); +// for (String s : mnemonic) { +// stringBuilder.append(s).append(" "); +// } +// System.out.println("words: "+stringBuilder.toString()); +// +// System.out.println("printing some addresses.."); +// DeterministicKey addressKey1 = wallet.freshReceiveKey(); +// System.out.println("address path: "+addressKey1.getPath()+" "+addressKey1.toAddress(networkParameters).toBase58()); +// DeterministicKey addressKey2 = wallet.freshReceiveKey(); +// System.out.println("address path: "+addressKey2.getPath()+" "+addressKey2.toAddress(networkParameters).toBase58()); +// DeterministicKey addressKey3 = wallet.freshReceiveKey(); +// System.out.println("address path: "+addressKey3.getPath()+" "+addressKey3.toAddress(networkParameters).toBase58()); +// DeterministicKey addressKey4 = wallet.freshReceiveKey(); +// System.out.println("address path: "+addressKey4.getPath()+" "+addressKey4.toAddress(networkParameters).toBase58()); +// +// Protos.Wallet protoWallet = new WalletProtobufSerializer().walletToProto(wallet); +// System.out.println("Proto wallet version: " + protoWallet.getVersion()); +// +// InputStream is = null; +// try { +// is = new ByteArrayInputStream(protoWallet.toByteArray()); +// final Wallet wallet2 = new WalletProtobufSerializer().readWallet(is, true, null); +// +// System.out.println("Restore wallet working"); +// +// } catch (UnreadableWalletException e) { +// e.printStackTrace(); +// }catch (Exception e){ +// e.printStackTrace(); +// }finally { +// try { +// if (is != null) { +// is.close(); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// } +// +// @Test +// public void publicKeyToAddress(){ +// +// NetworkParameters params = MainNetParams.get(); +// String pubKey = "0244c064ee0b6bd3763736ad3ba60bf1d5a9c72d26b57ee13f4658476d6c6e1bec"; +// DeterministicKey key = DeterministicKey.deserialize(params,Hex.decode(pubKey)); +// //Address address = Address.fromP2SHHash(params,); +// +// System.out.printf("address: "+key.toAddress(params).toBase58()); +// +// } +// +// public Wallet restore(NetworkParameters networkParameters) throws IOException { +// String filename = "2.0.32_pivx-wallet-backup_org.pivx.production-2017-11-20"; +// //"1.01_pivx-wallet-backup_org.pivx.production-2017-07-26 (2)"; +// String password = "123";//"12345678"; +// +// +// File file = new File(filename); +// final BufferedReader cipherIn = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8)); +// final StringBuilder cipherText = new StringBuilder(); +// copy(cipherIn, cipherText, 10000000); +// cipherIn.close(); +// +// final byte[] plainText = Crypto.decryptBytes(cipherText.toString(), password.toCharArray()); +// final InputStream is = new ByteArrayInputStream(plainText); +// +// Wallet wallet = restoreWalletFromProtobufOrBase58(is, networkParameters, 10000000); +// return wallet; +// } +// +// @Test +// public void restoreFromBackup() throws IOException { +// NetworkParameters networkParameters = MainNetParams.get(); +// +// Wallet wallet = restore(networkParameters); +// +// String seed = wallet.getKeyChainSeed().toHexString(); +// String watchingKey = wallet.getWatchingKey().serializePubB58(networkParameters); +// System.out.println("seed: "+seed); +// System.out.println("watching key: "+watchingKey); +// System.out.println("mnemonic code: "+Arrays.toString(wallet.getActiveKeyChain().getMnemonicCode().toArray())); +// +// +// System.out.println("#############################################"); +// +// List mnemonicTwo = wallet.getActiveKeyChain().getMnemonicCode(); +// DeterministicSeed seedBase = new DeterministicSeed(mnemonicTwo, null, "", 0); +// Wallet wallet2 = Wallet.fromSeed( +// networkParameters, +// seedBase, +// DeterministicKeyChain.KeyChainType.BIP44_PIV +// ); +// +// String seed2 = wallet2.getKeyChainSeed().toHexString(); +// String watchingKey2 = wallet2.getWatchingKey().serializePubB58(networkParameters); +// System.out.println("seed2: "+seed2); +// System.out.println("watching2 key: "+watchingKey2); +// System.out.println("mnemonic2 code: "+Arrays.toString(wallet2.getActiveKeyChain().getMnemonicCode().toArray())); +// +// assert seed.equals(seed2) : "seeds are not equals"; +// assert watchingKey2.equals(watchingKey) : "key are not the same"; +// } +// +// @Test +// public void restoreFromMnemonic(){ +// +// NetworkParameters networkParameters = MainNetParams.get(); +// +// String mnemonic = "predict, will, purchase, figure, actor, laptop, marine, blind, upper, valve, carry, coyote, side, that, home, purchase, tide, mixture, hospital, front, fun, sniff, draft, execute"; +// mnemonic = mnemonic.trim().replace(",",""); +// List list = new ArrayList(); +// list.addAll(Arrays.asList(mnemonic.split(" "))); +// DeterministicSeed seed = new DeterministicSeed(list, null, "", 0); +// Wallet wallet = Wallet.fromSeed( +// networkParameters, +// seed, +// DeterministicKeyChain.KeyChainType.BIP32 +// ); +// +// DeterministicKey xpubKey = wallet.getWatchingKey(); +// String xpub = xpubKey.serializePubB58(networkParameters); +// System.out.println("xpub: "+xpub); +// System.out.println("key path: "+xpubKey.getPathAsString()); +// System.out.println("chaincode: "+ Hex.toHexString(xpubKey.getChainCode())); +// System.out.println("first address: "+wallet.freshReceiveAddress().toBase58()); +// } +// +// @Test +// public void watchOnlyTest(){ +// +// NetworkParameters networkParameters = MainNetParams.get(); +// +// String words = "bronze crop radio roof bright tomorrow jump hover drift habit title pistol shine piano truly afraid atom salon easily fork toward action ancient clerk"; +// List list = new ArrayList(); +// list.addAll(Arrays.asList(words.split(" "))); +// DeterministicSeed seed = new DeterministicSeed(list, null, "", System.currentTimeMillis()); +// Wallet wallet = Wallet.fromSeed( +// networkParameters, +// seed, +// DeterministicKeyChain.KeyChainType.BIP44_PIV +// ); +// +// DeterministicKey xpubKey = wallet.getWatchingKey(); +// String xpub = xpubKey.serializePubB58(networkParameters); +// System.out.println("xpub: "+xpub); +// System.out.println("key path: "+xpubKey.getPathAsString()); +// System.out.println("chaincode: "+ Hex.toHexString(xpubKey.getChainCode())); +// System.out.println("first address: "+wallet.freshReceiveAddress().toBase58()); +// +// Wallet watchingWallet = Wallet.fromWatchingKeyB58(networkParameters,xpub,0, DeterministicKeyChain.KeyChainType.BIP44_PIV); +// DeterministicKey xpubKey2 = watchingWallet.getWatchingKey(); +// System.out.println("Watching key: "+xpubKey2.serializePubB58(networkParameters)); +// System.out.println("key path: "+xpubKey2.getPathAsString()); +// System.out.println("Watching first address: "+watchingWallet.freshReceiveAddress().toBase58()); +// +// +// for (int i = 0; i < 10; i++) { +// assert watchingWallet.freshReceiveAddress().toBase58().equals(wallet.freshReceiveAddress().toBase58()):"address doesn't match"; +// } +// +// } +// +// @Test +// public void syncWatchingKey() throws IOException, BlockStoreException { +// NetworkParameters params = TestNet3Params.get(); +// //String pubKey = "ToEA6nz3Vu6K2cvMHSRBTTipz7iyMt1fs9tFcZPDm4usjo1VrHQabxkBVEyvDo2HtxNmABF6wFxKkYmgCkeMmdtbTCWvHeqQLxdjsX1ceL72zMo"; +// //Wallet watchingWallet = Wallet.fromWatchingKeyB58(params,pubKey,0, DeterministicKeyChain.KeyChainType.BIP44_PIV); +// //DeterministicKey xpubKey2 = watchingWallet.getWatchingKey(); +// +// +// Wallet watchingWallet = new Wallet(params); +// BriefLogFormatter.init(); +// +// FileHandler fh = new FileHandler("MyLogFile.log"); +// java.util.logging.Logger logger = java.util.logging.Logger.getLogger(""); +// logger.addHandler(fh); +// SimpleFormatter formatter = new SimpleFormatter(); +// fh.setFormatter(formatter); +// +// Context context = new Context(params); +// //File dir = new File("dir"); +// //dir.mkdir(); +// File walletFile = new File("wallet_testnet_3.dat"); +// watchingWallet.saveToFile(walletFile); +// watchingWallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { +// @Override +// public void onBeforeAutoSave(File tempFile) { +// +// } +// +// @Override +// public void onAfterAutoSave(File newlySavedFile) { +// +// } +// }); +// BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("watching_blockstore_2.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); +// //InputStream inputStream = new FileInputStream(new File("checkpoints")); +// //CheckpointManager.checkpoint(networkParameters, inputStream, spvBlockStore, System.currentTimeMillis()); +// final BlockChain blockChain = new BlockChain(context,watchingWallet,spvBlockStore); +// PeerGroup peerGroup = new PeerGroup(params,blockChain); +// //peerGroup.addPeerDiscovery(new DnsDiscovery(networkParameters)); +// peerGroup.addPeerDiscovery(new PeerDiscovery() { +// @Override +// public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { +// return new InetSocketAddress[]{ +// //new InetSocketAddress("202.5.21.31",51474), +// new InetSocketAddress("warrows.fr",51474) +// //new InetSocketAddress("localhost",51474) +// //new InetSocketAddress("88.198.192.110",51474) +// }; +// } +// +// @Override +// public void shutdown() { +// +// } +// }); +// peerGroup.setDownloadTxDependencies(0); +// peerGroup.addWallet(watchingWallet); +// peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); +// } +// }); +// peerGroup.setMaxPeersToDiscoverCount(1); +// peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// if ((blocksLeft/10000) == 0) { +// System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); +// } +// } +// }); +// peerGroup.startAsync(); +// peerGroup.downloadBlockChain(); +// +// System.out.println(watchingWallet.toString()); +// System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); +// System.out.println(); +// +// // ######################### +// +// String password = "mati"; +// // Encrypt +// watchingWallet.encrypt(password); +// +// Assert.assertTrue("Wallet not encrypted", watchingWallet.isEncrypted()); +// +// logger.info("wallet encrypted "); +// +// // decrypt +// watchingWallet.decrypt(password); +// +// logger.info("Wallet decrypted"); +// Assert.assertTrue("Wallet not decrypted" , !watchingWallet.isEncrypted()); +// +// while (true){ +// +// } +// +// +// } +// +// @Test +// public void testEncryption(){ +// +// NetworkParameters params = TestNet3Params.get(); +// Context.getOrCreate(params); +// +// Wallet wallet = new Wallet(params); +// +// +// +// } +// +// @Test +// public void test() throws BlockStoreException { +// NetworkParameters networkParameters = TestNet3Params.get(); +// Context context = Context.getOrCreate(networkParameters); +// String hexBlock = "04000000582c73cb7d33b1a2b2269d6b00ca1f6cfa32a36bcdf7c7f85e3a3da30ed421c51ed3c5a492ad97faf6d12b806a089c26215c08bdbaa599daad45dc1908b0d4d5af4c83597093001b0000000075ff318975ff3189f97be5115f5976571afd276fa0c37215605ddbd61d37e2f40201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff06037613030101ffffffff010000000000000000000000000001000000017a35864e454019b1192a5b7a58355edeb264923bcb8461313c677387258ecc67010000004847304402206a3c6a655e858d74b566885e72f7b7f91258f16c944b4f6c74df10f3fc0ec7860220350426a3b1318958402756b483ee703c590b034d61841a79eb56e59244550f8b01ffffffff04000000000000000000409277e45d000000232102af62f4bc029ec391b71074dd222c771f0ad17b38256c901af13adb0075cd8d74ac78f089005d000000232102af62f4bc029ec391b71074dd222c771f0ad17b38256c901af13adb0075cd8d74ac40defce3000000001976a9142f28328985dfa52fa9213a6ead9c2583e2f7251588ac00000000473045022100e077082775a52855eaa6e11464b38993e1be0096d41fbff0497187d60a07b007022070300f34df7cd43e1cfb895c5179a281c9505396c8c769857ad8f3783efd4201"; +// byte[] payload = Hex.decode(hexBlock); +// +// +// BitcoinSerializer serializer = new BitcoinSerializer(networkParameters,false); +// Block block = serializer.makeBlock(payload); +// +// System.out.println(block); +// +// +// LevelDBBlockStore levelDBBlockStore = new LevelDBBlockStore(context,new File("blockstore.dat")); +// +// //StoredBlock storedBlock0 = new StoredBlock(block,block.getWork(),201590); +// +// //levelDBBlockStore.put(storedBlock0); +// +// StoredBlock storedBlock = levelDBBlockStore.get(block.getHash()); +// +// System.out.println("##############"); +// System.out.println(storedBlock); +// +// } +// +// /** +// * Minimum entropy +// */ +// private static final int SEED_ENTROPY_EXTRA = 256; +// private static final int ENTROPY_SIZE_DEBUG = -1; +// +// public static List generateMnemonic(int entropyBitsSize){ +// byte[] entropy; +// if (ENTROPY_SIZE_DEBUG > 0){ +// entropy = new byte[ENTROPY_SIZE_DEBUG]; +// }else { +// entropy = new byte[entropyBitsSize / 8]; +// } +// SecureRandom secureRandom = new SecureRandom(); +// secureRandom.nextBytes(entropy); +// return bytesToMnemonic(entropy); +// } +// +// public static List bytesToMnemonic(byte[] bytes){ +// List mnemonic; +// try{ +// mnemonic = MnemonicCode.INSTANCE.toMnemonic(bytes); +// } catch (MnemonicException.MnemonicLengthException e) { +// throw new RuntimeException(e); // should not happen, we have 16 bytes of entropy +// } +// return mnemonic; +// } +// +// @Test +// public void zerocoinTransactionTest(){ +// +// NetworkParameters params = MainNetParams.get(); +// String zerocoinTxHex = "473044022018d79ecf0de1c1b6a6b2869d574c0c4f1517613e48bdd7661e632c48c0cecd4b02203c840273520b8cc15792202a288b964fc3b5986fceb87d8f39b7c82a73987c5b012102bbc42e2dcfe0aa8e9341254a6dd138915727dab4e1c89a3a196a161c2fbe49c6"; +// byte[] btes = Hex.decode(zerocoinTxHex); +// byte[] hash = Hex.decode("b45e049f36e3f0f39f0b30f30f5f75a68632b92e4b4242769c78b82a55a24322"); +// BitcoinSerializer serializer = new BitcoinSerializer(params,false); +// Transaction transaction = serializer.makeTransaction(btes,0,btes.length,hash); +// +// System.out.println(transaction.toString()); +// } +// +// @Test +// public void testConversion(){ +// +// byte[] payload = Hex.decode("ffffff"); +// long res = Utils.readUint32(payload,0); +// System.out.println("Res: "+res); +// } +// +// @Test +// public void parseTxHexTest(){ +// +// +// +// +// } +// +// @Test +// public void getZerocoinSpendTx(){ +// BriefLogFormatter.init(); +// +// final NetworkParameters params = MainNetParams.get(); +// Context.getOrCreate(params); +// +// +// PeerGroup peerGroup = new PeerGroup(params); +// peerGroup.addConnectedEventListener(new PeerConnectedEventListener() { +// @Override +// public void onPeerConnected(Peer peer, int peerCount) { +// System.out.println("connected"); +// // request the tx +// Sha256Hash txHash = Sha256Hash.wrap("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922"); +// InventoryItem item = new InventoryItem(InventoryItem.Type.Transaction,txHash); +// +// GetDataMessage getdata = new GetDataMessage(params); +// getdata.addItem(item); +// peer.sendMessage(getdata); +// } +// }); +// +// peerGroup.addGetDataEventListener(new GetDataEventListener() { +// @Nullable +// @Override +// public List getData(Peer peer, GetDataMessage m) { +// System.out.println(m); +// return null; +// } +// }); +// peerGroup.start(); +// Peer peer = peerGroup.connectToLocalHost(); +// +// while (true){ +// +// } +// +// } +// +// +// public Wallet createWallet(NetworkParameters networkParameters,File walletFile) throws IOException { +// Wallet wallet; +// if (!walletFile.exists()){ +// wallet = new Wallet(networkParameters); +// }else { +// try { +// wallet = Wallet.loadFromFile(walletFile); +// } catch (UnreadableWalletException e) { +// e.printStackTrace(); +// throw new RuntimeException(); +// } +// } +// return wallet; +// } +// +// @Test +// public void parseZerocoinSpend(){ +// +// try { +// +// NetworkParameters params = MainNetParams.get(); +// Context.getOrCreate(params); +// +// byte[] encoded = Files.readAllBytes(Paths.get("zc_transaction.txt")); +// String text = new String(encoded, "UTF-8"); +// System.out.println(text); +// byte[] zcTransaction = Hex.decode(text); +// // hash +// byte[] transactionHash = Sha256Hash.wrap("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922").getReversedBytes(); +// // Serialized +// BitcoinSerializer bitcoinSerializer = new BitcoinSerializer(params,true); +// Transaction transaction = bitcoinSerializer.makeTransaction(zcTransaction,0,zcTransaction.length,transactionHash); +// System.out.println(transaction.toString()); +// +// assert transaction.getHashAsString().equals("50f7c828374f73649730740574422786f52d88450d9c39af09decaba24644922") : "Hash is not the same"; +// +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } catch (Exception e){ +// e.printStackTrace(); +// } +// } +// +// @Test +// public void newEcKeyWallet() throws IOException { +// NetworkParameters params = MainNetParams.get(); +// Context.getOrCreate(params); +// File walletFile = new File("wallet_new_eckey.dat"); +// Wallet wallet = createWallet(params,walletFile); +// wallet.saveToFile(walletFile); +// wallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { +// @Override +// public void onBeforeAutoSave(File tempFile) { +// +// } +// +// @Override +// public void onAfterAutoSave(File newlySavedFile) { +// +// } +// }); +// +// for (ECKey key : wallet.getIssuedReceiveKeys()) { +// System.out.println(key.toStringWithPrivate(params)); +// } +// } +// +// @Test +// public void signMultiSigTransaction(){ +// +// NetworkParameters params = MainNetParams.get(); +// +// // First key, my key +// ECKey key1 = new ECKey(Hex.decode("57148e68f6e774204b8c0ba6921a9342d601413ca3cccc7453112f025410a7ad"),Hex.decode("023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae7")); +// +// +// // Use the redeem script we have saved somewhere to start building the transaction +// String redeemScriptStr = "5221023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae72103a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c52ae"; +// Script redeemScript = new Script(Hex.decode(redeemScriptStr)); +// +// // Start building the transaction by adding the unspent inputs we want to use +// // The data is taken from blockchain.info, and can be found here: https://blockchain.info/rawtx/ca1884b8f2e0ba88249a86ec5ddca04f937f12d4fac299af41a9b51643302077 +// Transaction spendTx = new Transaction(params); +// ScriptBuilder scriptBuilder = new ScriptBuilder(); +// // The output that we want to redeem.. +// scriptBuilder.data(new String("a91492363c63a03bdd9d532c81a2defb9f2dfdea121587").getBytes()); // Script of this output +// // tx hash +// String txHash = "f0bb04058d212955a3d479ea498e901fb004013c6ca863a1c07d820c1735a8ae"; +// TransactionInput input = spendTx.addInput(Sha256Hash.wrap(txHash), 1, scriptBuilder.build()); +// +// // Add outputs to the person receiving pivx +// Address receiverAddress = Address.fromBase58(params, "D9VYtFMfhcCdRtWrY3m7Dc17yeSrn9R94k"); +// Coin charge = Coin.valueOf(190000); // 0.019 mPIV +// Script outputScript = ScriptBuilder.createOutputScript(receiverAddress); +// spendTx.addOutput(charge, outputScript); +// +// // Sign the first part of the transaction using private key #1 +// Sha256Hash sighash = spendTx.hashForSignature(0, redeemScript, Transaction.SigHash.ALL, false); +// ECKey.ECDSASignature ecdsaSignature = key1.sign(sighash); +// TransactionSignature transactionSignarture = new TransactionSignature(ecdsaSignature, Transaction.SigHash.ALL, false); +// +// // Create p2sh multisig input script +// Script inputScript = ScriptBuilder.createP2SHMultiSigInputScript(Arrays.asList(transactionSignarture), redeemScript); +// +// // Add the script signature to the input +// input.setScriptSig(inputScript); +// System.out.println(Hex.toHexString(spendTx.bitcoinSerialize())); +// } +// +// @Test +// public void signWithSecondKey(){ +// NetworkParameters params = MainNetParams.get(); +// String txStr= "0100000001aea835170c827dc0a163a86c3c0104b01f908e49ea79d4a35529218d0504bbf0010000009200483045022100a11fac3165ef51adc12324d281384f7528effe83627340e3370e9c7edf2cb4d502205c24923f16d5c0a607bd137de31a1df552adcc265644fac5bab5079ed410796d01475221023910b54c9ee1ab2570efc5ef25b93139cd81c25780b35ea2b9a088b5d3557ae72103a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c52aeffffffff0130e60200000000001976a9142fbed053e4cd6a6d78a36da33cd797fc7572d53c88ac00000000"; +// Transaction spendTx = new Transaction(params,Hex.decode(txStr)); +// +// // Get the input chunks +// Script inputScript = spendTx.getInput(0).getScriptSig(); +// List scriptChunks = inputScript.getChunks(); +// +// // Create a list of all signatures. Start by extracting the existing ones from the list of script schunks. +// // The last signature in the script chunk list is the redeemScript +// List signatureList = new ArrayList(); +// Iterator iterator = scriptChunks.iterator(); +// Script redeemScript = null; +// +// while (iterator.hasNext()) +// { +// ScriptChunk chunk = iterator.next(); +// +// if (iterator.hasNext() && chunk.opcode != 0) +// { +// TransactionSignature transactionSignarture = TransactionSignature.decodeFromBitcoin(chunk.data, false); +// signatureList.add(transactionSignarture); +// } else +// { +// redeemScript = new Script(chunk.data); +// } +// } +// +// // Create the sighash using the redeem script +// Sha256Hash sighash = spendTx.hashForSignature(0, redeemScript, Transaction.SigHash.ALL, false); +// ECKey.ECDSASignature secondSignature; +// +// // Take out the key and sign the signhash +// ECKey key2 = new ECKey(Hex.decode("e9cd2c5daff035f1692e72c5d3c6ef9518d8a317e92cbe178bd5d1019fbf1cc9"),Hex.decode("03a93f64c2d1d2581826c85217eda6f97f45e899897e78bc385d5a7600e2d6252c")); +// secondSignature = key2.sign(sighash); +// +// // Add the second signature to the signature list +// TransactionSignature transactionSignarture = new TransactionSignature(secondSignature, Transaction.SigHash.ALL, false); +// signatureList.add(transactionSignarture); +// +// // Rebuild p2sh multisig input script +// inputScript = ScriptBuilder.createP2SHMultiSigInputScript(signatureList, redeemScript); +// spendTx.getInput(0).setScriptSig(inputScript); +// +// System.out.println(Hex.toHexString(spendTx.bitcoinSerialize())); +// +// } +// +// private static AtomicBoolean flag = new AtomicBoolean(false); +// +// @Test +// public void multiSig() throws IOException, BlockStoreException { +// BriefLogFormatter.init(); +// final NetworkParameters params = MainNetParams.get(); +// Context context = Context.getOrCreate(params); +// File walletFile = new File("wallet_4_multi_sig.dat"); +// Wallet wallet = createWallet(params,walletFile); +// +// +// // Add watched address +// wallet.addWatchedAddress(Address.fromBase58(params,"6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1")); +// Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); +// Script p2sh = ScriptBuilder.createP2SHOutputScript(redeemScript); +// wallet.addWatchedScripts(Lists.newArrayList(redeemScript,p2sh)); +// +// BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("blockstore_multi_sig1.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); +// //InputStream inputStream = new FileInputStream(new File("checkpoints")); +// +// try { +// String filename = "checkpoints"; +// String suffix = params instanceof MainNetParams ? "":"-testnet"; +// final InputStream checkpointsInputStream = new FileInputStream(new File(filename)); //context.openAssestsStream(filename+suffix); +// CheckpointManager.checkpoint(params, checkpointsInputStream, spvBlockStore, 1519731317); +// +// }catch (final IOException x) { +// x.printStackTrace(); +// }catch (Exception e){ +// e.printStackTrace(); +// } +// +// final BlockChain blockChain = new BlockChain(context,wallet,spvBlockStore); +// final PeerGroup peerGroup = new PeerGroup(params,blockChain); +// +// peerGroup.addPeerDiscovery(new PeerDiscovery() { +// @Override +// public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { +// return new InetSocketAddress[]{ +// //new InetSocketAddress("202.5.21.31",51474), +// new InetSocketAddress("185.101.98.175",8443) +// //new InetSocketAddress("localhost",51474) +// //new InetSocketAddress("88.198.192.110",51474) +// }; +// } +// +// @Override +// public void shutdown() { +// +// } +// }); +// peerGroup.setDownloadTxDependencies(0); +// peerGroup.addWallet(wallet); +// peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); +// } +// }); +// peerGroup.setMaxPeersToDiscoverCount(1); +// +// peerGroup.addConnectedEventListener(new PeerConnectedEventListener() { +// @Override +// public void onPeerConnected(Peer peer, int peerCount) { +// +// } +// }); +// +// peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// if ((blocksLeft/10000) == 0) { +// System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); +// } +// } +// }); +// peerGroup.startAsync(); +// peerGroup.downloadBlockChain(); +// +// System.out.println(wallet.toString(false,true,false,blockChain)); +// System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); +// +// +// System.out.println("########################"); +// System.out.println("########################"); +// System.out.println("########################"); +// +// for (TransactionOutput transactionOutput : wallet.getUnspents()) { +// System.out.println("---------------"); +// System.out.println(transactionOutput.getOutPointFor().toString()); +// System.out.println("---------------"); +// } +// +// while (true){ +// } +// +// } +// +// @Test +// public void checkTx() throws IOException { +// BriefLogFormatter.init(); +// final NetworkParameters params = MainNetParams.get(); +// Context context = Context.getOrCreate(params); +// File walletFile = new File("wallet_4_multi_sig.dat"); +// Wallet wallet = createWallet(params,walletFile); +// +// +// // Add watched address +// wallet.addWatchedAddress(Address.fromBase58(params,"6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1")); +// Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); +// Script p2sh = ScriptBuilder.createP2SHOutputScript(redeemScript); +// wallet.addWatchedScripts(Lists.newArrayList(redeemScript,p2sh)); +// +// System.out.println(wallet.toString(false,true,false,null)); +// System.out.println("########################"); +// System.out.println("########################"); +// System.out.println("########################"); +// System.out.println(Arrays.toString(wallet.getUnspents().toArray())); +// } +// +// @Test +// public void connect() throws BlockStoreException, IOException, InsufficientMoneyException { +// +// BriefLogFormatter.init(); +// +// FileHandler fh = new FileHandler("MyLogFile.log"); +// java.util.logging.Logger logger = java.util.logging.Logger.getLogger(""); +// logger.addHandler(fh); +// SimpleFormatter formatter = new SimpleFormatter(); +// fh.setFormatter(formatter); +// +// NetworkParameters networkParameters = MainNetParams.get(); +// Context context = new Context(networkParameters); +// //File dir = new File("dir"); +// //dir.mkdir(); +// File walletFile = new File("wallet_2.dat"); +// Wallet wallet = createWallet(networkParameters,walletFile); +// //Wallet wallet = restore(networkParameters); +// System.out.println("Wallet keys: "+Arrays.toString(wallet.getWatchedAddresses().toArray())); +// wallet.saveToFile(walletFile); +// wallet.autosaveToFile(walletFile, 20, TimeUnit.SECONDS, new WalletFiles.Listener() { +// @Override +// public void onBeforeAutoSave(File tempFile) { +// +// } +// +// @Override +// public void onAfterAutoSave(File newlySavedFile) { +// +// } +// }); +// // add the zspend +// wallet.addWatchedAddress(Address.fromBase58(networkParameters,"DFuEgkFtkXrMQfFoZXckm88LuqzAAukGK3")); +// +// BlockStore spvBlockStore = new LevelDBBlockStore(context,new File("blockstore_m3.dat")); //new LevelDBBlockStore(context,new File("blockstore.dat")); +// //InputStream inputStream = new FileInputStream(new File("checkpoints")); +// //CheckpointManager.checkpoint(networkParameters, inputStream, spvBlockStore, System.currentTimeMillis()); +// final BlockChain blockChain = new BlockChain(context,wallet,spvBlockStore); +// PeerGroup peerGroup = new PeerGroup(networkParameters,blockChain); +// //peerGroup.addPeerDiscovery(new DnsDiscovery(networkParameters)); +// peerGroup.addPeerDiscovery(new PeerDiscovery() { +// @Override +// public InetSocketAddress[] getPeers(long services, long timeoutValue, TimeUnit timeoutUnit) throws PeerDiscoveryException { +// return new InetSocketAddress[]{ +// //new InetSocketAddress("202.5.21.31",51474), +// new InetSocketAddress("185.101.98.175",8443) +// //new InetSocketAddress("localhost",51474) +// //new InetSocketAddress("88.198.192.110",51474) +// }; +// } +// +// @Override +// public void shutdown() { +// +// } +// }); +// peerGroup.setDownloadTxDependencies(0); +// peerGroup.addWallet(wallet); +// peerGroup.addBlocksDownloadedEventListener(new BlocksDownloadedEventListener() { +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// //System.out.println("block left: "+blocksLeft+", hash: "+block.getHash().toString()); +// } +// }); +// peerGroup.setMaxPeersToDiscoverCount(1); +// peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener(){ +// @Override +// public void onBlocksDownloaded(Peer peer, Block block, @Nullable FilteredBlock filteredBlock, int blocksLeft) { +// if ((blocksLeft/10000) == 0) { +// System.out.println("block left: " + blocksLeft + ", hash: " + block.getHash().toString()); +// } +// } +// }); +// peerGroup.startAsync(); +// peerGroup.downloadBlockChain(); +// +// System.out.println(wallet.toString(false,true,false,blockChain)); +// System.out.println("blockchain height: "+blockChain.chainHead.getHeight()); +// +// while (true){ +// +// } +// +// } +// +// public Transaction buildTx(Wallet wallet,NetworkParameters networkParameters,Address to,Coin amount) throws InsufficientMoneyException { +// SendRequest sendRequest = SendRequest.to(to,amount); +// sendRequest.useInstantSend = true; +// wallet.completeTx(sendRequest); +// return sendRequest.tx; +// } +// +// @Test +// public void decodeTx(){ +// Context context = new Context(MainNetParams.get()); +// byte[] txBytes = Utils.HEX.decode("01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5e04ffff001d01044c55552e532e204e657773202620576f726c64205265706f7274204a616e203238203230313620576974682048697320416273656e63652c205472756d7020446f6d696e6174657320416e6f7468657220446562617465ffffffff0100ba1dd205000000434104c10e83b2703ccf322f7dbd62dd5855ac7c10bd055814ce121ba32607d573b8810c02c0582aed05b4deb9c4b77b26d92428c61256cd42774babea0a073b2ed0c9ac00000000"); +// Transaction tx = new Transaction(MainNetParams.get(),txBytes); +// +// TransactionInput transactionInput = tx.getInput(0); +// System.out.println("Input: \nsequence "+transactionInput.getSequenceNumber()); +// System.out.println(Hex.toHexString(transactionInput.getScriptBytes())); +// System.out.println("\n\n"); +// TransactionOutput transactionOutput = tx.getOutput(0); +// System.out.println("Output:"); +// System.out.println(transactionOutput.getScriptPubKey()); +// +// byte[] pubKey = Utils.HEX.decode("04c10e83b2703ccf322f7dbd62dd5855ac7c10bd055814ce121ba32607d573b8810c02c0582aed05b4deb9c4b77b26d92428c61256cd42774babea0a073b2ed0c9"); +// ScriptBuilder scriptBuilder = new ScriptBuilder().addChunk(new ScriptChunk(65,pubKey)).op(ScriptOpCodes.OP_CHECKSIG); +// Script script = scriptBuilder.build(); +// System.out.println(script); +// +// //TransactionOutput transactionOutput1 = new TransactionOutput(MainNetParams.get(),tx,) +// } +// +// @Test +// public void verifyScript(){ +// +// Script redeemScript = new Script(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); +// +// System.out.println("redeemScript: "+redeemScript.toString()); +// +// // Hash of the redeem script +// byte[] hash = Utils.sha256hash160(redeemScript.getProgram()); +// String hashedRedeemScriptHex = Hex.toHexString(hash); +// +// System.out.println(hashedRedeemScriptHex); +// +// assert hashedRedeemScriptHex.equals("bdddbfdf7f8cc7ab7d42361324d036004204cf83") : "Fatal error" ; +// +// +// } +// +// @Test +// public void decodeMultiSigAndCheckvalidity(){ +// NetworkParameters param = MainNetParams.get(); +// Context.getOrCreate(param); +// Transaction tx = new Transaction( +// param, +// Hex.decode("0100000001105f6bb76efbca8be0a35674c8ece30b48772d8315d6e2f6d30234b6d0cd873101000000db00483045022100ff5fdac77de16e4f4761c7be657bf4eecb773add010bb475f05109d9ffbe4e4a02207b52af3d16aec0c4c9257175aaef1511b9cc6e790bf6223dda79e57d3d80a58f01483045022100b81b7ac2e1db8542415de6d2fa2293226e3b3dedb7b0a55943f6bfdefb25018f02203f00a0509bf1fe8235b84fd0343e02e508ae466db391fcba3740f4202a944e290147522102eed43149a2d0d681ceec269ff64f0380ce011f3d42fdaf47b0cc9b9ff0944c802103fb8ea7eb154134e796d68cf5ac24aff7f9e0c89be91315338acc6b995b8e174552aeffffffff0278ff73ad020000001976a914b4d8da98ed0efa48ed3c453415d7c5eea19b1c9988ac78ff73ad020000001976a9145fd67df219b31729a2137a4a5a512298520fce0e88ac00000000") +// ); +// +// // Change redeem script.. +// Script scriptSig = tx.getInput(0).getScriptSig(); +// ScriptBuilder scriptBuilder = new ScriptBuilder(); +// for (ScriptChunk scriptChunk : scriptSig.getChunks()) { +// System.out.println("Chunk: "+scriptChunk); +// // Check if it's the redeem script +// if (scriptChunk.opcode == 71){ +// // redeem script +// scriptBuilder.data(Hex.decode("5221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352ae")); +// }else { +// scriptBuilder.addChunk(scriptChunk); +// } +// } +// +// Script newScript = scriptBuilder.build(); +// tx.getInput(0).setScriptSig(newScript); +// +// +// System.out.println("new script: "+newScript.toString()); +// +// +// System.out.println(tx); +// +// Transaction txToRedeem = new Transaction( +// param, +// Hex.decode("01000000010ea11e99335a551e5b21d673d024347b32b843cfdeb90efa5681d8745e9437f2010000006a47304402201d7e0e552384ce0ff7d6ab386e3274b4be13c0f111048983712558044986e216022055bc59664fb6ecbc80476c94d05999efa221e1e4ca7b984e20eb00aad254d5ea012103ae5432f9a8bb7183c80390a83bbfb67b9b281a1aa180bbd793275611750b446dffffffff02c08df262020000001976a9149b49c6d2da780f5fa1e969398539d749b68d8e9d88ac0026e85a0500000017a914bdddbfdf7f8cc7ab7d42361324d036004204cf838700000000") +// ); +// tx.getInput(0).connect(txToRedeem,null); +// System.out.println( +// "####################\n"+tx); +// //tx.getInput(0).verify(new TransactionOutput(param,null,Hex.decode(),0)); +// tx.getInput(0).verify(); +// } +// +// @Test +// public void testDecodeAndVerify(){ +// NetworkParameters param = MainNetParams.get(); +// Context.getOrCreate(param); +// Transaction tx = new Transaction( +// param, +// Hex.decode("0100000001105f6bb76efbca8be0a35674c8ece30b48772d8315d6e2f6d30234b6d0cd87310100000091004730440220086ed6fe550915bc5d81f29de3c940145078ef1f41e2e128e1b1010f0eac9e7602202ea850bb112bf02a87ee6e058859138930727072d0f9771b8edc5dfa22ac912e01475221023c90f28fe64a6b7165c5b323e42c9e6f40822e0509c8bdc0db9c4ef8436efbc721030609b122a03279486e92893726c444267973a7b039fa02487f352dcad9b32c5352aeffffffff0278ff73ad020000001976a914b4d8da98ed0efa48ed3c453415d7c5eea19b1c9988ac78ff73ad020000001976a9145fd67df219b31729a2137a4a5a512298520fce0e88ac00000000") +// ); +// +// Transaction txToRedeem = new Transaction( +// param, +// Hex.decode("01000000010ea11e99335a551e5b21d673d024347b32b843cfdeb90efa5681d8745e9437f2010000006a47304402201d7e0e552384ce0ff7d6ab386e3274b4be13c0f111048983712558044986e216022055bc59664fb6ecbc80476c94d05999efa221e1e4ca7b984e20eb00aad254d5ea012103ae5432f9a8bb7183c80390a83bbfb67b9b281a1aa180bbd793275611750b446dffffffff02c08df262020000001976a9149b49c6d2da780f5fa1e969398539d749b68d8e9d88ac0026e85a0500000017a914bdddbfdf7f8cc7ab7d42361324d036004204cf838700000000") +// ); +// tx.getInput(0).connect(txToRedeem,null); +// System.out.println( +// "####################\n"+tx); +// //tx.getInput(0).verify(new TransactionOutput(param,null,Hex.decode(),0)); +// tx.getInput(0).verify(); +// +// } +// +// +// @SuppressWarnings({ "rawtypes", "unchecked" }) +// public static void chmod(final File path, final int mode) { +// try { +// final Class fileUtils = Class.forName("android.os.FileUtils"); +// final Method setPermissions = fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class); +// setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1); +// } +// catch (final Exception x) { +// System.out.println("problem using undocumented chmod api "+ x); +// } +// } +// +// public static final long copy(final Reader reader, final StringBuilder builder) throws IOException +// { +// return copy(reader, builder, 0); +// } +// +// public static final long copy(final Reader reader, final StringBuilder builder, final long maxChars) throws IOException +// { +// final char[] buffer = new char[256]; +// long count = 0; +// int n = 0; +// while (-1 != (n = reader.read(buffer))) +// { +// builder.append(buffer, 0, n); +// count += n; +// +// if (maxChars != 0 && count > maxChars) +// throw new IOException("Read more than the limit of " + maxChars + " characters"); +// } +// return count; +// } +// +// public static final long copy(final InputStream is, final OutputStream os) throws IOException +// { +// final byte[] buffer = new byte[1024]; +// long count = 0; +// int n = 0; +// while (-1 != (n = is.read(buffer))) +// { +// os.write(buffer, 0, n); +// count += n; +// } +// return count; +// } +// +// public static Wallet restoreWalletFromProtobufOrBase58(final InputStream is, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException +// { +// is.mark((int) backupMaxChars); +// +// try +// { +// return restoreWalletFromProtobuf(is, expectedNetworkParameters); +// } +// catch (final IOException x) +// { +// try +// { +// is.reset(); +// return restorePrivateKeysFromBase58(is, expectedNetworkParameters,backupMaxChars); +// } +// catch (final IOException x2) +// { +// throw new IOException("cannot read protobuf (" + x.getMessage() + ") or base58 (" + x2.getMessage() + ")", x); +// } +// } +// } +// +// public static Wallet restoreWalletFromProtobuf(final InputStream is, final NetworkParameters expectedNetworkParameters) throws IOException { +// try { +// final Wallet wallet = new WalletProtobufSerializer().readWallet(is, true, null); +// if (!wallet.getParams().equals(expectedNetworkParameters)) +// throw new IOException("bad wallet backup network parameters: " + wallet.getParams().getId()); +// if (!wallet.isConsistent()) +// throw new IOException("inconsistent wallet backup"); +// +// return wallet; +// } catch (final UnreadableWalletException x) { +// throw new IOException("unreadable wallet", x); +// } +// } +// +// public static Wallet restorePrivateKeysFromBase58(final InputStream is, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException +// { +// final BufferedReader keyReader = new BufferedReader(new InputStreamReader(is, Charsets.UTF_8)); +// +// // create non-HD wallet +// final KeyChainGroup group = new KeyChainGroup(expectedNetworkParameters); +// group.importKeys(readKeys(keyReader, expectedNetworkParameters,backupMaxChars)); +// return new Wallet(expectedNetworkParameters, group); +// } +// +// public static List readKeys(final BufferedReader in, final NetworkParameters expectedNetworkParameters,long backupMaxChars) throws IOException +// { +// try +// { +// final DateFormat format = Iso8601Format.newDateTimeFormatT(); +// +// final List keys = new LinkedList(); +// +// long charCount = 0; +// while (true) +// { +// final String line = in.readLine(); +// if (line == null) +// break; // eof +// charCount += line.length(); +// if (charCount > backupMaxChars) +// throw new IOException("read more than the limit of " + backupMaxChars + " characters"); +// if (line.trim().isEmpty() || line.charAt(0) == '#') +// continue; // skip comment +// +// final String[] parts = line.split(" "); +// +// final ECKey key = DumpedPrivateKey.fromBase58(expectedNetworkParameters, parts[0]).getKey(); +// key.setCreationTimeSeconds(parts.length >= 2 ? format.parse(parts[1]).getTime() / TimeUnit.SECONDS.toMillis(1) : 0); //DateUtils.SECOND_IN_MILLIS +// +// keys.add(key); +// } +// +// return keys; +// } +// catch (final AddressFormatException x) +// { +// throw new IOException("cannot read keys", x); +// } +// catch (final ParseException x) +// { +// throw new IOException("cannot read keys", x); +// } +// } +// +// public static class Iso8601Format extends SimpleDateFormat { +// private static final TimeZone UTC = TimeZone.getTimeZone("UTC"); +// +// private Iso8601Format(final String formatString) { +// super(formatString); +// +// setTimeZone(UTC); +// } +// +// public static DateFormat newTimeFormat() { +// return new Iso8601Format("HH:mm:ss"); +// } +// +// public static DateFormat newDateFormat() { +// return new Iso8601Format("yyyy-MM-dd"); +// } +// +// public static DateFormat newDateTimeFormat() { +// return new Iso8601Format("yyyy-MM-dd HH:mm:ss"); +// } +// +// public static String formatDateTime(final Date date) { +// return newDateTimeFormat().format(date); +// } +// +// public static Date parseDateTime(final String source) throws ParseException { +// return newDateTimeFormat().parse(source); +// } +// +// public static DateFormat newDateTimeFormatT() { +// return new Iso8601Format("yyyy-MM-dd'T'HH:mm:ss'Z'"); +// } +// +// public static String formatDateTimeT(final Date date) { +// return newDateTimeFormatT().format(date); +// } +// +// public static Date parseDateTimeT(final String source) throws ParseException { +// return newDateTimeFormatT().parse(source); +// } +// } +//} diff --git a/core/src/test/java/org/pivxj/core/TransactionOutputTest.java b/core/src/test/java/org/pivxj/core/TransactionOutputTest.java index 5fc11d9e5..f6974b4fd 100644 --- a/core/src/test/java/org/pivxj/core/TransactionOutputTest.java +++ b/core/src/test/java/org/pivxj/core/TransactionOutputTest.java @@ -64,7 +64,7 @@ public void testMultiSigOutputToString() throws Exception { @Test public void testP2SHOutputScript() throws Exception { - String P2SHAddressString = "35b9vsyH1KoFT5a5KtrKusaCcPLkiSo1tU"; + String P2SHAddressString = "6XhmA6QewRiLVaakw19RHS5Y5TMSGzFte1"; Address P2SHAddress = Address.fromBase58(MainNetParams.get(), P2SHAddressString); Script script = ScriptBuilder.createOutputScript(P2SHAddress); Transaction tx = new Transaction(MainNetParams.get()); diff --git a/core/src/test/java/org/pivxj/core/VersionedChecksummedBytesTest.java b/core/src/test/java/org/pivxj/core/VersionedChecksummedBytesTest.java index 0290bd074..170e2ca11 100644 --- a/core/src/test/java/org/pivxj/core/VersionedChecksummedBytesTest.java +++ b/core/src/test/java/org/pivxj/core/VersionedChecksummedBytesTest.java @@ -36,10 +36,10 @@ public class VersionedChecksummedBytesTest { public void stringification() throws Exception { // Test a testnet address. VersionedChecksummedBytes a = new VersionedChecksummedBytes(testParams.getAddressHeader(), HEX.decode("fda79a24e50ff70ff42f7d89585da5bd19d9e5cc")); - assertEquals("n4eA2nbYqErp7H6jebchxAN59DmNpksexv", a.toString()); + assertEquals("yL73bpwciHqM1R1ALLwdXfz6mLynff74QP", a.toString()); VersionedChecksummedBytes b = new VersionedChecksummedBytes(mainParams.getAddressHeader(), HEX.decode("4a22c3c4cbb31e4d03b15550636762bda0baf85a")); - assertEquals("17kzeh4N8g49GFvdDzSf8PjaPfyoD1MndL", b.toString()); + assertEquals("DBu6Bx11S5xRoG7DxaSDg9uBGoi6X2KA8D", b.toString()); } @Test diff --git a/core/src/test/java/org/pivxj/crypto/ChildKeyDerivationTest.java b/core/src/test/java/org/pivxj/crypto/ChildKeyDerivationTest.java index 45aa6a16c..7458a1034 100644 --- a/core/src/test/java/org/pivxj/crypto/ChildKeyDerivationTest.java +++ b/core/src/test/java/org/pivxj/crypto/ChildKeyDerivationTest.java @@ -23,6 +23,8 @@ import org.junit.*; import org.spongycastle.crypto.params.*; +import java.util.Arrays; + import static org.pivxj.core.Utils.*; import static org.junit.Assert.*; @@ -192,13 +194,13 @@ public void testSerializationMainAndTestNetworks() { NetworkParameters params = MainNetParams.get(); String pub58 = key1.serializePubB58(params); String priv58 = key1.serializePrivB58(params); - assertEquals("xpub661MyMwAqRbcF7mq7Aejj5xZNzFfgi3ABamE9FedDHVmViSzSxYTgAQGcATDo2J821q7Y9EAagjg5EP3L7uBZk11PxZU3hikL59dexfLkz3", pub58); - assertEquals("xprv9s21ZrQH143K2dhN197jMx1ppxRBHFKJpMqdLsF1ewxncv7quRED8N5nksxphju3W7naj1arF56L5PUEWfuSk8h73Sb2uh7bSwyXNrjzhAZ", priv58); + assertEquals("ToEA6epvY6iUs9r4QK25EVkWZAfakbR9JVwo27BroepgBsXqnJX9nGx9cXhHJVRzAixPvD8jeLYTcLyr29UJZb5dcfjYrdpSA6PnfvvRcmw3s6A", pub58); + assertEquals("TDt9EWvD5T5T44hAZqFk1Lhxi1SQug8aSwXa6n7Tmx4pY2osfyWW5P8YgM1fFJm2ZwSPaB1Q1ca9BNbnEqGSjKE37uZ1UAmdAbH8Pz3o8givbMJ", priv58); params = TestNet3Params.get(); pub58 = key1.serializePubB58(params); priv58 = key1.serializePrivB58(params); - assertEquals("tpubD6NzVbkrYhZ4WuxgZMdpw1Hvi7MKg6YDjDMXVohmZCFfF17hXBPYpc56rCY1KXFMovN29ik37nZimQseiykRTBTJTZJmjENyv2k3R12BJ1M", pub58); - assertEquals("tprv8ZgxMBicQKsPdSvtfhyEXbdp95qPWmMK9ukkDHfU8vTGQWrvtnZxe7TEg48Ui7HMsZKMj7CcQRg8YF1ydtFPZBxha5oLa3qeN3iwpYhHPVZ", priv58); + assertEquals("DRKVrRjogj3bNiLD8TTSAJ8NXmmvsnv9zTBWhogszZURcCGQqj6fyBzqcuyMZfHHSqz3S1oVbSteVmPVtB7cDU36EtHyznQimtD2inxjCvP4Vj3Y", pub58); + assertEquals("DRKPuUWy7gEYo13wzMuasNTFjT8FQVCsDL5nT3VXW8Te19NEfjrWFboHBp9HJHxE1PZS6k7SurTmKuLvyGoPGfVrpo7ti9JUswujSqRjkVnrS7hK", priv58); } @Test @@ -215,10 +217,11 @@ public void serializeToTextAndBytes() { final String priv58 = key1.serializePrivB58(params); final byte[] pub = key1.serializePublic(params); final byte[] priv = key1.serializePrivate(params); - assertEquals("xpub661MyMwAqRbcF7mq7Aejj5xZNzFfgi3ABamE9FedDHVmViSzSxYTgAQGcATDo2J821q7Y9EAagjg5EP3L7uBZk11PxZU3hikL59dexfLkz3", pub58); - assertEquals("xprv9s21ZrQH143K2dhN197jMx1ppxRBHFKJpMqdLsF1ewxncv7quRED8N5nksxphju3W7naj1arF56L5PUEWfuSk8h73Sb2uh7bSwyXNrjzhAZ", priv58); - assertArrayEquals(new byte[]{4, -120, -78, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, -68, 93, -104, -97, 31, -105, -18, 109, 112, 104, 45, -77, -77, 18, 85, -29, -120, 86, -113, 26, 48, -18, -79, -110, -6, -27, 87, 86, 24, 124, 99, 3, 96, -33, -14, 67, -19, -47, 16, 76, -49, -11, -30, -123, 7, 56, 101, 91, 74, 125, -127, 61, 42, -103, 90, -93, 66, -36, 2, -126, -107, 30, 24, -111}, pub); - assertArrayEquals(new byte[]{4, -120, -83, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, -68, 93, -104, -97, 31, -105, -18, 109, 112, 104, 45, -77, -77, 18, 85, -29, -120, 86, -113, 26, 48, -18, -79, -110, -6, -27, 87, 86, 24, 124, 99, 0, -96, -75, 47, 90, -49, 92, -74, 92, -128, -125, 23, 38, -10, 97, -66, -19, 50, -112, 30, -111, -57, -124, 118, -86, 126, -35, -4, -51, 19, 109, 67, 116}, priv); + assertEquals("ToEA6epvY6iUs9r4QK25EVkWZAfakbR9JVwo27BroepgBsXqnJX9nGx9cXhHJVRzAixPvD8jeLYTcLyr29UJZb5dcfjYrdpSA6PnfvvRcmw3s6A", pub58); + assertEquals("TDt9EWvD5T5T44hAZqFk1Lhxi1SQug8aSwXa6n7Tmx4pY2osfyWW5P8YgM1fFJm2ZwSPaB1Q1ca9BNbnEqGSjKE37uZ1UAmdAbH8Pz3o8givbMJ", priv58); + System.out.println(Arrays.toString(priv)); + assertArrayEquals(new byte[]{2, 45, 37, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, -68, 93, -104, -97, 31, -105, -18, 109, 112, 104, 45, -77, -77, 18, 85, -29, -120, 86, -113, 26, 48, -18, -79, -110, -6, -27, 87, 86, 24, 124, 99, 3, 96, -33, -14, 67, -19, -47, 16, 76, -49, -11, -30, -123, 7, 56, 101, 91, 74, 125, -127, 61, 42, -103, 90, -93, 66, -36, 2, -126, -107, 30, 24, -111}, pub); + assertArrayEquals(new byte[]{2, 33, 49, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, -68, 93, -104, -97, 31, -105, -18, 109, 112, 104, 45, -77, -77, 18, 85, -29, -120, 86, -113, 26, 48, -18, -79, -110, -6, -27, 87, 86, 24, 124, 99, 0, -96, -75, 47, 90, -49, 92, -74, 92, -128, -125, 23, 38, -10, 97, -66, -19, 50, -112, 30, -111, -57, -124, 118, -86, 126, -35, -4, -51, 19, 109, 67, 116}, priv); assertEquals(DeterministicKey.deserializeB58(null, priv58, params), key1); assertEquals(DeterministicKey.deserializeB58(priv58, params), key1); assertEquals(DeterministicKey.deserializeB58(null, pub58, params).getPubKeyPoint(), key1.getPubKeyPoint()); @@ -250,7 +253,7 @@ public void parentlessDeserialization() { assertEquals(key4.getPath().size(), 3); assertEquals(DeterministicKey.deserialize(params, key4.serializePrivate(params), key3,DeterministicKeyChain.KeyChainType.BIP32).getPath().size(), 3); assertEquals(DeterministicKey.deserialize(params, key4.serializePrivate(params), null,DeterministicKeyChain.KeyChainType.BIP32).getPath().size(), 1); - assertEquals(DeterministicKey.deserialize(params, key4.serializePrivate(params)).getPath().size(), 1); + assertEquals(DeterministicKey.deserialize(params, key4.serializePrivate(params), DeterministicKeyChain.KeyChainType.BIP32).getPath().size(), 1); } /** Reserializing a deserialized key should yield the original input */ diff --git a/core/src/test/java/org/pivxj/script/ScriptTest.java b/core/src/test/java/org/pivxj/script/ScriptTest.java index 6b40b82b5..b64f7da3c 100644 --- a/core/src/test/java/org/pivxj/script/ScriptTest.java +++ b/core/src/test/java/org/pivxj/script/ScriptTest.java @@ -81,7 +81,7 @@ public void testScriptPubKey() throws Exception { Script pubkey = new Script(pubkeyBytes); assertEquals("DUP HASH160 PUSHDATA(20)[33e81a941e64cda12c6a299ed322ddbdd03f8d0e] EQUALVERIFY CHECKSIG", pubkey.toString()); Address toAddr = new Address(PARAMS, pubkey.getPubKeyHash()); - assertEquals("mkFQohBpy2HDXrCwyMrYL5RtfrmeiuuPY2", toAddr.toString()); + assertEquals("y1iJNjXtr5FkRz7Nf7BTub3vHyz4cyjR28", toAddr.toString()); } @Test @@ -134,7 +134,7 @@ public void testCreateMultiSigInputScript() { Transaction transaction = PARAMS.getDefaultSerializer().makeTransaction(bytes); TransactionOutput output = transaction.getOutput(1); Transaction spendTx = new Transaction(PARAMS); - Address address = Address.fromBase58(PARAMS, "n3CFiCmBXVt5d3HXKQ15EFZyhPz4yj5F3H"); + Address address = Address.fromBase58(PARAMS, "y4EmHcSgo7Tent6cWkehtG1QZdEmxJwMBG"); Script outputScript = ScriptBuilder.createOutputScript(address); spendTx.addOutput(output.getValue(), outputScript); spendTx.addInput(output); diff --git a/core/src/test/java/org/pivxj/uri/PivxURITest.java b/core/src/test/java/org/pivxj/uri/PivxURITest.java index 9a15e7f20..09c97bed6 100644 --- a/core/src/test/java/org/pivxj/uri/PivxURITest.java +++ b/core/src/test/java/org/pivxj/uri/PivxURITest.java @@ -67,8 +67,8 @@ public void testConvertToBitcoinURI() throws Exception { assertEquals(CoinDefinition.coinURIScheme + ":" + MAINNET_GOOD_ADDRESS + "?message=Agatha", PivxURI.convertToBitcoinURI(goodAddress, null, "", "Agatha")); // no amount, no label, no message - assertEquals("bitcoin:" + MAINNET_GOOD_ADDRESS, PivxURI.convertToBitcoinURI(goodAddress, null, null, null)); - assertEquals("bitcoin:" + MAINNET_GOOD_ADDRESS, PivxURI.convertToBitcoinURI(goodAddress, null, "", "")); + assertEquals("pivx:" + MAINNET_GOOD_ADDRESS, PivxURI.convertToBitcoinURI(goodAddress, null, null, null)); + assertEquals("pivx:" + MAINNET_GOOD_ADDRESS, PivxURI.convertToBitcoinURI(goodAddress, null, "", "")); // different scheme final NetworkParameters alternativeParameters = new MainNetParams() { @@ -389,14 +389,14 @@ public void testPaymentProtocolReq() throws Exception { @Test public void testMultiplePaymentProtocolReq() throws Exception { PivxURI uri = new PivxURI(MAINNET, - "bitcoin:?r=https%3A%2F%2Fbitcoincore.org%2F%7Egavin&r1=bt:112233445566"); + "pivx:?r=https%3A%2F%2Fbitcoincore.org%2F%7Egavin&r1=bt:112233445566"); assertEquals(ImmutableList.of("bt:112233445566", "https://bitcoincore.org/~gavin"), uri.getPaymentRequestUrls()); assertEquals("https://bitcoincore.org/~gavin", uri.getPaymentRequestUrl()); } @Test public void testNoPaymentProtocolReq() throws Exception { - PivxURI uri = new PivxURI(MAINNET, "bitcoin:" + MAINNET_GOOD_ADDRESS); + PivxURI uri = new PivxURI(MAINNET, "pivx:" + MAINNET_GOOD_ADDRESS); assertNull(uri.getPaymentRequestUrl()); assertEquals(ImmutableList.of(), uri.getPaymentRequestUrls()); assertNotNull(uri.getAddress()); @@ -405,7 +405,7 @@ public void testNoPaymentProtocolReq() throws Exception { @Test public void testUnescapedPaymentProtocolReq() throws Exception { PivxURI uri = new PivxURI(TestNet3Params.get(), - "bitcoin:?r=https://merchant.com/pay.php?h%3D2a8628fc2fbe"); + "pivx:?r=https://merchant.com/pay.php?h%3D2a8628fc2fbe"); assertEquals("https://merchant.com/pay.php?h=2a8628fc2fbe", uri.getPaymentRequestUrl()); assertEquals(ImmutableList.of("https://merchant.com/pay.php?h=2a8628fc2fbe"), uri.getPaymentRequestUrls()); assertNull(uri.getAddress()); diff --git a/core/src/test/java/org/pivxj/utils/BtcFormatTest.java b/core/src/test/java/org/pivxj/utils/BtcFormatTest.java index 127d57bbd..a41201d9b 100644 --- a/core/src/test/java/org/pivxj/utils/BtcFormatTest.java +++ b/core/src/test/java/org/pivxj/utils/BtcFormatTest.java @@ -1326,7 +1326,7 @@ public void patternDecimalPlaces() { /* The pattern format provided by DecimalFormat includes specification of fractional digits, * but we ignore that because we have alternative mechanism for specifying that.. */ BtcFormat f = BtcFormat.builder().locale(US).scale(3).pattern("¤¤ #.0").fractionDigits(3).build(); - assertEquals("Millicoin-format BTC #.000;BTC -#.000", f.toString()); + assertEquals("Millicoin-format PIVX #.000;PIVX -#.000", f.toString()); assertEquals("mBTC 1000.000", f.format(COIN)); } diff --git a/core/src/test/java/org/pivxj/utils/MonetaryFormatTest.java b/core/src/test/java/org/pivxj/utils/MonetaryFormatTest.java index 4e1ca6376..f30cd1d41 100644 --- a/core/src/test/java/org/pivxj/utils/MonetaryFormatTest.java +++ b/core/src/test/java/org/pivxj/utils/MonetaryFormatTest.java @@ -210,14 +210,14 @@ private String formatRepeat(Coin coin, int decimals, int repetitions) { @Test public void standardCodes() throws Exception { - assertEquals("BTC 0.00", MonetaryFormat.BTC.format(Coin.ZERO).toString()); - assertEquals("mBTC 0.00", MonetaryFormat.MBTC.format(Coin.ZERO).toString()); - assertEquals("µBTC 0", MonetaryFormat.UBTC.format(Coin.ZERO).toString()); + assertEquals("PIV 0.00", MonetaryFormat.BTC.format(Coin.ZERO).toString()); + assertEquals("mPIV 0.00", MonetaryFormat.MBTC.format(Coin.ZERO).toString()); + assertEquals("µPIV 0", MonetaryFormat.UBTC.format(Coin.ZERO).toString()); } @Test public void customCode() throws Exception { - assertEquals("dBTC 0", MonetaryFormat.UBTC.code(1, "dBTC").shift(1).format(Coin.ZERO).toString()); + assertEquals("dPIV 0", MonetaryFormat.UBTC.code(1, "dPIV").shift(1).format(Coin.ZERO).toString()); } /** @@ -227,18 +227,18 @@ public void customCode() throws Exception { public void noCode() throws Exception { assertEquals("0", MonetaryFormat.UBTC.noCode().shift(0).format(Coin.ZERO).toString()); // Ensure that inserting a code after codes are wiped, works - assertEquals("dBTC 0", MonetaryFormat.UBTC.noCode().code(1, "dBTC").shift(1).format(Coin.ZERO).toString()); + assertEquals("dPIV 0", MonetaryFormat.UBTC.noCode().code(1, "dPIV").shift(1).format(Coin.ZERO).toString()); } @Test public void codeOrientation() throws Exception { - assertEquals("BTC 0.00", MonetaryFormat.BTC.prefixCode().format(Coin.ZERO).toString()); - assertEquals("0.00 BTC", MonetaryFormat.BTC.postfixCode().format(Coin.ZERO).toString()); + assertEquals("PIV 0.00", MonetaryFormat.BTC.prefixCode().format(Coin.ZERO).toString()); + assertEquals("0.00 PIV", MonetaryFormat.BTC.postfixCode().format(Coin.ZERO).toString()); } @Test public void codeSeparator() throws Exception { - assertEquals("BTC@0.00", MonetaryFormat.BTC.codeSeparator('@').format(Coin.ZERO).toString()); + assertEquals("PIV@0.00", MonetaryFormat.BTC.codeSeparator('@').format(Coin.ZERO).toString()); } @Test(expected = NumberFormatException.class) diff --git a/core/src/test/java/org/pivxj/wallet/DeterministicKeyChainTest.java b/core/src/test/java/org/pivxj/wallet/DeterministicKeyChainTest.java index 5aba2a136..407899633 100644 --- a/core/src/test/java/org/pivxj/wallet/DeterministicKeyChainTest.java +++ b/core/src/test/java/org/pivxj/wallet/DeterministicKeyChainTest.java @@ -30,6 +30,9 @@ import org.junit.Test; import org.spongycastle.crypto.params.KeyParameter; +import java.io.BufferedOutputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.security.SecureRandom; import java.util.List; @@ -59,9 +62,9 @@ public void derive() throws Exception { ECKey key2 = chain.getKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); assertFalse(key2.isPubKeyOnly()); - final Address address = Address.fromBase58(UnitTestParams.get(), "n1bQNoEx8uhmCzzA5JPG6sFdtsUQhwiQJV"); + final Address address = Address.fromBase58(UnitTestParams.get(), "xzDbaifQACV8ATmamfkHbsGBpJPYzMqNHK"); assertEquals(address, key1.toAddress(UnitTestParams.get())); - assertEquals("mnHUcqUVvrfi5kAaXJDQzBb9HsWs78b42R", key2.toAddress(UnitTestParams.get()).toString()); + assertEquals("y2vCD5c7nHvKcLpxHq85mwGiebbSdU3oNN", key2.toAddress(UnitTestParams.get()).toString()); assertEquals(key1, chain.findKeyFromPubHash(address.getHash160())); assertEquals(key2, chain.findKeyFromPubKey(key2.getPubKey())); @@ -70,7 +73,7 @@ public void derive() throws Exception { ECKey key3 = chain.getKey(KeyChain.KeyPurpose.CHANGE); assertFalse(key3.isPubKeyOnly()); - assertEquals("mqumHgVDqNzuXNrszBmi7A2UpmwaPMx4HQ", key3.toAddress(UnitTestParams.get()).toString()); + assertEquals("yJftHnu3LGsvtQkKmCbwZJ5iXsHvYyRJ9u", key3.toAddress(UnitTestParams.get()).toString()); key3.sign(Sha256Hash.ZERO_HASH); assertFalse(key3.isPubKeyOnly()); } @@ -90,16 +93,16 @@ public void deriveAccountOne() throws Exception { ECKey key1 = chain1.getKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); ECKey key2 = chain1.getKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); - final Address address = Address.fromBase58(UnitTestParams.get(), "n2nHHRHs7TiZScTuVhZUkzZfTfVgGYwy6X"); + final Address address = Address.fromBase58(UnitTestParams.get(), "yJFArTdvzWh6LkNLBStQLWBh5ni6EMeo4y"); assertEquals(address, key1.toAddress(UnitTestParams.get())); - assertEquals("mnp2j9za5zMuz44vNxrJCXXhZsCdh89QXn", key2.toAddress(UnitTestParams.get()).toString()); + assertEquals("y4GvJCLdy3LStByM4iBDn39jBzR3c5TrLv", key2.toAddress(UnitTestParams.get()).toString()); assertEquals(key1, chain1.findKeyFromPubHash(address.getHash160())); assertEquals(key2, chain1.findKeyFromPubKey(key2.getPubKey())); key1.sign(Sha256Hash.ZERO_HASH); ECKey key3 = chain1.getKey(KeyChain.KeyPurpose.CHANGE); - assertEquals("mpjRhk13rvV7vmnszcUQVYVQzy4HLTPTQU", key3.toAddress(UnitTestParams.get()).toString()); + assertEquals("y6CKGnM7jyTepuhJgMoL547Sd6GhCdwFNW", key3.toAddress(UnitTestParams.get()).toString()); key3.sign(Sha256Hash.ZERO_HASH); } @@ -124,7 +127,7 @@ public void serializeAccountOne() throws Exception { DeterministicKeyChain chain1 = new AccountOneChain(ENTROPY, "", secs); ECKey key1 = chain1.getKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); - final Address address = Address.fromBase58(UnitTestParams.get(), "n2nHHRHs7TiZScTuVhZUkzZfTfVgGYwy6X"); + final Address address = Address.fromBase58(UnitTestParams.get(), "yJFArTdvzWh6LkNLBStQLWBh5ni6EMeo4y"); assertEquals(address, key1.toAddress(UnitTestParams.get())); DeterministicKey watching = chain1.getWatchingKey(); @@ -150,14 +153,14 @@ public DeterministicKeyChain makeWatchingKeyChain(Protos.Key key, Protos.Key fir chain1 = DeterministicKeyChain.fromProtobuf(keys, null, factory).get(0); ECKey key2 = chain1.getKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); - assertEquals("mnp2j9za5zMuz44vNxrJCXXhZsCdh89QXn", key2.toAddress(UnitTestParams.get()).toString()); + assertEquals("y4GvJCLdy3LStByM4iBDn39jBzR3c5TrLv", key2.toAddress(UnitTestParams.get()).toString()); assertEquals(key1, chain1.findKeyFromPubHash(address.getHash160())); assertEquals(key2, chain1.findKeyFromPubKey(key2.getPubKey())); key1.sign(Sha256Hash.ZERO_HASH); ECKey key3 = chain1.getKey(KeyChain.KeyPurpose.CHANGE); - assertEquals("mpjRhk13rvV7vmnszcUQVYVQzy4HLTPTQU", key3.toAddress(UnitTestParams.get()).toString()); + assertEquals("y6CKGnM7jyTepuhJgMoL547Sd6GhCdwFNW", key3.toAddress(UnitTestParams.get()).toString()); key3.sign(Sha256Hash.ZERO_HASH); assertEquals(watching, chain1.getWatchingKey()); @@ -227,6 +230,8 @@ public void serializeUnencrypted() throws UnreadableWalletException { int numItems = 1 // mnemonic/seed + 1 // master key + + 1 // purpose --> 44 + + 1 // coin type --> 119 (PIV) or 37361148 (zPIV) + 1 // account key + 2 // ext/int parent keys + (chain.getLookaheadSize() + chain.getLookaheadThreshold()) * 2 // lookahead zone on each chain @@ -324,7 +329,7 @@ public void watchingChain() throws UnreadableWalletException { NetworkParameters params = MainNetParams.get(); DeterministicKey watchingKey = chain.getWatchingKey(); final String pub58 = watchingKey.serializePubB58(params); - assertEquals("xpub69KR9epSNBM59KLuasxMU5CyKytMJjBP5HEZ5p8YoGUCpM6cM9hqxB9DDPCpUUtqmw5duTckvPfwpoWGQUFPmRLpxs5jYiTf2u6xRMcdhDf", pub58); + assertEquals("ToEA6op3hsW2FrVQapzP22mYRxswzchMryhv4MQn7VDbwBjNrjw6M8La2nPxwgrrLG6G3ZgfqE8uuuxcZHxo19sU1WjXN3Ft5n7HaGujx1U6zNy", pub58); watchingKey = DeterministicKey.deserializeB58(null, pub58, params); watchingKey.setCreationTimeSeconds(100000); chain = DeterministicKeyChain.watch(watchingKey); @@ -353,7 +358,7 @@ public void watchingChain() throws UnreadableWalletException { @Test(expected = IllegalStateException.class) public void watchingCannotEncrypt() throws Exception { - final DeterministicKey accountKey = chain.getKeyByPath(DeterministicKeyChain.ACCOUNT_ZERO_PATH); + final DeterministicKey accountKey = chain.getKeyByPath(DeterministicKeyChain.BIP44_ACCOUNT_ZERO_PATH); chain = DeterministicKeyChain.watch(accountKey.dropPrivateBytes().dropParent()); chain = chain.toEncrypted("this doesn't make any sense"); } diff --git a/core/src/test/java/org/pivxj/wallet/MultiWalletTest.java b/core/src/test/java/org/pivxj/wallet/MultiWalletTest.java new file mode 100644 index 000000000..465da8cd0 --- /dev/null +++ b/core/src/test/java/org/pivxj/wallet/MultiWalletTest.java @@ -0,0 +1,114 @@ +package org.pivxj.wallet; + +import com.zerocoinj.core.context.ZerocoinContext; +import host.furszy.zerocoinj.wallet.MultiWallet; +import org.junit.Assert; +import org.junit.Test; +import org.pivxj.core.*; +import org.pivxj.crypto.DeterministicKey; +import org.pivxj.params.MainNetParams; +import org.pivxj.params.UnitTestParams; +import org.pivxj.testing.TestWithWallet; +import org.spongycastle.util.encoders.Hex; + +import java.net.InetAddress; + +import static org.pivxj.testing.FakeTxBuilder.createFakeTx; +import static org.pivxj.wallet.DeterministicKeyChain.KeyChainType.BIP44_PIV; +import static org.pivxj.wallet.DeterministicKeyChain.KeyChainType.BIP44_ZPIV; +import static org.pivxj.wallet.WalletTest.broadcastAndCommit; + +public class MultiWalletTest extends TestWithWallet { + + @Test + public void pivAndZpivDerivationPath(){ + + NetworkParameters params = MainNetParams.get(); + + DeterministicSeed seed = new DeterministicSeed( + Hex.decode("760a00eda285a842ad99626b61faebb6e36d80decae6665ac9c5f4c17db5185858d9fed30b6cd78a7daff4e07c88bf280cfc595620a4107613b50cab42a32f9b"), + "", + System.currentTimeMillis() + ); + + KeyChainGroup keyChainGroupPiv = new KeyChainGroup(params, seed, BIP44_PIV); + KeyChainGroup keyChainGroupZpiv = new KeyChainGroup(params, seed, BIP44_ZPIV); + + Wallet pivWallet = new Wallet(params,keyChainGroupPiv); + Wallet zPivWallet = new Wallet(params,keyChainGroupZpiv); + + + DeterministicKey keyPiv = pivWallet.freshKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); + Assert.assertEquals("invalid PIV path", "M/44H/119H/0H/0/0", keyPiv.getPathAsString()); + + DeterministicKey keyZpiv = zPivWallet.freshKey(KeyChain.KeyPurpose.RECEIVE_FUNDS); + System.out.println(keyZpiv.getPathAsString()); + Assert.assertEquals("Invalid zPIV path", "M/44H/37361148H/0H/0/0", keyZpiv.getPathAsString()); + + PeerGroup peerGroup = new PeerGroup(params); + peerGroup.addWallet(pivWallet); + peerGroup.addWallet(zPivWallet); + } + + @Test + public void generateZPIV(){ + try { + NetworkParameters params = UnitTestParams.get(); + setUp(); + DeterministicSeed seed = new DeterministicSeed( + Hex.decode("760a00eda285a842ad99626b61faebb6e36d80decae6665ac9c5f4c17db5185858d9fed30b6cd78a7daff4e07c88bf280cfc595620a4107613b50cab42a32f9b"), + "", + System.currentTimeMillis() + ); + MultiWallet multiWallet = new MultiWallet(params, new ZerocoinContext(), seed); + loadWallet(multiWallet, Coin.valueOf(2,0)); + SendRequest req = multiWallet.createMintRequest(Coin.valueOf(2, 0)); + + + Transaction tx = req.tx; + tx.getConfidence().markBroadcastBy(new PeerAddress(PARAMS, InetAddress.getByAddress(new byte[]{1,2,3,4}))); + tx.getConfidence().markBroadcastBy(new PeerAddress(PARAMS, InetAddress.getByAddress(new byte[]{10,2,3,4}))); + multiWallet.commitTx(tx); + + + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getZpivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getZpivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + // Confirmed tx + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN, tx); + sendMoneyToWallet(multiWallet.getZpivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN,tx); + // More blocks.. + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(multiWallet.getPivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + + + System.out.println(multiWallet.getPivWallet()); + // TODO: add the receiving part of this.. i have to check how is this calculated + System.out.println(multiWallet.getZPivWallet()); + + } catch (InsufficientMoneyException e) { + e.printStackTrace(); + Assert.fail(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + Assert.fail("Fail for: " + e.getMessage()); + } + } + + private void loadWallet(MultiWallet multiWallet, Coin coin) { + this.wallet = multiWallet.getPivWallet(); + + sendMoneyToWallet(AbstractBlockChain.NewBlockType.BEST_CHAIN, Coin.valueOf(2,0),wallet.freshReceiveAddress()); + sendMoneyToWallet(multiWallet.getZpivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + sendMoneyToWallet(AbstractBlockChain.NewBlockType.BEST_CHAIN, Coin.valueOf(1,0),wallet.freshReceiveAddress()); + sendMoneyToWallet(multiWallet.getZpivWallet(),AbstractBlockChain.NewBlockType.BEST_CHAIN); + + System.out.println("wallet balance: " + wallet.getBalance()); + System.out.println("wallet unspendable: " + wallet.getBalance(Wallet.BalanceType.ESTIMATED)); + } + + +} diff --git a/core/src/test/java/org/pivxj/wallet/WalletTest.java b/core/src/test/java/org/pivxj/wallet/WalletTest.java index 8801cd29e..1aa317079 100644 --- a/core/src/test/java/org/pivxj/wallet/WalletTest.java +++ b/core/src/test/java/org/pivxj/wallet/WalletTest.java @@ -421,7 +421,7 @@ private void basicSanityChecks(Wallet wallet, Transaction t, Address destination t.getInputs().get(0).verify(); } - private static void broadcastAndCommit(Wallet wallet, Transaction t) throws Exception { + public static void broadcastAndCommit(Wallet wallet, Transaction t) throws Exception { final LinkedList txns = Lists.newLinkedList(); wallet.addCoinsSentEventListener(new WalletCoinsSentEventListener() { @Override diff --git a/examples/build.gradle b/examples/build.gradle index e69de29bb..88c29db47 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -0,0 +1,11 @@ +apply plugin: 'java' + +dependencies { + implementation project(':core') + implementation 'com.google.guava:guava:24.0-android' + implementation 'net.sf.jopt-simple:jopt-simple:4.3' + implementation 'org.slf4j:slf4j-jdk14:1.7.25' + implementation 'org.fusesource.leveldbjni:leveldbjni-all:1.8' +} + +sourceCompatibility = 1.8 \ No newline at end of file diff --git a/examples/src/main/java/org/pivxj/examples/ForwardingService.java b/examples/src/main/java/org/pivxj/examples/ForwardingService.java index 2e4db0297..d5897ab08 100644 --- a/examples/src/main/java/org/pivxj/examples/ForwardingService.java +++ b/examples/src/main/java/org/pivxj/examples/ForwardingService.java @@ -154,7 +154,7 @@ public void run() { // The wallet has changed now, it'll get auto saved shortly or when the app shuts down. System.out.println("Sent coins onwards! Transaction hash is " + sendResult.tx.getHashAsString()); } - }, MoreExecutors.sameThreadExecutor()); + }, MoreExecutors.directExecutor()); //MasternodeDB.dumpMasternodes(); FlatDB mndb = new FlatDB(kit.directory().getAbsolutePath(),"mncache.dat", "magicMasternodeCache"); diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..01b8bf6b1 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..933b6473c --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 000000000..cccdd3d51 --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 000000000..e95643d6a --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle index e69de29bb..eb7bac292 100644 --- a/settings.gradle +++ b/settings.gradle @@ -0,0 +1,4 @@ +include 'core' +include 'tools' +include 'examples' +//include 'wallettemplate' \ No newline at end of file diff --git a/tools/build.gradle b/tools/build.gradle index e69de29bb..ef363dd86 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'java' + +dependencies { + implementation project(':core') + implementation group: 'org.bitcoinj', name: 'orchid', version: '1.2.1' + implementation 'com.google.guava:guava:24.0-android' + implementation 'net.sf.jopt-simple:jopt-simple:4.3' + implementation 'org.slf4j:slf4j-jdk14:1.7.25' +} + +sourceCompatibility = 1.8 + +task wallet_tool(type: JavaExec) { + description = 'Print and manipulate wallets.' + main = 'org.bitcoinj.tools.WalletTool' + if (project.hasProperty('appArgs') && appArgs.length() > 0) + args = Arrays.asList(appArgs.split("\\s+")) + classpath = sourceSets.main.runtimeClasspath +} + +task build_checkpoints(type: JavaExec) { + description = 'Create checkpoint files to use with CheckpointManager.' + main = 'org.bitcoinj.tools.BuildCheckpoints' + if (project.hasProperty('appArgs') && appArgs.length() > 0) + args = Arrays.asList(appArgs.split("\\s+")) + classpath = sourceSets.main.runtimeClasspath +} \ No newline at end of file diff --git a/wallettemplate/build.gradle b/wallettemplate/build.gradle index e69de29bb..c670ea858 100644 --- a/wallettemplate/build.gradle +++ b/wallettemplate/build.gradle @@ -0,0 +1,18 @@ +apply plugin: 'java' + +dependencies { + implementation project(':core') + implementation 'com.google.guava:guava:24.0-android' + implementation 'org.fxmisc.easybind:easybind:1.0.2' + implementation group: 'org.bitcoinj', name: 'orchid', version: '1.2.1' + implementation 'de.jensd:fontawesomefx:8.0.0' + implementation 'net.glxn:qrgen:1.3' + implementation 'org.slf4j:slf4j-jdk14:1.7.25' +} + +sourceCompatibility = 1.8 + +task wallet_template(type: JavaExec) { + main = 'wallettemplate.Main' + classpath = sourceSets.main.runtimeClasspath +} \ No newline at end of file